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

5.2. Обчислювальна схема (алгоритм) рішення неявної різницевої схеми методом прогону

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

а) .

б)

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

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

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

5. Задаємо .

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

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

.

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

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

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

11. Задаємо к=3,4,…m і повторюємо пункти 6,7,8,9.

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

5.4. Програма рішення першої крайової задачі дня рівняння параболічного типу методом прогону (за неявною схемою)

program Nejavn_scheme;

uses Crt;

type Table=array[0..100,0..100] of Real;

LineTable=array[0..100]of Real;

var u: Table; k,i,n,m: Integer; L,h,tay,a,lambda: Real;

P,Q: LineTable;

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;

{ввід початкових умов}

WriteLn('введіть L, крок по осі x (h), крок по осі y (tay), кількість часових шарів, параметр a:');

ReadLn(L,h,tay,m,a);

n:=Trunc(L/h+0.5); {кількість кроків по осі х}

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

for k:=1 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);

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

k:=1;

P[1]:=lambda/(1+2*lambda);

Q[1]:=(u[1,k-1]+lambda*fi(k*tay))/(1+2*lambda);

{основна обчислювальна процедура}

for k:=2 to n-1 do begin

for i:=2 to m do begin

P[i]:=lambda/(1+2*lambda-lambda*P[i-1]);

Q[i]:=(u[i,k-1]+lambda*Q[i-1])/(1+2*lambda-lambda*P[i-1])

end;

u[n-1,k]:=(u[n-1,k-1]+lambda*fi(k*tay))/(1+2*lambda-lambda*P[n-2]);

for i:=n-2 downto 1 do u[i,k]:=Q[i]+P[i]*u[i+1,k];

end;

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

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

Write(' ');

for i:=0 to n do Write(' ', i:4,' ');

WriteLn;

Write(' ');

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

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:1:5);

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

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

ReadKey

end.

VI. Лабораторна робота 2

РІШЕННЯ ПЕРШОЇ КРАЙОВОЇ ЗАДАЧІ ДЛЯ РІВНЯННЯ ПАРАБОЛІЧНОГО ТИПУ МЕТОДОМ СІТОК ЗА НЕЯВНОЮ СХЕМОЮ

Завдання

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

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

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

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

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

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

, , , де .

Рішення виконати при h=0,1 по аргументу x та t=h2/6 по аргументу t.

.

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

0 1 2 3 4 5 6 7 8 9 10

0.000 0.100 0.200 0.300 0.400 0.500 0.600 0.700 0.800 0.900 1.000

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.359 0.046 0.006 0.001 0.000 0.000 0.000 0.001 0.007 0.007

3 0.080 0.363 0.082 0.015 0.002 0.000 0.000 0.000 0.003 0.015 0.010

4 0.107 0.367 0.110 0.026 0.005 0.001 0.000 0.001 0.005 0.025 0.013

5 0.134 0.370 0.134 0.037 0.009 0.002 0.001 0.002 0.009 0.036 0.017

6 0.160 0.372 0.153 0.049 0.013 0.003 0.001 0.003 0.013 0.048 0.020

7 0.187 0.374 0.169 0.060 0.018 0.005 0.002 0.005 0.018 0.060 0.024

8 0.214 0.376 0.183 0.071 0.023 0.007 0.003 0.007 0.023 0.073 0.027

9 0.240 0.377 0.194 0.081 0.029 0.009 0.005 0.010 0.030 0.086 0.030

10 0.267 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.034

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

Крок розбивки= 0.10000

Крок по часовому шару= 0.00167

Кількість кроків = 10