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 – обращение к метке, задержка для просмотра результатов, очистка
экрана, конец программы.
... = cos(aּπּt) и нулевых начальных условиях; 3. Выводы по работе №3 В процессе данной практической работы я изучил возможности математического пакета MathCad в среде Windows для решения дифференциальных уравнений N-го порядка, используемых в инженерных расчетах электротехнических систем. Были выполнены численные методы решения дифференциальных уравнений N-го порядка. Заданное ...
... численных методов (при решении реальных, а не учебных задач!) предполагает использование компьютеров с достаточным быстродействием. Использование для численного решения дифференциальных уравнений компьютерного пакета MathCAD предполагает знание алгоритма работы численных методов для разумного их применения (знание границ применимости, оценки точности, затрат компьютерных ресурсов и др.). Дело в ...
... при использовании этого метода функцию необходимо вычислять четыре раза. 3. Выбор метода реализации программы Исходя из вышеизложенного, для решения систем дифференциальных уравнений мы выбираем наиболее точный метод решения – метод Рунге-Кутта 4 порядка, один из самых употребляемых методов интегрирования дифференциальных уравнений. этот метод является одноступенчатым и одношаговым требует ...
... при использовании этого метода функцию необходимо вычислять четыре раза3. Выбор метода реализации программы Исходя из вышеизложенного, для решения систем дифференциальных уравнений мы выбираем наиболее точный метод решения – метод Рунге-Кутта 4 порядка, один из самых употребляемых методов интегрирования дифференциальных уравнений этот метод является одноступенчатым и одношаговым ...
0 комментариев