Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
В методичних вказівках подано методи переходу в...doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.7 Mб
Скачать

7.3. Алгоритм рішення різницевої схеми Кранка – Ніколсона методом прогону

1. Будуємо прямокутну сітку з кроком h по осі Ох і кроком по осі Ot:

а) ,

б)

2. Обчислюємо

3. Обчислюємо .

4. Обчислюємо

5. Задаємо k=0.

6. Обчислюємо прогоночні коефіцієнти:

.

7. Обчислюємо

Обчислюємо

8. Задаємо к=1 і повторюємо пункти 6,7.

9. Задаємо к=2,3,4,…(m-1) і повторюємо пункти 6,7.

10. Виводимо до друку

7. 4. Структурна схема програми рішення першої крайової задачі для рівняння параболічного типу за різницевою схемою Кранка-Ніколсона

7. 5. Програма рішення першої крайової задачі для рівняння параболічного типу за різницевою схемою Кранка-Ніколсона

program krunk;

uses Crt;

type

Matrix=array [0..20,0..20] of real;

Vector=array [0..20] of real;

const

L=1;h=0.1; tay=0.00167; m=10;

var

u: Matrix; {результуюча матриця}

p,q: Vector; {проміжні вектори}

k,i,n:integer;

lambda,ld:real;

function F(x: Real): Real; {u(x,0)}

begin F:=sin(x+1) end;

function Fi(x: Real): Real; {u(0,k)}

begin Fi:=x+0.8415 end;

function Psi(x: Real): Real; {u(n,k)}

begin Psi:=4*x+0.9093 end;

begin

ClrScr; n:=trunc(L/h+0.5); {разбиття по x}

{обчислюються значення в початкоих вузлах з допомогою початкових умов}

for k:=0 to m do

begin u[0,k]:=Fi(k*tay); u[n,k]:=Psi(k*tay);end;

for i:=1 to (n-1) do u[i,0]:=f(i*h);

k:=0;

lambda:=tay/(2*sqr(h));{шаг по t}

ld:=1+2*lambda; {проміжна змінна}

p[1]:=1/(ld);

q[1]:=((1-2*lambda)*u[1,k]+lambda*(u[0,k]+u[0,k+1]+

u[2,k]))/(ld);

{основна розрахункова процедура}

for k:=1 to m-1 do

begin

for i:=2 to n-2 do

begin p[i]:=lambda/((ld)-lambda*p[i-1]);

q[i]:=(1-2*lambda)*u[i,k]+lambda*(u[i-1,k]+ u[i+1,k])+lambda*q[i-1];

end;

q[n-1]:=((1-2*lambda)*u[n-1,k]+ lambda*(u[n-2,k]+u[n,k]+u[n,k+1])+

lambda*q[n-2])/(ld-lambda*p[i-1]);

u[n-1,k+1]:=q[n-1];

for i:=n-2 downto 1 do

u[i,k+1]:=q[i]+p[i]*u[i+1,k+1];

end;

{вивід результатів}

writeln('результати обислень:');

Write(' ');

for i:=0 to n do write(' ',i:2,' ');

writeln; Write(' ');

for i:=0 to n do write(' ',i*h:1:2,' ');

for k:=0 to m do

begin writeln; write(k:2,' ');

for i:=0 to n do write(u[i,k]:1:3,' ');

end;

writeln;

writeln('кількість шарів по осі Ox= ',n:2);

writeln('крок разбиття= ',h:2);

writeln('крок по часовому шару= ',tay:1:5);

writeln('кількість кроків= ',m:2);

ReadKey

end.

VIII. Лабораторна робота 3

Розв’язок першої крайової задачі для рівняння параболічного типу методом сіток за схемою Кранка-Ніколсона

Завдання

1. Вирішити задачу (2.12)—(2.14) методом сіток, використовуючи завдання з роботи 1.

2. Рішення системи лінійних рівнянь (7.30) здійснити методом прогону.

Контрольний приклад.

Використовуючи метод сіток, скласти рішення змішаної задачі для диференціального рівняння параболічного типу

(рівняння теплопровідності)

при заданих граничних і початкових умовах:

, , , де .

Рішення виконати при h=0.1 по аргументу х та по аргументу t

; ; .

Підставимо задані значення у вище написану програму і одержимо відповідь у вигляді таблиці результатів обчислень:

0 1 2 3 4 5 6 7 8 9 10

0.00 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90 1.00

0 0.000 0.467 0.905 1.286 1.579 1.750 1.769 1.610 1.258 0.714 0.000

1 0.027 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.003

2 0.053 0.429 0.034 0.003 0.000 0.000 0.000 0.000 0.000 0.001 0.007

3 0.080 0.484 0.098 0.013 0.002 0.000 0.000 0.000 0.000 0.002 0.010

4 0.107 0.536 0.159 0.033 0.005 0.001 0.000 0.000 0.001 0.003 0.013

5 0.134 0.587 0.218 0.060 0.012 0.002 0.000 0.000 0.001 0.004 0.017

6 0.160 0.637 0.276 0.093 0.023 0.005 0.001 0.001 0.002 0.006 0.020

7 0.187 0.686 0.335 0.133 0.039 0.009 0.002 0.001 0.003 0.008 0.024

8 0.214 0.737 0.394 0.178 0.060 0.016 0.004 0.002 0.004 0.010 0.027

9 0.240 0.790 0.455 0.229 0.087 0.027 0.007 0.003 0.005 0.012 0.030

10 0.267 0.845 0.520 0.286 0.120 0.041 0.012 0.005 0.007 0.014 0.034

Кількість розбивок по осі OX = 10 ; крок розбивки = 0.10000;

крок по часовому шару = 0.00167; кількість кроків = 10.