Politechnika Świętokrzyska
Metody obliczeniowe
Grupa: 312B
W27.
Piotr Chebdowski
1. Zmodyfikowana metoda Eulera.
W zmodyfikowanej metodzie Eulera wykorzystujemy dodatkowo styczną w punkcie
P, będącym środkiem przedziału (t, t+h):
Najpierw znajdujemy styczną w punkcie t, a następnie na jej podstawie wyznaczamy
wartość punktu P odległego od t o h/2. Wartość szukanej funkcji w punkcie t+h
znajdujemy z kolei w oparciu o równanie stycznej w wyznaczonym punkcie P.
W metodzie tej błąd będzie mniejszy gdyż w kolejnych krokach analizujemy punkty
odległe od siebie o h/2 a nie o h.
Wzór opisujący sposób znajdowania kolejnego punktu można zapisać:
h h
yn 1 yn h f tn yn f tn yn
t
2 2
Funkcja realizująca zmodyfikowaną metodę Eulera:
Euler2(t0 y0 a b h) y0 y0
t0 t0
b a
for i 1
K1, K2 wartości pomocnicze
h
K1 h f ti 1 yi 1
wzór obliczający kolejne wartości
z wykorzystaniem wartości
h K1
K2 h f ti 1 yi 1
pomocniczej K2
2 2
yi yi 1 K2
ti ti 1 h
y
t
Rozwiązanie (założenia i warunki początkowe jak w podstawowej metodzie
Eulera):
1.6
1.4
Euler2(t0 y0 a b h)0
1.2
1
0.8
50 100 150
Euler2(t0 y0 a b h)1
yródło: http://student.agh.edu.pl/~drelek/studia/3semestr/metody/sprawozdanie 4 rr.doc
2. Program.
public class RrrzRK {
private Double[] y = new Double[11];
private Double[] x = new Double[11];
private Double[][] k = new Double[11][4];
private Double[][] mk = new Double[11][4];
private Double[] suma = new Double[11];
private Double h;
public RrrzRK() {
h = 0.1;
x[0] = 1.7;
y[0] = 5.6;
}
private double function(Double x, Double y) {
return h * (x + Math.cos((y + x) / Math.PI));
}
private void rK() {
for (int i = 0; i < 11; i++) {
suma[i] = 0.0;
k[i][0] = function(x[i], y[i]);
mk[i][0] = k[i][0];
k[i][1] = function(x[i] + 0.5 * h, y[i] + 0.5 * k[i][0]);
mk[i][1] = 2 * k[i][1];
k[i][2] = function(x[i] + 0.5 * h, y[i] + 0.5 * k[i][1]);
mk[i][2] = 2 * k[i][2];
k[i][3] = function(x[i] + h, y[i] + k[i][2]);
mk[i][3] = k[i][3];
suma[i] = (mk[i][0] + mk[i][1] + mk[i][2] + mk[i][3]) / 6;
if (i < 10) {
x[i + 1] = x[i] + h;
y[i + 1] = y[i] + suma[i];
}
System.out.printf("y = %f dla x = %.1f\n", y[i], x[i]);
}
}
public static void main(String[] args) {
RrrzRK r = new RrrzRK();
r.rK();
}
}
3. Konsola.
Wyszukiwarka
Podobne podstrony:
metobl 312B lab3 A143 Chebdowskimetobl 312B lab5 C121 Chebdowskimetobl 312B lab7 U15 Chebdowskimetobl 312B lab6 scilab Chebdowskilab9lab9metobl lab 7 313B r Markiewicz MajkaW27 bgslab9lab9lab9 ReadMemetobl lab 4 313B u42 Markiewicz Majkalab9lab9 ZAI9G1S1 Nadolny Michal Lab9sr lab9Lab9lab9więcej podobnych podstron