
Програмки с отчётами по числакам / 2. Задача Коши для ОДУ 2 порядка / 2. Вар 5
.docxМинистерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение Высшего профессионального образования
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ
Отчет по лабораторной работе № 2
«ЧИСЛЕННОЕ РЕШЕНИЕ ЗАДАЧИ КОШИ ДЛЯ ЛИНЕЙНОГО ОБЫКНОВЕННОГО ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ ВТОРОГО ПОРЯДКА»
Программа/ Результат |
Теоретический материал |
Оценка |
|
|
|
Группа: Ф-0
Курс: Численные методы
Выполнил:
Преподаватель: Рябов Павел Николаевич
Москва 2012 год
-
Решаем уравнение
2. График
точного решения
Метод Эйлера h = 0,05 |
Метод Рунге- Кутты 4, c h= 0.1 |
Метод Рунге-Кутты 4, c h= 0.05 |
Поправка Рунге ΔuР для метода Рунге –Кутты 4 |
Точное решение u0(x) в узлах сетки |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
Погрешность
метода в каждом узле расчётной области
(шаг
):
Модуль разности решения по методу Эйлера и точного решения, |
Модуль
разности решения по методу РК4 с h=0.1
и точного решения, |
Модуль
разности решения по методу РК4 с h=0.05
и точного решения, |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
Код. Эйлер + Р-К 4 и 3 порядка точности
uses crt, math;
Function pU(x,y,z:real):real; //funkcia posle u'=...
begin
pU:= z;
end;
Function pZ(x,y,z:real):real; //funkcia posle z'=...
begin
pZ:=cosh(x)+x*sinh(x)-sinh(x)*y-cosh(x)*z;
end;
Function U(x:real):real; //U- tochnoe reshenie
begin
U:= x+ exp(-sinh(x));
end;
var
x,y,z,y2,dy:array [0..100] of real;
h,k1,k2,k3,k4,m1,m2,m3,m4:real;
i,n:integer;
output:text;
begin
Assign(output,'c:/out2.txt');
Rewrite(output);
clrscr;
n:=20;
h:=0.05;
x[0]:=0; //nach usloviya
y[0]:= 1; //u(0) dlya shaga h
y2[0]:=1; //u(0) dlya shaga 2h
z[0]:=0; //u'(0)
Writeln(output,'Tochnoe reshenie na melkoi setke (h)');
Writeln(output,u(x[0]));
For i:=1 to n do
begin
x[i]:=x[i-1]+h;
Writeln(output,u(x[i]));
end;
Writeln(output);
//Method Eulera
Writeln(output,'Euler na setke h');
//Rac4ety
For i:=0 to n do
begin
y[i+1]:=y[i]+z[i]*h;
z[i+1]:=z[i]+pZ(x[i],y[i],z[i])*h;
x[i+1]:=x[i]+h;
end;
//Vyvod rezultata
Writeln(output,' u |u-u0|');
For i:=0 to n do
Writeln(output,y[i],' ',abs(y[i]-u(x[i])):1 );
Writeln(output);
//Method Runge-Kutty 4
Writeln(output,'RK4 na setke h s uto4neniem dlya shaga 2h');
//Ras4ety dlya zadannogo shaga h
For i:=0 to n do
begin
k1:=h*pZ(x[i],y[i],z[i]);
m1:=h*pU(x[i],y[i],z[i]);
k2:=h*pZ(x[i]+h/2,y[i]+m1/2,z[i]+k1/2);
m2:=h*pU(x[i]+h/2,y[i]+m1/2,z[i]+k1/2);
k3:=h*pZ(x[i]+h/2,y[i]+m2/2,z[i]+k2/2);
m3:=h*pU(x[i]+h/2,y[i]+m2/2,z[i]+k2/2);
k4:=h*pZ(x[i]+h,y[i]+m3,z[i]+k3);
m4:=h*pU(x[i]+h,y[i]+m3,z[i]+k3);
z[i+1]:=z[i]+(1/6)*(k1+2*k2+2*k3+k4);
y[i+1]:=y[i]+(1/6)*(m1+2*m2+2*m3+m4);
end;
//Ras4ety dlya grubogo shaga 2h
h:=2*h;
i:=0;
While i<=n do
begin
k1:=h*pZ(x[i],y[i],z[i]);
m1:=h*pU(x[i],y[i],z[i]);
k2:=h*pZ(x[i]+h/2,y[i]+m1/2,z[i]+k1/2);
m2:=h*pU(x[i]+h/2,y[i]+m1/2,z[i]+k1/2);
k3:=h*pZ(x[i]+h/2,y[i]+m2/2,z[i]+k2/2);
m3:=h*pU(x[i]+h/2,y[i]+m2/2,z[i]+k2/2);
k4:=h*pZ(x[i]+h,y[i]+m3,z[i]+k3);
m4:=h*pU(x[i]+h,y[i]+m3,z[i]+k3);
z[i+2]:=z[i]+(1/6)*(k1+2*k2+2*k3+k4);
y2[i+2]:=y2[i]+(1/6)*(m1+2*m2+2*m3+m4);
i:=i+2;
end;
//Vyvod
Writeln(output,' u1 u2 |u1-u0| |u2-u0| dy |u2*-u0|');
i:=0;
While i<=n do
begin
dy[i]:=(y[i]-y2[i])/15;
Writeln(output,y2[i],' ',y[i],' ',y2[i]-u(x[i]):1,' ',y[i]-u(x[i]):1,' ',dy[i]:1,' ',dy[i]+y[i]-u(x[i]):1);
i:=i+1;
Writeln(output,' ',y[i],' ',y[i]-u(x[i]):1);
i:=i+1;
end;
Writeln(output);
//Method Runge-Kutty 3
Writeln(output);
Writeln(output,'RK3 na setke h s uto4neniem dlya shaga 2h');
h:=h/2;
//Ras4ety dlya zadannogo shaga h
For i:=0 to n do
begin
k1:=h*pZ(x[i],y[i],z[i]);
m1:=h*pU(x[i],y[i],z[i]);
k2:=h*pZ(x[i]+h/3,y[i]+m1/3,z[i]+k1/3);
m2:=h*pU(x[i]+h/3,y[i]+m1/3,z[i]+k1/3);
k3:=h*pZ(x[i]+2*h/3,y[i]+2*m2/3,z[i]+2*k2/3);
m3:=h*pU(x[i]+2*h/3,y[i]+2*m2/3,z[i]+2*k2/3);
z[i+1]:=z[i]+(1/4)*(k1+3*k3);
y[i+1]:=y[i]+(1/4)*(m1+3*m3);
end;
//Ras4ety dlya grubogo shaga 2h
h:=2*h;
i:=0;
While i<=n do
begin
k1:=h*pZ(x[i],y[i],z[i]);
m1:=h*pU(x[i],y[i],z[i]);
k2:=h*pZ(x[i]+h/3,y[i]+m1/3,z[i]+k1/3);
m2:=h*pU(x[i]+h/3,y[i]+m1/3,z[i]+k1/3);
k3:=h*pZ(x[i]+2*h/3,y[i]+2*m2/3,z[i]+2*k2/3);
m3:=h*pU(x[i]+2*h/3,y[i]+2*m2/3,z[i]+2*k2/3);
z[i+2]:=z[i]+(1/4)*(k1+3*k3);
y2[i+2]:=y2[i]+(1/4)*(m1+3*m3);
i:=i+2;
end;
//Vyvod
Writeln(output,' u1 u2 |u1-u0| |u2-u0| dy |u2*-u0|');
i:=0;
While i<=n do
begin
dy[i]:=(y[i]-y2[i])/15;
Writeln(output,y2[i],' ',y[i],' ',abs(y2[i]-u(x[i])):1,' ',abs(y[i]-u(x[i])):1,' ',dy[i]:1,' ',abs(dy[i]+y[i]-u(x[i])):1);
i:=i+1;
Writeln(output,' ',y[i],' ',abs(y[i]-u(x[i])):1);
i:=i+1;
end;
Writeln(output);
Close(output);
Writeln('out2.txt');
Readln;
end.