Помогите пожалуйста написать на паскале программу
"Сведение краевой задачи (для обычных диф. уравнений 2 порядка) к двум задачам Коши"
{Метод Стрільби
Для лінійної крайової задачі}
Type Vec=array[1..2] of real;
Type Vec1=array[1..6] of real;
Var x0,x9,p1,a0,a1,h:real;
Var i,n:integer;g:Vec1;
Procedure PQR(Var x,p,q,r:real);{Коефіцієнти P,Q,R}
Begin p:=1./x;q:=1.-sqr(p1*p);r:=0. End;
Procedure RP(x:real;var y,f:vec);{Похідні}
Var p,q,r:real;
Begin f[1]:=y[2];PQR(x,p,q,r);F[2]:=r-p*y[2]-q*y[1]
end;
Procedure RK21(n:integer;var x,h:real;var y:vec);
Var i:integer;{Метод Рунге-Кутти 2 порядку}
H2:real;f0,f:vec;
Begin h2:=h/2;RP(x,y,f0);
For i:= 1 to n do y[i]:=y[i]+h*f0[i];
X:=x+h;RP(x,y,f);
For i:= 1 to n do y[i]:=y[i]+h2*(f[i]-f0[i])
End;
Function PSI(l:integer;a:real):real;
Var m:integer;x:real;y:vec;{Функція Псі}
Begin y[1]:=a;y[2]:=(g[3]-g[1]*a)/g[2];x:=x0;
If l=1 then writeln(x,’ ’,a,’ ’,y[2]);
For m:=1 to n do begin RK21(2,x,h,y);
If l=1 then writeln(x,’ ’,y[1],’ ’,y[2])
End;
If l=0 then PSI:=g[4]*y[1]+g[5]*y[2]-g[6]
End;
Procedure SHT(a0,a:real;function PSI:real);
Var t:real;l:vec;{Метод Стрільби}
Begin t:=PSI(0,a);t:=PSI(1,a-(a-a0)/ (t-PSI(0,a0))*t)
End;
Begin {Основна програма}
Repeat write(’x0,x9,n,p1,a0,a1?’);
Readln(x0,x9,n,p1,a0,a1);
For i:= 1 to 6 do begin write(’g’,i:1,’?’)
Readln(g[i])
End;
H:=(x9-x0)/n;SHT(a0,a1,PSI);Until false
End.
М | При публикации программного кода просьба использовать теги Lapp |