МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
РОЗВ’ЯЗУВАННЯ КРАЙОВИХ ЗАДАЧ ДЛЯ ЗВИЧАЙНИХ
ДИФЕРЕНЦІАЛЬНИХ РІВНЯНЬ МЕТОДОМ СКІНЧЕННИХ РІЗНИЦЬ
МЕТОДИЧНІ ВКАЗІВКИ
з курсу "Чисельні методи"
для студентів базового напрямку
6.0802 "Прикладна математика"
Затверджено
на засіданні кафедри
“Прикладна математика”
Протокол № 9 від 27.3.2003 р.
Львів 2003
Розв’язування крайових задач для звичайних диференціальних рівнянь методом скінченних різниць: Методичні вказівки з курсу «Чисельні методи» для студентів базового напрямку 6.0802 «Прикладна математика»/ Укл.: М.В.Кутнів, Я.В.Пізюр. – Львів: Видавництво Національного університету «Львівська політехніка», 2003.- 22 с.
Укладачі Кутнів М.В., канд. фіз-мат. наук, доц.,
Пізюр Я.В., канд. фіз-мат. наук, доц.
Відповідальний за випуск Мединський І.П., канд. фіз-мат. наук, доц.
Рецензенти Гнатів Б.В., канд. фіз-мат. наук, доц.,
Максимів Є.М., канд. фіз-мат. наук, доц.
Мета роботи
Студенти повинні оволодіти методом скінченних різниць розв’язування крайових задач для звичайних диференціальних рівнянь другого порядку, а також набути практичних навиків у використанні методу прогонки для розв’язування систем лінійних алгебраїчних рівнянь з тридіагональною матрицею.
Теоретичні відомості
Метод скінченних різниць полягає в заміні диференціальних рівнянь різницевими (дискретними) рівняннями, які називають різницевою схемою. Для побудови різницевої схеми множина, на якій розглядається задача, заміняється дискретною множиною точок (сіткою). Значення функцій, похідних, початкові і граничні умови подають через значення дискретних (сіткових) функцій у вузлах вибраної сітки, тобто здійснюється заміна диференціального оператора різницевим, а також будуються різницеві аналоги всіх додаткових умов. Отже, задача зводиться до розв'язування системи алгебраїчних рівнянь.
Різницеві схеми повинні відображати в просторі сіткових функцій основні властивості диференціальних рівнянь - такі, як самоспряженість, знаковизначеність оператора, виконання певних апріорних оцінок та ін. Важливою задачею є одержання різницевих схем з заданою якістю. Для побудови таких схем використовують ряд методів, про які піде мова в цьому параграфі.
1. Метод заміни похідних скінченними різницями
Цей спосіб побудови різницевих схем полягає у тому, що всі похідні, які входять у диференціальне рівняння та крайові умови, заміняються деякими різницевими відношеннями. Для цього використовують формули чисельного диференціювання.
Диференціальний оператор , заданий в класі функцій неперервного аргументу, може бути наближено замінений (апроксимований) різницевим оператором , заданим на сіткових функціях. Одним із методів апроксимації є заміна кожної з похідних різницевим відношенням, яке містить значення сіткової функції в декількох вузлах сітки.
Розглянемо декілька випадків апроксимації.
1. Нехай . Найпростішими різницевими апроксимаціями на рівномірній сітці є різницеві похідні:
- ліва;
- права;
- центральна.
Множину вузлів, в яких значення сіткових функцій входять у вираз , називають шаблоном оператора у точці . Очевидно, що шаблони операторів складаються з двох точок ( або ), а - з трьох ().
Похибкою апроксимації оператора оператором називається різниця
Кажуть, що має p-й порядок апроксимації в точці , якщо
Використовуючи формулу Тейлора
(1)
одержимо
.
Отже, якщо , то ліва і права різницеві похідні апроксимують з першим порядком , а якщо , то центральна різницева похідна - з другим порядком.
2. . Виберемо триточковий шаблон, який складається з вузлів , і розглянемо різницевий оператор
.
Користуючись формулою Тейлора (1) для , знайдемо
тобто, якщо , то має другий порядок апроксимації.
3. Випадок нерівномірної сітки. Нехай нерівномірна сітка з кроками . Виберемо триточковий шаблон і введемо позначення:
, ,
.
Оператору поставимо у відповідність різницевий:
Похибка апроксимації
Звідси маємо:
оператор має перший порядок апроксимації у сітковій нормі .
Розглянемо приклад крайової задачі
(2)
(3)
де -задані числа. Для чисельного розв’язування (2), (3) введемо на відрізку рівномірну сітку і замінимо другою різницевою похідною . Тоді замість диференціального рівняння одержимо різницеве рівняння
(4)
де . Граничні умови замінимо співвідношеннями
. (5)
При розв’язуванні задачі (2), (3) різницевим методом необхідно знати, з якою точністю розв’язок різницевої задачі наближає розв’язок вихідної задачі.
Величина буде похибкою наближеного розв’язку . Підставимо в (4), (5), тоді одержимо
де -похибка апроксимації (нев’язка) різницевого рівняння (4) на розв’язку рівняння (2). Граничні умови (3) задовільняються точно.
Оскільки
то різницева схема має другий порядок апроксимації.
Нехай при розв’язок рівняння (2) задовільняє граничну умову третього роду
.
Побудуємо різницеву апроксимацію цієї умови. Для цього замінимо похідну першою різницевою похідною . Апроксимація граничної умови буде мати вигляд
. (6)
Підставимо в (6), тоді
,
де - похибка апроксимації граничної умови (6). Оскільки
(7)
то
.
Звідси видно, що , тобто гранична умова (6) має перший порядок апроксимації.
Замінимо граничну умову різницевою так, щоб порядок апроксимації був . Оскільки - розв’язок диференціального рівняння (2), то і з (7) одержимо
(8)
тобто вираз у лівій частині (8) апроксимує похідну в точці з другим порядком апроксимації. Звідси випливає, що гранична умова
має другий порядок апроксимації.
Аналогічно можна показати, що різницеве рівняння
(9)
апроксимує з другим порядком граничну умову
.
2. Метод неозначених коефіцієнтів
Метод неозначених коефіцієнтів полягає в тому, що різницеву схему задають у вигляді лінійної комбінації значень різницевого розв’язку у вузлах шаблону. Коефіцієнти цієї лінійної комбінації визначають з умови, щоб похибка апроксимації схеми мала якомога вищий порядок малості.
Розглянемо, наприклад, першу крайову задачу для звичайного диференціального рівняння другого порядку
(10)
, (11)
де -задані достатньо гладкі функції, які задовільняють умови -задані числа.
При сформульованих припущеннях існує єдиний розв’язок задачі (10), (11). Будемо вважати, що .
Рівняння (1) описує стаціонарний розподіл температури (стаціонарне рівняння теплопровідності) або концентрації (рівняння дифузії).
Введемо на відрізку рівномірну сітку і виберемо триточковий шаблон , на якому будемо будувати різницеву схему. Будь-яке різницеве рівняння на цьому шаблоні має вигляд
(12)
де - коефіцієнти, які залежать від . Ці коефіцієнти поки що неозначені. Перепишемо (3) інакше
(13)
де .
Розв’язок різницевого рівняння (13) повинен задовільняти крайові умови
Обчислимо похибку апроксимації
схеми (13). Для цього розкладемо в точці за формулою Тейлора, тоді
Якщо покласти
то .
Наведемо приклад різницевої схеми другого порядку апроксимації
де .
3. Інтегро-інтерполяційний метод побудови різницевих схем
Розглянемо крайову задачу для звичайного диференціального рівняння другого порядку:
(14)
(15)
де -задані числа.
На відрізку введемо рівномірну сітку . Різницеві схеми, які виражають на сітці закони збереження, називаються консервативними (або дивергентними) [6]. Для одержання консервативних різницевих схем природно виходити з рівнянь балансу, записаних для елементарних об’ємів сіткової області. Інтеграли і похідні, які входять у ці рівняння балансу, необхідно замінити наближеними різницевими виразами. Такий метод побудови різницевих схем будемо називати інтегро-інтерполяційним методом (методом балансу).
Позначимо і проінтегруємо диференціальне рівняння на відрізку . Тоді одержимо рівняння
(16)
Якщо задача (14), (15) описує стаціонарний розподіл температури, то (16) є рівнянням балансу тепла на відрізку , де -потік тепла, -потужність стоків тепла, -густина розподілу зовнішніх джерел тепла.
Замінимо інтеграл
його наближеним значенням
і введемо позначення
(17)
У результаті замість (16) одержимо рівняння
(18)
Виразимо тепер через значення функції в точках сітки. Для цього проінтегруємо співвідношення на відрізку :
.
Нехай
(19)
тоді
Підставляючи ці вирази в (18) і позначаючи через шукану функцію, одержимо різницеве рівняння
або
Апроксимація другої граничної умови (15) має вигляд а різницева апроксимація першої граничної умови може бути одержана інтегро-інтерполяційним методом. Для цього проінтегруємо рівняння (14) на відрізку , де :
де Поклавши
будемо мати різницеве рівняння
де
(20)
. (21)
Отже, для задачі (14), (15) побудовано різницеву схему
(22)
(23)
коефіцієнти якої визначаються за формулами (17), (19), (20), (21).
Нехай розв(язок диференціального рівняння (14) задовільняє крайову умову
.
Різницевий аналог цієї умови, який також можна побудувати інтегро-інтерполяційним методом, буде мати вигляд
,
де
.
Встановимо порядок апроксимації різницевої схеми (22), (23). Похибка апроксимації різницевого рівняння (22)
буде величиною порядку при виконанні умов (див. п.2):
(24)
Перевіримо виконання цих умов для коефіцієнтів (17), (19), (20), (21). Для цього введемо позначення і розкладемо в ряд Тейлора в околі точки , тоді
Аналогічно
Тоді
Помножимо останню рівність на , тоді
.
Отже,
Розкладемо функцію в ряд Тейлора в околі точки , тоді
Аналогічно можна показати, що
Дослідимо похибку апроксимації
різницевої граничної умови (23). З розвинення
випливає співвідношення
.
Тоді, з врахуванням , одержимо
.
Звідси будемо мати
Із співвідношення
одержуємо
.
Отже, при достатній гладкості коефіцієнтів і розв’язку різницева схема (22), (23) апроксимує задачу (14), (15) з другим порядком.
З практичного погляду зручно мати більш прості формули для обчислення , які використовують значення в окремих точках і задовільняють умови (11), наприклад
або
Використання коефіцієнтів (19), (17), (21) різницевої схеми корисне при розв’язуванні задач з розривними функціями .
Побудовані різницеві схеми є системами лінійних алгебраїчних рівнянь відносно невідомих з тридіагональними матрицями. Наприклад, різницева схема (22),(23) може бути записана у вигляді різницевої задачі
де
З умов випливає, що . Тому різницева задача однозначно розв(язна і її можна розв(язати методом прогонки.
Контрольний приклад
Нехай, потрібно розв’язати задачу:
, (1)
, (2)
де
. (3)
Сформулюємо і розв’яжемо аналітично відповідну модельну задачу:
, (4)
, (5)
де .
Знайдемо точний розв'язок задачі (4), (5). Для цього знайдемо спочатку загальний розв'язок рівняння (4):
,
а також його похідну
.
Константи і виберемо так, щоб загальний розв’язок задовольняв крайові умови (5), тобто з умов
Отже,
.
Для чисельного розв’язування задачі (4), (5), використаємо різницеву схему:
, (6)
, (7)
де
,
.
Різницеву схему (6),(7) можна записати у вигляді триточкової різницевої задачі
де
Оскільки , то різницева задача однозначно розв(язна і її можна розв(язати методом прогонки.
З допомогою ЕОМ розв’яжемо різницеву задачу (6),(7) з точністю . Для практичної оцінки точності використаємо правило Рунге; тобто обчислимо - розв’язок різницевої схеми, з кроком , - чисельний розв’язок з кроком . Значення для різницевої схеми будемо вибирати виходячи з вимог точності, тобто:
.
Одержаний чисельний розв’язок порівняємо з точним у різницевій нормі , тобто обчислимо . Переконавшись в тому, що або близьке до знайдемо чисельний розв’язок вихідної задачі (1)-(3), за допомогою різницевої схеми (6), (7), з коефіцієнтами:
,
та з точністю .
Порядок виконання роботи
Одержати варіант завдання
Вивчити відповідний лекційний матеріал і рекомендовану літературу.
Сформулювати та розв’язати аналітично відповідну модельну задачу.
Написати однорідну різницеву схему другого порядку точності; провести аналіз порядку апроксимації рівнянь та крайових умов різницевої схеми.
Розробити алгоритм розв’язування одержаної системи сіткових рівнянь методом прогонки; перевірити умови стійкості цього методу.
Розв’язати на ЕОМ модельну задачу з заданою точністю. Для практичної оцінки точності використати правило Рунге. Вивести величину та порівняти з заданою точністю .
Розв’язати на ЕОМ різницеву задачу, яка відповідає поставленій крайовій задачі, з заданою точністю . Вивести таблицю значень .
Зміст звіту
Постановка задачі (конкретний варіант).
Аналітичний розв’язок модельної задачі.
Різницева схема з аналізом похибки апроксимації.
Запис різницевої схеми у вигляді системи триточкових різницевих рівнянь, перевірка стійкості методу прогонки.
Результати розв’язування на ЕОМ модельної задачі.
Результати розв′язування на ЕОМ заданої задачі у вигляді таблиці.
Список літератури
Бахвалов Н.С., Жидков Н.П., Кобельков Г.М.. Численные методы.-М.:Наука, 1987.
Гаврилюк І.П., Макаров В.Л. Методи обчислень. –К.:Вища школа, 1995, ч.1, ч.2.
Данилович В., Кутнів М. Чисельні методи.-Львів:Кальварія, 1998.
Калиткин Н.Н. Численные методы.-М.:Наука, 1978.
Самарский А.А., Гулин А.В. Численные методы. - М.:Наука, 1989.
Самарский А.А. Теория разностных схем.- М.:Наука, 1989.
Трифонов Н.П., Пасхин Е.Н. Практикум работы на ЭВМ.-М.: Наука, 1982.
Варіанти завдань
№ вар.
1
–
0
–
1
0,01
2
0
0
1
0
0,01
3
–
0
–
1
0,01
4
0
0
1
0
0,01
5
–
1
–
0
0,01
6
0
0
1
0
0,01
7
–
0
–
0
0,01
8
1
0
1
0
0,01
9
–
1
–
0
0,01
10
1
0
1
1
0,001
11
2
–
0
–
1
0,001
12
1
1
0
1
1
0,001
13
–
1
–
1
0,001
14
1
1
1
1
0,001
15
–
2
–
1
0,05
16
0,1
100
0,1
100
0,005
17
1
–
1
–
2
0,05
18
100
0
0
0
0,005
19
1
–
1
–
0
0,05
20
1
1
0
1
0
0,005
Додаток
Текст програми L61.PAS(на мові PASCAL) для розв'язування модельної задачі
(див. контрольний приклад)
program DIFSCHEMES;
const nd=500;
var
n,halfn,kflag,i,kl,kr : integer;
xi,h,eps,emax,e,mu1,mu2,beta1,beta2,df,dk,sqk,del,dk1,dk2 : real;
a,b,c,d,f,y,y1 : Array [0..nd] of real;
procedure coef;
{ Пiдпрограма обчислення коефiцiєнтiв a(i),d(i),f(i)
однорiдної консервативної рiзницевої схеми }
begin
for i:=1 to n do a[i]:=1.25;
for i:=0 to n do
begin
d[i]:=1.0; f[i]:=-0.25;
end;
end;
procedure progonka;
{ Пiдпрограма розв'язування методом прогонки системи
N+1 лiнiйних алгебраїчних рiвнянь з тридiагональною
матрицею вигляду
-c(0)*y(0)+b(0)*y(1) = - f(0), i=0,
a(i)*y(i-1)-c(i)*y(i)+b(i)*y(i+1) = - f(i), i=1,2,...,N-1,
a(N)*y(N-1)-c(N)*y(N) = - f(N), i=N.
}
var
q : real;
begin
b[0]:=b[0]/c[0];
c[0]:=f[0]/c[0];
for i:=1 to n-1 do
begin
q:=c[i]-a[i]*b[i-1];
b[i]:=b[i]/q;
c[i]:=(f[i]+a[i]*c[i-1])/q;
end;
f[n]:=(f[n]+a[n]*c[n-1])/(c[n]-a[n]*b[n-1]);
for i:=n-1 downto 0 do f[i]:=b[i]*f[i+1]+c[i];
end;
procedure cds;
{ Пiдпрограма розв'язування крайової задачi для одновимiрного
стацiонарного диференцiального рiвняння теплопровiдностi
(дифузiї) з допомогою однорiдної консервативної рiзницевої
схеми:
a(i+1) * (y(i+1)-y(i))/h - a(i) * (y(i)-y(i-1))/h-
- d(i) * y(i) = - f(i), i=1,...,N
У випадку крайових умов 1-го роду y(0) = mu1, y(N) = mu2
Для граничних умов 3-го роду рiзницевi умови мають вигляд:
a(1)*(y(1)-y(0))/h = (beta1+0.5*h*d(0))-(mu1+0.5*h*f(0)),
-a(N)*(y(N)-y(N-1))/h = (beta2+0.5*h*d(N))-(mu2+0.5*h*f(N))
Можливi рiзнi комбiнацiї граничних умов 1-го i 3-го роду
Для практичної оцiнки похибки використовується правило Рунге
Вхiднi параметри:
N - початкова кiлькiсть частин розбиття вiдрiзка [0,1]
точками сiтки
eps - потрiбна точнiсть
kl - вказiвник типу граничних умов на лiвому кiнцi вiдрiзка
kl=0 - умова 1-го роду, kl=1 - умова 3-го роду
kr - вказiвник типу граничних умов на правому кiнцi вiдрiзка
kr=0 - умова 1-го роду, kr=1 - умова 3-го роду
mu1,mu2,beta1,beta2- параметри, якi визначають крайовi умови
nd - цiле число, яке використовується для опису масивiв
Вихiднi параметри:
N - кiлькiсть частин розбиття iнтервалу, при якiй
задовiльняеться задана точнiсть
y(i), i=0,1,...N - розв'язок рiзницевої задачi
kflag - вказiвник вихiдних результатiв
kflag=1 - одержано розв'язок з потрiбною точнiстю
kflag=2 - результат з потрiбною точнiстю при n.le.nd
не одержано; величина nd задана не
достатньо великою або eps занадто мале
Пiдпрограма cds використовує наступнi пiдпрограми:
coef, яка здiйснює обчислення коефiцiентiв рiзницевоi схеми,
progonka, яка розв'язує методом прогонки триточкове рiзницеве рiвняння
}
var
js : integer;
em : real;
begin
js:=0; kflag:=-1;
while kflag<=0 do
begin
h:=1.0/n;
coef;
if (kl=0) then
begin
b[0]:=0.0; c[0]:=1.0; f[0]:=mu1;
end
else
begin
b[0]:=a[1]/h;
c[0]:=b[0]+0.5*h*d[0]+beta1;
f[0]:=0.5*h*f[0]+mu1;
end;
for i:=1 to n-1 do
begin
a[i]:=a[i]/sqr(h);
b[i]:=a[i+1]/sqr(h);
c[i]:=a[i]+b[i]+d[i];
end;
if (kr=0) then
begin
a[n]:=0.0; c[n]:=1.0; f[n]:=mu2;
end
else
begin
a[n]:=a[n]/h;
c[n]:=a[n]+0.5*h*d[n]+beta2;
f[n]:=0.5*h*f[n]+mu2;
end;
progonka;
if js=1 then
begin
for i:=0 to n do y[i]:=f[i];
em:=0.0;
for i:=0 to halfn do
begin
e:=abs(y[2*i]-y1[i]);
if (e>em) then em:=e;
end;
if (em>3.0*eps) then
begin
for i:=0 to n do y1[i]:=y[i];
n:=n*2; halfn:=halfn*2;
end
else kflag:=1;
end
else
begin
n:=n*2; halfn:=halfn*2;
js:=1;
for i:=0 to n do y1[i]:=f[i];
end;
if (n>nd) then kflag:=2;
end;
end;
{
Текст головної програми розв’язування заданої задачі
(див. контрольний приклад)
}
begin
{ Задання початкових даних }
n:=10;
halfn:=n div 2;
eps:=0.001;
kl:=1; kr:=1;
mu1:=-1.0; mu2:=0.0; beta1:=1.0; beta2:=1.0;
{ Обчислення чисельного розв'язку задачi y(i) }
cds;
if kflag=1 then
begin
h:=1.0/n;
emax:=0.0;
{ Обчислення точного розв'язку задачi y1(i) у вузлах сiтки
i похибки emax у сiтковiй нормi C }
dk:=1.25; df:=-0.25; sqk:=sqrt(dk);
dk1:=sqk-1.0; dk2:=sqk+1.0;
del:=sqr(dk1)*exp(-1.0/sqk)-sqr(dk2)*exp(1.0/sqk);
for i:=0 to n do
begin
xi:=i*h;
y1[i]:=(((df+1.0)*dk1*exp(-1.0/sqk)+df*dk2)*exp(xi/sqk)+
((df+1.0)*dk2*exp(1.0/sqk)+df*dk1)*exp(-xi/sqk))/del+df;
e:=abs(y[i]-y1[i]);
if e>emax then emax:=e;
end;
writeln('emax= ',emax);
end
else writeln('kflag= ',kflag);
readln(i);
end.
Текст програми L62.PAS(на мові PASCAL) для розв'язування вихідної задачі
(див. контрольний приклад)
program DOFSCHEMES;
const nd=500;
var
n,kflag,i,kl,kr,hn,j : integer;
xi,h,eps,emax,e,mu1,mu2,beta1,beta2,df,dk,sqk,del,dk1,dk2 : real;
a,b,c,d,f,y,y1 : Array [0..nd] of real;
f1: file of real;
procedure coef;
{ Пiдпрограма обчислення коефiцiєнтiв a(i),d(i),f(i)
однорiдної консервативної рiзницевої схеми }
begin
for i:=1 to n do
begin
xi:=i*h;
a[i]:=1.0+sqr(xi-0.5*h)
end;
for i:=0 to n do
begin
xi:=i*h; d[i]:=1.0; f[i]:=-sqr(xi);
end;
end;
procedure progonka;
{ Пiдпрограма розв'язування методом прогонки системи
N+1 лiнiйних алгебраїчних рiвнянь з тридiагональною
матрицею вигляду
-c(0)*y(0)+b(0)*y(1) = - f(0), i=0,
a(i)*y(i-1)-c(i)*y(i)+b(i)*y(i+1) = - f(i), i=1,2,...,N-1,
a(N)*y(N-1)-c(N)*y(N) = - f(N), i=N.
}
var
q : real;
begin
b[0]:=b[0]/c[0];
c[0]:=f[0]/c[0];
for i:=1 to n-1 do
begin
q:=c[i]-a[i]*b[i-1];
b[i]:=b[i]/q;
c[i]:=(f[i]+a[i]*c[i-1])/q;
end;
f[n]:=(f[n]+a[n]*c[n-1])/(c[n]-a[n]*b[n-1]);
for i:=n-1 downto 0 do f[i]:=b[i]*f[i+1]+c[i];
end;
procedure cds;
{ Пiдпрограма розв'язування крайової задачi для одновимiрного
стацiонарного диференцiального рiвняння теплопровiдностi
(дифузiї) з допомогою однорiдної консервативної рiзницевої
схеми:
a(i+1) * (y(i+1)-y(i))/h - a(i) * (y(i)-y(i-1))/h-
- d(i) * y(i) = - f(i), i=1,...,N }
var
js : integer;
em : real;
begin
js:=0; kflag:=-1;
while kflag<=0 do
begin
h:=1.0/n;
coef;
if (kl=0) then
begin
b[0]:=0.0; c[0]:=1.0; f[0]:=mu1;
end
else
begin
b[0]:=a[1]/h;
c[0]:=b[0]+0.5*h*d[0]+beta1;
f[0]:=0.5*h*f[0]+mu1;
end;
for i:=1 to n-1 do
begin
a[i]:=a[i]/sqr(h);
b[i]:=a[i+1]/sqr(h);
c[i]:=a[i]+b[i]+d[i];
end;
if (kr=0) then
begin
a[n]:=0.0; c[n]:=1.0; f[n]:=mu2;
end
else
begin
a[n]:=a[n]/h;
c[n]:=a[n]+0.5*h*d[n]+beta2;
f[n]:=0.5*h*f[n]+mu2;
end;
progonka;
if js=1 then
begin
for i:=0 to n do y[i]:=f[i];
em:=0.0;
hn:=n div 2;
for i:=0 to hn do
begin
e:=abs(y[2*i]-y1[i]);
if (e>em) then em:=e;
end;
if (em>3.0*eps) then
begin
for i:=0 to n do y1[i]:=y[i];
n:=n*2;
end
else kflag:=1;
end
else
begin
n:=n*2;
js:=1;
for i:=0 to n do y1[i]:=f[i];
end;
if (n>nd) then kflag:=2;
end;
end;
{
Текст головної програми розв’язування заданої задачі
(див. контрольний приклад)
}
begin
{ Задання початкових даних }
assign(f1,'rez.txt');
rewrite(f1);
n:=10;
eps:=0.001;
kl:=1; kr:=1;
mu1:=-1.0; mu2:=0.0; beta1:=1.0; beta2:=1.0;
{ Обчислення чисельного розв'язку задачi y(i) }
cds;
if kflag=1 then
begin
h:=1.0/n; emax:=0.0;
{ Обчислення точного розв'язку задачi y1(i) у вузлах сiтки
i похибки emax у сiтковiй нормi C }
j:=0;
for i:=0 to n div 2 do
begin
xi:=j*h;
writeln('xi= ',xi);
writeln('y[',j,']= ',y[j]);
write(f1,xi);
write(f1,y[j]);
j:=j+2;
end;
end
else writeln('kflag= ',kflag);
readln(i);
close(f1);
end.
НАВЧАЛЬНЕ ВИДАННЯ
РОЗВ’ЯЗУВАННЯ КРАЙОВИХ ЗАДАЧ ДЛЯ ЗВИЧАЙНИХ
ДИФЕРЕНЦІАЛЬНИХ РІВНЯНЬ МЕТОДОМ СКІНЧЕННИХ РІЗНИЦЬ
МЕТОДИЧНІ ВКАЗІВКИ
з курсу “Чисельні методи”
для студентів базового напрямку
6.0802 “Прикладна математика”
Укладачі Кутнів Мирослав Володимирович
Пізюр Ярополк Володимирович
Редактор
Комп’ютерне складання
Підписано до друку
Формат 70 х 1001/16. Папір офсетний.
Друк на різографі. Умовн. друк. арк. Обл.-вид. арк.
Наклад прим. Зам.
Поліграфічний центр
Видавництва Національного університету “Львівська політехніка”
вул. Ф Кодесси, 2, 79000, Львів