3. Чтобы решить уравнение третьего порядка

y///=2x-y-y/+y//

на отрезке [0,1], с шагом h=0,2 и начальными условиями

y0//=1

y0/=1

y0=1

необходимо сделать 3 замены: y/=a y0/=a0=1

y//=a/=b y0//=b0=1

b/=2x-y-a+b

1).x1=0,2; x1/2=0,1

y(a1)=y(a0)+a0h y(a1/2)=y(a0)+f10h/2

a(b1)=a(b0)+β0h a(b1/2)=a(b0)+f20h/2

b(x1,y1,a1)=b(x0,y0,a0)+γ0h b(x1/2,y1/2,a1/2)=b(x0,y0,a0)+f30h/2

f10=f(a0,y(a0))=1 y1/2=1+1*0,1=1,1

f20=f(b0,a(b0))=1 a1/2=1+1*0,1=1,1

f30=f(x0,y0,a0,b0)=-1 b1/2=1-1*0,1=0,9

α0=a1/2=1,1 y(a1)=1+1,1*0,2=1,22

β0=b1/2=0,9 a(b1)=1+0,9*0,2=1,18

γ0=2*0,1-1,1-1,1+0,9=-1,1 b(x1,y1,a1)=1-1,1*0,2=0,78

2).x2=0,4; x1+1/2=x1+h/2=0,3

f11=a1=1,18 y1+1/2=1,22+1,18*0,1=1.338

f21=b1=0,78 a1+1/2=1,18+0,78*0,1=1,258

f31=2*0,2-1,22-1,18+0,78=-1,22 b1+1/2=-1,22*0,1+0,78=0,658

α1=a1+1/2=1,258 y2=1,22+1,258*0,2=1,4716

β1=b1+1/2=0,658 a2=1,18+0,658*0,2=1,3116

γ1=2*0,3-1,338-1,258+0,658=-1,338 b2=0,78-1,338*0,2=0,5124

3).x3=0,6; x2+1/2=0,5

f12=a2=1,3116 y2+1/2=1,47+1,3*0,1=1,60276

f22=b2=0,5124 a2+1/2=1,3116+0,5*0,1=1.36284

f32=2*0,4-1,47-1,31+0,512=-1,4708 b2+1/2=0,4-1,4*0,1=0,36542

α2=1,36284 y3=1,4716+1,3116*0,2=1,744168

β2=0,36542 a3=1,3116+0,3654*0,2=1,384664

γ2=2*0,5-1,6-1,36+0,365=-1,60018 b3= 0,51-1,60018*0,2=0,192364

4).x4=0,8; x3+1/2=0,7

f13=1,384664 y3+1/2=1,74+1,38*0,1=1,8826364

f23=0,192364 a3+1/2=1,38+0,19*0,1=1,4039204

f33=2*0,6-1,7-1,38+0,19=-1,736488 b3+1/2=0,19-1,7*0,1=0,0187152

α3=1,4039204 y4=1,74+1,4*0,2=2,0249477

β3=0,0187152 a4=1,38+0,9187*0,2=1,388403

γ3=2*0,7-1,88-1,4+0,0187=-1,8678416 b4=0,192-1,87*0,2=-0,1812235

5).x4=1; x4+1/2=0,9

f14=1,388403 y4+1/2=2,02+1,388*0,1=2,16379478

f24=-0,1812235 a4+1/2=1,4-0.181*0,1=1,370306608

f34=2*0,8-2,02-1,388-0,18=-1,9945834 b4+1/2=-0,18-1,99*0,1=-0,38066266

α4=1,3703 y5=2,02+1,37*0,2=2,2990038

β4=-0,38066 a5=1,388-0,38*0,2=1,3122669

γ4=2*0,9-2,16-1,37-0,38=-2,114764056 b5=-0,181-2,1*0,2=-0,6041734

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Программа на Turbo Pascal

 

uses crt,pram,kurs1_1;

var

yx,xy,l,v,p,ff,ay,by,x:array [0..10] of real;

y,a,b:array[0..10,0..1] of real;

i,n,o:integer;

c,d,h,k:real;

label

lap1;

begin

