Главная страница

Дифференциальных


Скачать 157.37 Kb.
НазваниеДифференциальных
Дата08.06.2022
Размер157.37 Kb.
Формат файлаdocx
Имя файлаA.YU.-Krajnov-K.M.-Moiseeva-CHislennye-metody-resheniya-kraevyh-.docx
ТипДокументы
#579564
страница27 из 28
1   ...   20   21   22   23   24   25   26   27   28

. (3.16)


n


n
n n1


  • B
Таким образом, схема решения системы уравнений (3.8) состоит в следующей последовательности действий:

  1. По формулам (3.13) вычисляем 0 и β0.

  2. По реккурентным формулам (3.12) вычисляем последовательно 1,

β1, 2, β2, …, n-1, βn-1.

  1. По формуле (3.16) определяем yn.

  2. По формуле (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).


  1. Программы на языке 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.


  1. Программы на языке 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

Результаты расчета


xi

yан(xi)

yi(метод прогонки)

yi(методстрельбы)

0.00

2.20

2.61

2.24

0.05

2.36

2.77

2.40

0.10

2.55

2.97

2.59

0.15

2.79

3.22

2.83

0.20

3.09

3.53

3.13

0.25

3.44

3.90

3.48

0.30

3.86

4.35

3.91

0.35

4.37

4.90

4.42

0.40

4.98

5.54

5.03

0.45

5.70

6.32

5.76

0.50

6.57

7.24

6.62

0.55

7.59

8.33

7.65

0.60

8.80

9.63

8.86

0.65

10.24

11.17

10.31

0.70

11.95

13.00

12.01

0.75

13.98

15.16

14.04

0.80

16.38

17.72

16.44



0.85

19.23

20.76

19.28

0.90

22.61

24.36

22.65

0.95

26.61

28.63

26.64

1.00

31.37

33.70

31.38



1   ...   20   21   22   23   24   25   26   27   28


написать администратору сайта