Дифференциальных
![]()
|
. (3.16)n n n n1 B По формулам (3.13) вычисляем 0 и β0. По реккурентным формулам (3.12) вычисляем последовательно 1, β1, 2, β2, …, n-1, βn-1. По формуле (3.16) определяем yn. По формуле (3.9) вычисляем yn-1, yn-2, …, y0. После выполнения действий 1 – 4 все значения yiбудут определены. Пример программы для расчета краевой задачи методом конечных разностей приведен в Приложении. ПРИЛОЖЕНИЕПримеры программ для расчета краевой задачи d2y 2 dy 3y exp 4 x 0, 0 x 1, с граничными условиями dx2 dy0 dx dx y0 0.6, dy1 dx y1 4 exp(3) exp(4). Точное решение задачи имеет вид: yanx exp x exp(3x) 0.2 exp(4x). Программы на языке PascalABS.net Методконечныхразностей const N=20; ax=0; bx=1; function y_an(x:real):real; begin y_an:=exp(-x)+exp(3*x)+0.2*exp(4*x); end; function p(x:real):real; begin p:=-2; end; function q(x:real):real; begin q:=-3; end; function f1(x:real):real; begin f1:=exp(4*x); end; var x,y,A,B,C,F,aa,bb:array [0..N] of real; h,xx:real; i:integer; begin h:=(bx-ax)/N; for i:=0 to N do x[i]:=ax+h*i; for i:=0 to N-1 do begin A[i]:=1/(h*h) - p(x[i])/(2*h); C[i]:=1/(h*h) + p(x[i])/(2*h); B[i]:=-2/(h*h)+q(x[i]); F[i]:=f1(x[i]); end; B[0]:=-h-1; C[0]:=1; F[0]:=0.6*h; B[N]:=1+h; A[N]:=-1;F[N]:=h*(4*exp(3)+exp(4)); aa[0]:= -C[0]/B[0]; bb[0]:= F[0]/B[0]; for i:=1 to N do begin aa[i]:= -C[i]/(A[i]*aa[i-1] + B[i]); bb[i]:= (F[i] - A[i]*bb[i-1])/(A[i]*aa[i-1] + B[i]); end; y[n]:= (F[n] - bb[n-1]*A[n])/(B[n] + aa[n-1]*A[n]); for i:=n-1 downto 0 do y[i]:= aa[i]*y[i+1] + bb[i]; for i:=0 to N do writeln(x[i]:6:2,' ',y[i]:10:6,y_an(x[i]):10:6); xx:=0; for i:=1 to N do xx:=xx+abs(y[i]-y_an(x[i])); writeln(xx/N); end. Методстрельбы const N=20; ax=0; bx=1; function y_an(x:real):real; begin y_an:=exp(-x)+exp(3*x)+0.2*exp(4*x); end; function f(x,y,z:real):real; begin f:=z; end; function g(x,y,z:real):real; begin g:=2*z+3*y+exp(4*x); end; var x,y,z:array [0..N] of real; h,xx,xx1,d:real; i:integer; function shoot(ksi:real):real; var y1,z1:real;i:integer; begin y[0]:=ksi-0.6;z[0]:=ksi; for i:=0 to N-1 do begin y1:=y[i]+0.5*h*f(x[i],y[i],z[i]); z1:=z[i]+0.5*h*g(x[i],y[i],z[i]); y[i+1]:=y[i]+h*f(x[i]+0.5*h,y1,z1); z[i+1]:=z[i]+h*g(x[i]+0.5*h,y1,z1); end; shoot:=z[n]+y[n]-(4*exp(3)+exp(4)) end; begin h:=(bx-ax)/N; for i:=0 to N do x[i]:=ax+h*i; xx:=1; d:=1; while d>1e-3 do begin xx1:=xx-shoot(xx)*1e-4/(shoot(xx+1e-4)-shoot(xx)); d:=abs(xx-xx1); xx:=xx1; end; writeln(' x[i] y[i] y_an(x[i])'); for i:=0 to N do writeln(x[i]:6:2,' ',y[i]:10:6,y_an(x[i]):13:6); xx:=0; for i:=1 to N do xx:=xx+abs(y[i]-y_an(x[i])); writeln(xx/N); end. Программы на языке Fortran. Методконечныхразностей program progonka implicit none integer, parameter:: N=20 real, parameter:: aa=0 real, parameter:: bb=1 real y(N+1), x(N+1), y_an(N+1), alf(N+1), bet(N+1), A(N+1), B(N+1), C(N+1), F(N+1), h integer i h=(bb-aa)/N C(1)=1 B(1)=-h-1 F(1)=0.6*h A(N+1)=-1 end B(N+1)=1+h F(N+1)=(4*exp(3.0)+exp(4.0))*h alf(1)=-C(1)/B(1) bet(1)=F(1)/B(1) do i=1,N+1 x(i)=(i-1)*h enddo do i=2,N A(i)=1/h/h+1/h B(i)=-2/h/h-3 C(i)=1/h/h-1/h F(i)=exp(4*x(i)) alf(i)=-C(i)/(A(i)*alf(i-1)+B(i)) bet(i)=(F(i)-A(i)*bet(i-1))/(A(i)*alf(i-1)+B(i)) enddo y(N+1)=(F(N+1)-bet(N)*A(N+1))/(B(N+1)+alf(N)*A(N+1)) do i=N, 1, -1 y(i)=alf(i)*y(i+1)+bet(i) enddo do i=1,N+1 y_an(i)=exp(-x(i))+exp(3*x(i))+0.2*exp(4*x(i)) write(*,*) x(i), y(i), y_an(i) enddo Методстрельбы program strelba implicit none real, parameter:: aa=0 real, parameter:: bb=1 integer, parameter:: N=20 real, parameter:: eps=1d-5 real shoot,ksi, y(N+1), z(N+1), x(N+1), y_an(N+1),ksi_n,h integer i h=(bb-aa)/N do i=1,N+1 x(i)=(i-1)*h enddo ksi_n=1 ksi=10 do while (abs(ksi-ksi_n)>=eps) ksi=ksi_n ksi_n=ksi-shoot(ksi)*eps/(shoot(ksi+eps)-shoot(ksi)) end do y(1)=ksi-0.6 z(1)=ksi do i=1,N y(i+1)=y(i)+h*z(i) end z(i+1)=z(i)+h*(2*z(i)+3*y(i)+exp(4*x(i))) enddo do i=1,N+1 y_an(i)=exp(-x(i))+exp(3*x(i))+0.2*exp(4*x(i)) write(*,*) x(i), y(i), y_an(i) enddo write(*,*) 'ksi=',ksi real function shoot(ksi) integer, parameter:: N=20 real, parameter:: aa=0 real, parameter:: bb=1 real ksi, y(N+1), z(N+1), x(N+1),h integer i h=(bb-aa)/N do i=1,N+1 x(i)=(i-1)*h enddo y(1)=ksi-0.6 z(1)=ksi do i=1,N y(i+1)=y(i)+h*z(i) z(i+1)=z(i)+h*(2*z(i)+3*y(i)+exp(4*x(i))) enddo shoot=z(N+1)+y(N+1)-(4*exp(3.0)+exp(4.0)) end function Результаты расчета
|