- •І. Основні поняття
- •1.1. Класифікація диференціальних рівнянь у частинних похідних
- •1.2. Апроксимація частинних похідних
- •1. 3. Метод сіток (ідея методу)
- •Іі. Розв’язок змішаної задачі для рівняння теплопровідності методом сіток
- •2.1. Постановка задачі
- •2.2. Явна різницева схема. Проблема стійкості
- •IV. Лабораторна робота 1
- •Варіанти індивідуальних завдань
- •Контрольний приклад
- •V. Неявна різницева схема
- •5.1. Побудова неявної різницевої схеми
- •5.2. Обчислювальна схема (алгоритм) рішення неявної різницевої схеми методом прогону
- •5.3. Блок-схема алгоритму Структурна схема програми рішення першої крайової задачі для рівняння параболічного типу за неявною різницевою схемою методом прогону
- •5.4. Програма рішення першої крайової задачі дня рівняння параболічного типу методом прогону (за неявною схемою)
- •VI. Лабораторна робота 2
- •Контрольний приклад
- •VII. Схема кранкa –ніколсона
- •7.1. Зауваження про стійкість і точність розв’язку
- •7. 2. Побудова і рішення різницевої схеми Кранка - Ніколсона
- •7.3. Алгоритм рішення різницевої схеми Кранка – Ніколсона методом прогону
- •7. 5. Програма рішення першої крайової задачі для рівняння параболічного типу за різницевою схемою Кранка-Ніколсона
- •VIII. Лабораторна робота 3
- •Завдання
- •Контрольний приклад.
- •IX. Рішення змішаної задачі для хвильового рівняння методом сіток
- •9.1. Постановка задачі. Алгоритм методу
- •9. 2 . Обчислювальна схема рішення задачі
- •9.3. Структурна схема програми рішення змішаної задачі для хвильового рівняння методом сіток
- •9. 4. Программа рішення змішаної задачі для хвильового рівняння методом сіток
- •X. Лабораторна робота 4
- •Варіанти індивідуальних завдань
- •Контрольний приклад
- •Хі. Рішення рівняння лапласа методом сіток
- •11.1. Побудова різницевої схеми
- •11.2. Принцип максимуму. Оцінка похибок і збіжність рішень різницевих рівнянь
- •11. 3. Рішення еліптичної різницевої схеми
- •XII. Проблеми збіжності рішення. Алгоритм чисельного рішення
- •12.1 Збіжність рішення
- •12.2. Алгоритм чисельного рішення задачі Діріхлє для рівняння Лапласа ітераційним методом Гауса-Зейделя
- •12.3. Структурна схема програми рішення задачі Діріхлє для рівняння Лапласа методом сіток
- •12. 4. Програма рішення задачі Діріхлє для рівняння Лапласа
- •XIII. Лабораторна робота 5
- •Контрольний приклад
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.
