Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
09.12.2013
Размер:
48.64 Кб
Скачать

Цель: изучение методов численного интегрирования обыкновенных дифференциальных уравнений на ЭВМ, сравнительный анализ решения

Задание: решить уравнение y”+4y=exp(3x)(13x+7), начальные условия у(0)=0,

y'(0)=-4, интервал интегрирования 0-2, точное решение у=cos(2x)-sin(2x)+exp(3x)(x-1);

Листинг программы

Program difur; uses crt;

const a=0; b=2; h=0.1;

var z,x,y,yisp,Uisp,Upro,Umod,ypro,ymod,zpro,zmod,zisp:array[0..100]of real;

i,n :integer;

begin

clrscr;

n:=round((b-a)/h);

x[0]:=0;

y[0]:=0;

for i:=0 to n do

begin

x[i]:=x[0]+i*h;

y[i]:=cos(2*57.295*x[i])-sin(2*57.295*x[i])+exp(3*x[i])*(x[i]-1);

end;

ypro[0]:=0;

ymod[0]:=0;

yisp[0]:=0;

zmod[0]:=-4;

zisp[0]:=-4;

Методы Эйлера

for i:=0 to 3 do

begin

x[i]:=x[0]+i*h;

простой

Upro[i]:= exp(3*x[i])*(13*x[i]+7)-4*ypro[i]; ypro[i+1]:=ypro[i]+h*Upro[i];

модифицированный

Umod[i]:=exp(3*(x[i]+h/2))*(13*(x[i]+h/2)+7)-4*(ymod[i]+h/2*zmod[i]); ymod[i+1]:=ymod[i]+h*Umod[i]; zmod[i+1]:=zmod[i]+h*(zmod[i]+h/2*ymod[i+1]);

исправленный

Uisp[i]:=0.5*((exp(3*x[i])*(13*x[i]+7)-4*yisp[i])+exp(3*(x[i]+h))*(13*(x[i]+h)+7)-4*(yisp[i]+h*zisp[i])); yisp[i+1]:=yisp[i]+h*Uisp[i];

zisp[i+1]:=zisp[i]+h/2*(zisp[i]+(zisp[i]+h*yisp[i+1]));

end;

Методы Милна

Простой

for i:=3 to n do

begin x[i]:=x[0]+i*h;

1формула

ypro[i+1]:=ypro[i-3]+4*(h/3)*(2*Upro[i-2]-Upro[i-1]+2*Upro[i]); Upro[i+1]:=exp(3*x[i+1])*(13*x[i+1]+7)-4*ypro[i+1];

2 формула

ypro[i+1]:=ypro[i-1]+h/3*(Upro[i+1]+4*Upro[i]+Upro[i-1]);

end;

Модифицированный

for i:=3 to n do

begin

x[i]:=x[0]+i*h;

1 формула

ymod[i+1]:=ymod[i-3]+4*h/3*(2*Umod[i-2]-Umod[i-1]+2*Umod[i]);

Umod[i+1]:=exp(3*(x[i+1]+h/2))*(13*(x[i+1]+h/2)+7)-4*(ymod[i+1]+h/2*ymod[i+1]);

2 формула

ymod[i+1]:=ymod[i-1]+h/3*(Umod[i+1]+4*Umod[i]+Umod[i-1]);

end;

Исправленный

for i:=3 to n do

begin

x[i]:=x[0]+i*h;

1 формула

yisp[i+1]:=yisp[i-3]+4*h/3*(2*Uisp[i-2]-Uisp[i-1]+2*Uisp[i]);

Uisp[i+1]:=0.5*((exp(3*x[i+1])*(13*x[i+1]+7)-4*yisp[i+1])+exp(3*(x[i+1]+h))*(13*(x[i+1]+h)+7)-4*(yisp[i+1]+h*yisp[i+1]));

2 формула

yisp[i+1]:=yisp[i-1]+h/3*(Uisp[i+1]+4*Uisp[i]+Uisp[i-1]);

end;

writeln(' Методы Эйлера ');

writeln('Шаг x Простой Исправл. Модифиц. Точное');

for i:=0 to 2 do begin

write(i:2,' ',a+i*h:2:2,' ',ypro[i]:7:5); write(' ',yisp[i]:7:5);

write(' ',ymod[i]:7:5);writeln(' ',y[i]:7:5); end;

writeln(' Метод Милна ');

for i:=3 to 7 do

begin

write(i:2,' ',a+i*h:2:2,' ',ypro[i]:7:5,' ',yisp[i]:7:5);

write(' ',ymod[i]:7:5); writeln(' ', y[i]:7:5);

end;

for i:=8 to n do

begin

write(i:2,' ',a+i*h:2:2,' ',ypro[i]:7:5,' ',yisp[i]:7:5);

write(' ',ymod[i]:7:5); writeln(' ', y[i]:7:5);

end;

readln;

end.

Вывод: т.к. точное решение в моем варианте кардинально отличается от написанного алгоритма, то, если его не учитывать, можно предположить, что исправленный и модифицированный методы Эйлера более точные, чем простой.

Соседние файлы в папке 3_теориЛеготкина