- •Оглавление
- •Реализация в Excel
- •Численные методы решения нелинейных уравнений
- •Постановка задачи
- •Шаговый метод
- •Метод деления отрезка пополам
- •Метод касательных (Ньютона)
- •Метод хорд
- •Метод простой итерации
- •Численные методы решения определенных интегралов
- •Постановка задачи
- •Метод левых прямоугольников
- •Метод правых прямоугольников
- •Метод центральных прямоугольников
- •Метод трапеций
- •Метод парабол (Симпсона)
- •Метод Эйлера
- •Численные методы решения дифференциальных уравнений
- •Постановка задачи
- •Метод Эйлера
- •Метод Рунге-Кутты 4-го порядка
- •Метод Рунге-Кутты 5-го порядка
- •Метод Адамса
- •Метод прогонки
- •Погрешность результата численного решения задач
- •Задание 1-a
- •Задание 1-b
- •Задание 1-c
- •Задание 1-d
- •Задание 1-e
- •Задание 1-f
- •Задание 2
- •Метод сопряженных градиентов
- •Решение нелинейных уравнений
- •Решение определенных интегралов
- •Формулы Ньютна – Котесса
- •Метод Гаусса
- •Метод Тейлора
- •Решение обыкновенных дифференциальных уравнений
- •Метод Эйлера
- •Метод Рунге-Кутты 4-го порядка
- •Метод Рунге-Кутты 5-го порядка
- •Метод Адамса
- •Прогонка
- •Вывод:
- •Список литературы
Решение обыкновенных дифференциальных уравнений
Решить дифференциальное уравнение с заданными начальными условиями:
, y(0), [a,b]=[0,0.3], h=0.1.
Решить краевую задачу методом прогонки:
A(x) = |
0.4 + 2x + |
|
x2 |
, |
|
|
|||
|
2 |
|
|
||||||
B(x) = x 0.7 , |
|
|
|
|
|||||
C (x) = −0.95x 2 , |
|
|
|
|
|||||
f (x) = |
|
|
+ cos(2x) , |
|
|
||||
|
x |
|
|
||||||
|
|
|
π |
|
|
xn − x0 |
|
||
x0 = 1, xn = 1.5, n = |
8, h = |
= 0.0625 , |
|||||||
n |
|||||||||
|
|
|
|
|
|
|
|
||
y(x0 ) = 1.3, y(xn ) = 1.1.
Метод Эйлера
Файл eiler.mac:
func(x,y) := exp(x*y); print("Method eilera"); print("y'=exp(x*y)");
x0 : read("Vvedite x0: "); xN : read("Vvedite xN: "); h : read("Vvedite shag: "); y : read("Vvedite y0: ");
print("x |
y"); |
while x0<xN+h do( |
|
dy : h*func(x0,y), |
|
print(x0," |
", y), |
y : y+dy, |
|
x0 : x0+h |
|
); |
|
Рис. 20. Метод Эйлера.
Метод Рунге-Кутты 4-го порядка
Файл RK4.mac:
func(x,y):=exp(x*y);
x0 : read("Vvedite x0: "); xN : read("Vvedite xN: "); h : read("Vvedite shag: "); y : read("Vvedite y0: ");
x : x0; |
|
|
print("x |
y"); |
|
while x<xN+h do( |
|
|
print(x," |
",y), |
|
k1 |
: h*func(x,y), |
|
k2 |
: h*func(x + h/2, y + k1/2), |
|
k3 |
: h*func(x + h/2, y + k2/2), |
|
k4 |
: h*func(x + h, y + k3), |
|
y : y+(k1+2*k2+2*k3+k4)/6, x : x+h
);
Рис. 21. Рунге-Кутты 4-го порядка.
Метод Рунге-Кутты 5-го порядка
Файл RK5.mac:
func(x,y):=exp(x*y);
x0 : read("Vvedite x0: "); xN : read("Vvedite xN: "); h : read("Vvedite shag: "); y : read("Vvedite y0: "); x : x0;
print("x y"); while(x<xN+h) do( print(x," ",y), k1 : h*func(x,y)/3,
k2 : h*func(x + h/3, y + k1)/3,
k3 : h*func(x + h/3, y + k1/2 + k2/2)/3,
k4 : h*func(x + h/2, y + 3*k1/8 + 9*k3/8)/3,
k5 : h*func(x + h, y + 3*k1/2 - 9*k3/2 + 6*k4)/3, y : y+(k1 + 4*k4 + k5)/2,
x : x+h );
Рис. 22. Рунге-Кутты 5-го порядка.
Метод Адамса
Файл adams.mac:
func(x,y):=exp(x*y);
x0 : read("Vvedite x0: "); xN : read("Vvedite xN: "); h : read("Vvedite shag: "); y0 : read("Vveidte y(x0): "); n : ceiling(abs(xN-x0)/h);
i : 0; y : y0; x : x0;
array(yh, n); array(yh2, 2*n); while x<=xN do( yh[i] : y,
k1 : h*func(x,y),
k2 : h*func(x + h/2, y + k1/2),
k3 : h*func(x + h/2, y + k2/2),
k4 : h*func(x + h, y + k3),
y : y+(k1+2*k2+2*k3+k4)/6, x : x+h,
i : i + 1 );
i : 4;
x : x0 + i*h; while x<=xN do(
yh[i] : yh[i-1]+h*(55*func(x,yh[i-1])-59*func(x-h,yh[i-2])+37*func(x-2*h,yh[i-3])-9*func(x- 3*h,yh[i-4]))/24,
x : x+h, i : i+1 );
print("Result: y(", xN,") = ", yh[n]); y : y0;
x : x0; h : h/2; i : 0;
while x<=xN do( yh2[i] : y,
k1 : h*func(x,y),
k2 : h*func(x + h/2, y + k1/2),
k3 : h*func(x + h/2, y + k2/2),
k4 : h*func(x + h, y + k3),
y : y+(k1+2*k2+2*k3+k4)/6, x : x+h,
i : i + 1 );
i : 8;
x : x0 + i*h; while x<=xN do(
yh2[i] : yh2[i-1]+h*(55*func(x,yh2[i-1])-59*func(x-h,yh2[i-2])+37*func(x-2*h,yh2[i-3])- 9*func(x-3*h,yh2[i-4]))/24,
x : x+h, i : i+1 );
print("eps = ", (yh[n]-yh2[2*n])/(2^4-1));
Рис. 23. Рунге-Кутты Адамса.
Прогонка
Файл progon.mac:
funA(x) := 0.4+2.0*x+x*x/2.0; funB(x) := x^0.7;
funC(x) := -0.95*x*x;
funF(x) := (x^2+cos(2.0*x/3.1416))/funA(x);
a : read("vvedite a: "); b : read("vvedite b: "); N : read("vvedite n: "); array(y, N);
y[0] : read("vvedite y(a): "); y[N] : read("vvedite y(b): "); h : (b-a)/N;
m[0] : -2.0+funB(a)*h/funA(a);
n[0] : 1.0-funB(a)*h/funA(a)+funC(a)*h*h/funA(a); c[0] : 1.0/m[0];
d[0] : -n[0]*y[0]+funF(a)*h*h; for i:1 thru N do(
x : a+i*h,
m[i] : -2.0+funB(x)*h/funA(x),
n[i] : 1.0-funB(x)*h/funA(x)+funC(x)*h*h/funA(x), c[i] : 1.0/(m[i]-n[i]*c[i-1]),
d[i] : funF(x)*h*h-n[i]*c[i-1]*d[i-1]
);
for i : N thru 2 step -1 do(
y[i-1] : c[i-2]*(d[i-2]-y[i])
); |
|
print("x |
y"); |
for i: 0 thru N do( |
|
print(a+i*h, " |
", y[i]) |
); |
|
Рис. 24. Прогонки.