screen1;

clrscr;

writeln('введите наивысший порядок производной не больше трех ');

readln(n);

if n=0 then begin

writeln('это прямолинейная зависимость и решается без метода Эйлера ');

goto lap1;end;

writeln('введите коэффициенты {a0,a1}');

for i:=0 to n do

readln(l[i]);

if (n=1) and (l[1]=0) or (n=2) and (l[2]=0) or (n=3) and (l[3]=0) then begin

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

goto lap1;

end;

writeln('введите коэффициент при x');

readln(k);

writeln('введите отрезок ');

readln(c,d);

o:=5;

h:=abs(d-c)/o;

writeln('шаг=',h:1:1);

writeln('задайте начальные условия y(x)= ');

for i:=0 to n-1 do

readln(v[i]);

if n=3 then begin

yx[0]:=v[0];

ay[0]:=v[1];

by[0]:=v[2];

p[0]:=(k*c-l[0]*v[0]-l[1]*v[1]-l[2]*v[2])/l[3];

x[0]:=c;

gotoxy(32,1);

write(' ');

gotoxy(32,2);

write(' x y a b ');

gotoxy(32,3);

write(' ',c:7:7,' ',yx[0]:7:7,' ',ay[0]:7:7,' ',by[0]:7:7,' ');

for i:=0 to o-1 do begin

x[i]:=x[i]+h/2;

y[i,1]:=yx[i]+(h/2)*ay[i];

 

 

 

 

a[i,1]:=ay[i]+(h/2)*by[i];

b[i,1]:=by[i]+(h/2)*p[i];

ff[i]:=(k*x[i]-l[0]*y[i,1]-l[1]*a[i,1]-l[2]*b[i,1])/l[3];

xy[i]:=x[i]+h/2;

yx[i+1]:=yx[i]+h*a[i,1];

ay[i+1]:=ay[i]+h*b[i,1];

by[i+1]:=by[i]+h*ff[i];

x[i+1]:=x[i]+h/2;

p[i+1]:=(k*xy[i]-l[0]*yx[i+1]-l[1]*ay[i+1]-l[2]*by[i+1])/l[3];

end;

for i:=0 to o-1 do begin

gotoxy(32,4+i);

write(' ',xy[i]:7:7,' ',yx[i+1]:7:7,' ',ay[i+1]:7:7,' ',by[i+1]:7:7,' ');

end;

gotoxy(32,4+o);

write(' ');

end;

if n=2 then begin

x[0]:=c;

yx[0]:=v[0];

ay[0]:=v[1];

p[0]:=(k*c-l[0]*yx[0]-l[1]*v[1])/l[2];

gotoxy(32,1);

write(' ');

gotoxy(32,2);

write(' x y a ');

gotoxy(32,3);

write(' ',c:7:7,' ',yx[0]:7:7,' ',ay[0]:7:7,' ');

for i:=0 to o-1 do begin

x[i]:=x[i]+h/2;

y[i,1]:=yx[i]+(h/2)*ay[i];

a[i,1]:=ay[i]+(h/2)*p[i];

ff[i]:=(k*x[i]-l[0]*y[i,1]-l[1]*a[i,1])/l[2];

xy[i]:=x[i]+h/2;

yx[i+1]:=yx[i]+h*a[i,1];

ay[i+1]:=ay[i]+h*ff[i];

x[i+1]:=x[i]+h/2;

p[i+1]:=(k*xy[i]-l[0]*yx[i+1]-l[1]*ay[i+1])/l[2];

end;

for i:=0 to o-1 do begin

gotoxy(32,4+i);

write(' ',xy[i]:7:7,' ',yx[i+1]:7:7,' ',ay[I+1]:7:7,' ');

end;

gotoxy(32,4+o);

write(' ');

end;

if n=1 then begin

x[0]:=c;

yx[0]:=v[0];

p[0]:=(k*x[0]-l[0]*yx[0])/l[1];

for i:=0 to o-1 do begin

x[i]:=x[i]+h/2;

y[i,1]:=yx[i]+(h/2)*p[i];

xy[i]:=x[i]+h/2;

 

 

 

ff[i]:=(k*x[i]-l[0]*y[i,1])/l[1];

yx[i+1]:=yx[i]+h*ff[i];

x[i+1]:=x[i]+h/2;

p[i+1]:=(k*xy[i]-l[0]*yx[i+1])/l[1];

end;

gotoxy(32,1);

write(' ');

gotoxy(32,2);

write(' x y ');

gotoxy(32,3);

write(' ',c:7:7,' ',yx[0]:7:7,' ');

for i:=0 to o-1 do begin

gotoxy(32,4+i);

write(' ',xy[i]:7:7,' ',yx[i+1]:7:7,' ');

end;

gotoxy(32,o+4);

write(' ');

end;

lap1:readln;

pramo;

delay(10000);

clrscr;

end.

 

 

 

 

 

 

 

ЗАПУСК ПРОГРАММЫ НА ВЫПОЛНЕНИЕ

Программа находится в файле kursova1.pas, и имеет 2 модуля, в которых содержатся заставки. Модули находятся в файлах pram.tpu и kurs1_1.tpu.

Для запуска файла kursova1.pas в Turbo Pascal необходимо нажать F9. Появится первая заставка, далее нажать enter и ввести все необходимые начальные условия: порядок производной, коэффициенты при членах рада, отрезок и начальные значения у(х0). На экране выводится шаг вычисления и таблица с ответами. После нажатия enter выводится вторая заставка, после чего мы возвращаемся к тексту программы.

 

 

 

 

 

ОПИСАНИЕ ПРОГРАММЫ

1 – ввод данных, используемых в программе

2 – использование метки, очистка экрана, ввод требований, решение

дифференциального уравнения в зависимости от ввода начальных

условий

3 – присвоение начальных условий для дифференциального уравнения

третьего порядка

4 – вывод таблицы со значениями

5 – ввод формул метода Эйлера для уравнения третьего порядка

6 – присвоение начальных условий для решения дифференциального

уравнения второго порядка

7 – вывод таблицы для уравнения второго порядка

8 – формулы метода Эйлера для уравнения второго порядка

9 – начальные условия для дифференциального уравнения первого порядка

10 – формулы метода Эйлера для решения уравнения первого порядка

11 – вывод таблицы

12 – обращение к метке, задержка для просмотра результатов, очистка

экрана, конец программы.


Информация о работе «Численный расчет дифференциальных уравнений»
Раздел: Математика
Количество знаков с пробелами: 13378
Количество таблиц: 0
Количество изображений: 1

Похожие работы

Скачать
9943
29
24

... = cos(aּπּt) и нулевых начальных условиях; 3. Выводы по работе №3 В процессе данной практической работы я изучил возможности математического пакета MathCad в среде Windows для решения дифференциальных уравнений N-го порядка, используемых в инженерных расчетах электротехнических систем. Были выполнены численные методы решения дифференциальных уравнений N-го порядка. Заданное ...

Скачать
12056
47
3

... численных методов (при решении реальных, а не учебных задач!) предполагает использование компьютеров с достаточным быстродействием. Использование для численного решения дифференциальных уравнений компьютерного пакета MathCAD предполагает знание алгоритма работы численных методов для разумного их применения (знание границ применимости, оценки точности, затрат компьютерных ресурсов и др.). Дело в ...

Скачать
23188
0
17

... при использовании этого метода функцию необходимо вычислять четыре раза. 3. Выбор метода реализации программы Исходя из вышеизложенного, для решения систем дифференциальных уравнений мы выбираем наиболее точный метод решения – метод Рунге-Кутта 4 порядка, один из самых употребляемых методов интегрирования дифференциальных уравнений. этот метод является одноступенчатым и одношаговым требует ...

Скачать
27686
0
13

... при использовании этого метода функцию необходимо вычислять четыре раза3. Выбор метода реализации программы Исходя из вышеизложенного, для решения систем дифференциальных уравнений мы выбираем наиболее точный метод решения – метод Рунге-Кутта 4 порядка, один из самых употребляемых методов интегрирования дифференциальных уравнений этот метод является одноступенчатым и одношаговым ...

0 комментариев


Наверх