[ Різницеві схеми для рівняння переносу на нерівномірних сітках ] | 0.21980791 | 0.34415379 | 0.12434588 | |
3 | 0.32390953 | 0.33287108 | 0.00896156 | |
4 | 0.17318247 | 0.32195827 | 0.14877580 | |
5 | 0.30172608 | 0.31140322 | 0.00967714 | |
6 | 0.15878469 | 0.30119421 | 0.14240953 | |
7 | 0.28118803 | 0.29131989 | 0.01013186 | |
8 | 0.16595060 | 0.28176929 | 0.11581869 | |
9 | 0.25958363 | 0.27253179 | 0.01294816 | |
10 | 0.10012442 | 0.26359714 | 0.16347272 | |
11 | 0.23108668 | 0.25495540 | 0.02386872 | |
12 | 0.10648083 | 0.24659696 | 0.14011613 | |
13 | 0.24403326 | 0.23851255 | 0.00552071 | |
14 | 0.10163574 | 0.23069318 | 0.12905744 | |
15 | 0.22313016 | 0.22313016 | 0.00000000 |
Таблиця 9. Чисельне рішення рівняння переносу з змінними коефіцієнтами трехточечная схема з вагою Метод прогонки
------------------- Kogda p0 <0, pN <0 --------------- kogda G = 1 | |||
50sloy N priblijennoe tochnoe pogreshnosti | |||
0 | 0.36787944 | 0.36787944 | 0.00000000 |
1 | 0.35801340 | 0.35581892 | 0.00219448 |
2 | 0.36845033 | 0.34415379 | 0.02429654 |
3 | 0.35906842 | 0.33287108 | 0.02619734 |
4 | 0.37000945 | 0.32195827 | 0.04805117 |
5 | 0.36101823 | 0.31140322 | 0.04961501 |
6 | 0.37246014 | 0.30119421 | 0.07126592 |
7 | 0.36379087 | 0.29131989 | 0.07247098 |
8 | 0.37571304 | 0.28176929 | 0.09394375 |
9 | 0.36731988 | 0.27253179 | 0.09478809 |
10 | 0.37968642 | 0.26359714 | 0.11608928 |
11 | 0.37154421 | 0.25495540 | 0.11658881 |
12 | 0.38430710 | 0.24659696 | 0.13771013 |
13 | 0.37640856 | 0.23851255 | 0.13789601 |
14 | 0.38951172 | 0.23069318 | 0.15881854 |
15 | 0.38186439 | 0.22313016 | 0.15873423 |
Таблиця 10 Чисельне рішення рівняння переносу з змінними коефіцієнтами трехточечная схема з вагою Метод прогонки
------------------- Kogda p0 <0, pN <0 --------------- | |||
kogda G = 0,5 50sloy N priblijennoe tochnoe pogreshnosti | |||
0 | 0.36787944 | 0.36787944 | 0.00000000 |
1 | 0.31801913 | 0.35581892 | 0.03779978 |
2 | 0.36478621 | 0.34415379 | 0.02063242 |
3 | 0.34573407 | 0.33287108 | 0.01286299 |
4 | 0.36983022 | 0.32195827 | 0.04787195 |
5 | 0.36678412 | 0.31140322 | 0.05538090 |
6 | 0.34570117 | 0.30119421 | 0.04450696 |
7 | 0.34004986 | 0.29131989 | 0.04872997 |
8 | 0.33360167 | 0.28176929 | 0.05183238 |
9 | 0.35119193 | 0.27253179 | 0.07866014 |
10 | 0.35046403 | 0.26359714 | 0.08686690 |
11 | 0.35792253 | 0.25495540 | 0.10296714 |
12 | 0.36451445 | 0.24659696 | 0.11791748 |
13 | 0.35527614 | 0.23851255 | 0.11676359 |
14 | 0.38271932 | 0.23069318 | 0.15202614 |
15 | 0.39593489 | 0.22313016 | 0.17280473 |
Текст програми дивись в додатку 3
Глава III. Одновимірного рівняння переносу з постійними коефіцієнтами
3.1 Постановка завдання
Розглянемо рівняння переносу виду
(3.1)
задовольняє початковому умові
(3.2)
і граничним умовам
1. P> 0 p> 0, немає на лівій межі умов.
2. P <0 p <0, немає на правій межі умов. (3.3)
Вхідні дані:
1) P> 0
2) P <0
3.2 "Явні" схеми
Розглянемо схему біжить рахунки в обох випадках.
1) p> 0
У цьому випадку використовується права різницева схема
(3.1 ')
; (3.2 ')
. (3.3 ')
З рівняння (3.1 ') слід
2) p <0
Різницева схема (ліва) має вигляд:
; (3.1 ")
; (3.2 ")
(3.3 ")
З рівняння (3.1 ") слід
Таблиця 11. Чисельне рішення рівняння переносу з постійними коефіцієнтами схема біжить рахунки "явна" схема (права різницева схема)
------------- Kogda p> 0 --------------------------------- ---------- 50sloy | |||
N priblijennoe tochnoe pogreshnosti | |||
0 | 1.37301170 | 1.35914091 | 0.01387078 |
1 | 1.41878826 | 1.40520915 | 0.01357911 |
2 | 1.46606506 | 1.45283887 | 0.01322618 |
3 | 1.51488985 | 1.50208301 | 0.01280684 |
4 | 1.56531173 | 1.55299629 | 0.01231544 |
5 | 1.61738112 | 1.60563527 | 0.01174585 |
6 | 1.67114985 | 1.66005846 | 0.01109139 |
7 | 1.72667123 | 1.71632633 | 0.01034490 |
8 | 1.78400003 | 1.77450141 | 0.00949863 |
9 | 1.84319260 | 1.83464833 | 0.00854427 |
10 | 1.90430684 | 1.89683395 | 0.00747290 |
11 | 1.96740228 | 1.96112735 | 0.00627493 |
12 | 2.03254007 | 2.02759998 | 0.00494008 |
13 | 2.09978305 | 2.09632572 | 0.00345734 |
14 | 2.16919578 | 2.16738091 | 0.00181487 |
15 | 2.24084454 | 2.24084454 | 0.00000000 |
Таблиця 12. Чисельне рішення рівняння переносу з постійними коефіцієнтами схема біжить рахунки "явна" схема (ліва різницева схема)
------------- Kogda p <0 ------------- 50sloy | |||
N priblijennoe tochnoe pogreshnosti | |||
0 | 0.03678794 | 0.03678794 | 0.00000000 |
1 | 0.03444494 | 0.03558189 | 0.00113696 |
2 | 0.03220334 | 0.03441538 | 0.00221204 |
3 | 0.03005929 | 0.03328711 | 0.00322782 |
4 | 0.02800907 | 0.03219583 | 0.00418676 |
5 | 0.02604910 | 0.03114032 | 0.00509122 |
6 | 0.02417592 | 0.03011942 | 0.00594350 |
7 | 0.02238620 | 0.02913199 | 0.00674579 |
8 | 0.02067672 | 0.02817693 | 0.00750021 |
9 | 0.01904439 | 0.02725318 | 0.00820879 |
10 | 0.01748622 | 0.02635971 | 0.00887349 |
11 | 0.01599934 | 0.02549554 | 0.00949620 |
12 | 0.01458096 | 0.02465970 | 0.01007874 |
13 | 0.01322842 | 0.02385126 | 0.01062284 |
14 | 0.01193914 | 0.02306932 | 0.01113018 |
15 | 0.01071063 | 0.02231302 | 0.01160239 |
Текст програми дивися у додатку 4
3.3 Неявні схеми
Розглянемо дві різні різницеві схеми:
1. Центрально-різницева схема.
2. Трехточечная схема з вагою.
Всі ці схеми зводяться до стандартного вигляду (3.4) і вирішуються методом прогонки
(3.4)
Коефіцієнти A i, B i, C i повинні відповідати умовам:
(3.5)
Коефіцієнти B 0, C 0, F 0, A N, C N, F N знаходяться з граничних умов. У цьому завданню в залежності від знака функції p (x, t) ставляться граничні умови і тим самим знаходяться наші коефіцієнти.
Коли р> 0 задається праве гранична умова:
(3.3 ')
Використовуючи рівняння (3.3 ') знаходимо коефіцієнти A N, C N, F N. Коефіцієнти B 0, C 0, F 0 перебувають з додаткового умови, що ставиться на лівому кінці.
2) Коли р <0 задається гранична умова на лівому кінці
(3.3 ")
Використовуючи рівняння (3.3 ") знаходимо коефіцієнти B 0, C 0, F 0
Коефіцієнти A N, C N, F N знаходяться з додаткового умови, що ставиться на правому кінці.
3.3.1 Центрально-різницева схема
Різницева схема завдання (3.1) - (3.3) має наступний вигляд:
1) р> 0. У цьому випадку гранична умова задається на правому кінці:
(3.6)
Використовуючи рівняння (3.6) знаходимо коефіцієнти A N = 0, C N = 1,
Додаткова умова на лівому кінці має вигляд:
(3.7)
Наведемо рівняння (3.7) до вигляду:
(3.7 ')
Звідси знаходимо коефіцієнти:
У випадку, коли р <0, гранична умова ставиться на лівому кінці
(3.8)
Використовуючи рівняння (3.8) знаходимо коефіцієнти B 0, = 0, C 0 = 1,
Додаткова умова на правому кінці має вигляд:
(3.9)
Наводимо рівняння (3.9) до вигляду:
(3.9 ')
звідси знаходимо коефіцієнти:
Таблиця 13. Чисельне рішення рівняння переносу з постійними коефіцієнтами центральна різницева схема метод прогонки
------------- Kogda p> 0 -------------- 50sloy | |||
N priblijennoe tochnoe pogreshnosti | |||
0 | 0.03544452 | 0.03678794 | 0.00134342 |
1 | 0.03541069 | 0.03558189 | 0.00017120 |
2 | 0.03306824 | 0.03441538 | 0.00134714 |
3 | 0.03313883 | 0.03328711 | 0.00014828 |
4 | 0.03084494 | 0.03219583 | 0.00135089 |
5 | 0.03101552 | 0.03114032 | 0.00012480 |
6 | 0.02876471 | 0.03011942 | 0.00135472 |
7 | 0.02903119 | 0.02913199 | 0.00010080 |
8 | 0.02681828 | 0.02817693 | 0.00135865 |
9 | 0.02717688 | 0.02725318 | 0.00007630 |
10 | 0.02499699 | 0.02635971 | 0.00136272 |
11 | 0.02544422 | 0.02549554 | 0.00005132 |
12 | 0.02329272 | 0.02465970 | 0.00136698 |
13 | 0.02382538 | 0.02385126 | 0.00002588 |
14 | 0.02169787 | 0.02306932 | 0.00137145 |
15 | 0.02231302 | 0.02231302 | 0.00000000 |
Таблиця 14. Чисельне рішення рівняння переносу з постійними коефіцієнтами центральна різницева схема метод прогонки
------------- Kogda p <0 -------------- 50sloy | |||
N priblijennoe tochnoe pogreshnosti | |||
0 | 0.03678794 | 0.03678794 | 0.00000000 |
1 | 0.03475182 | 0.03558189 | 0.00083008 |
2 | 0.03440516 | 0.03441538 | 0.00001021 |
3 | 0.03246493 | 0.03328711 | 0.00082218 |
4 | 0.03217504 | 0.03219583 | 0.00002079 |
5 | 0.03032529 | 0.03114032 | 0.00081503 |
6 | 0.03008771 | 0.03011942 | 0.00003171 |
7 | 0.02832337 | 0.02913199 | 0.00080861 |
8 | 0.02813396 | 0.02817693 | 0.00004297 |
9 | 0.02645027 | 0.02725318 | 0.00080290 |
10 | 0.02630518 | 0.02635971 | 0.00005453 |
11 | 0.02469766 | 0.02549554 | 0.00079788 |
12 | 0.02459330 | 0.02465970 | 0.00006639 |
13 | 0.02305773 | 0.02385126 | 0.00079352 |
14 | 0.02299077 | 0.02306932 | 0.00007855 |
15 | 0.02152320 | 0.02231302 | 0.00078982 |
Текст програми дивися в додатку 5
3.3.2 трехточечная схема з вагою
Різницева схема має вигляд:
речовинний параметр
1. P> 0
На лівому кінці ставиться додаткова умова
2. P <0
На правому кінці ставиться додаткова умова
Різницеві рівняння і додаткові умови зводяться до стандартного вигляду (3.4) і вирішуються методом прогонки.
Таблиця 15. Чисельне рішення рівняння переносу з постійними коефіцієнтами трехточечная схема з вагою Метод прогонки
50sloy N priblijennoe tochnoe pogreshnosti | |||
------------------- Kogda p> 0 --------------- kogda G = 1 | |||
0 | 0.03684277 | 0.03678794 | 0.00005483 |
1 | 0.03562797 | 0.03558189 | 0.00004607 |
2 | 0.03446165 | 0.03441538 | 0.00004627 |
3 | 0.03332487 | 0.03328711 | 0.00003776 |
4 | 0.03223422 | 0.03219583 | 0.00003839 |
5 | 0.03117042 | 0.03114032 | 0.00003010 |
6 | 0.03015056 | 0.03011942 | 0.00003113 |
7 | 0.02915502 | 0.02913199 | 0.00002303 |
8 | 0.02820139 | 0.02817693 | 0.00002446 |
9 | 0.02726970 | 0.02725318 | 0.00001653 |
10 | 0.02637804 | 0.02635971 | 0.00001833 |
11 | 0.02550608 | 0.02549554 | 0.00001054 |
12 | 0.02467240 | 0.02465970 | 0.00001270 |
13 | 0.02385630 | 0.02385126 | 0.00000505 |
14 | 0.02307687 | 0.02306932 | 0.00000755 |
15 | 0.02231302 | 0.02231302 | 0.00000000 |
Таблиця 16. Чисельне рішення рівняння переносу з постійними коефіцієнтами трехточечная схема з вагою Метод прогонки
------------------- Kogda p> 0 --------------- kogda G = 0.5 | |||
50sloy N priblijennoe tochnoe pogreshnosti | |||
0 | 0.02231797 | 0.03678794 | 0.01446998 |
1 | 0.03255024 | 0.03558189 | 0.00303165 |
2 | 0.02198079 | 0.03441538 | 0.01243459 |
3 | 0.03239095 | 0.03328711 | 0.00089616 |
4 | 0.01731825 | 0.03219583 | 0.01487758 |
5 | 0.03017261 | 0.03114032 | 0.00096771 |
6 | 0.01587847 | 0.03011942 | 0.01424095 |
7 | 0.02811880 | 0.02913199 | 0.00101319 |
8 | 0.01659506 | 0.02817693 | 0.01158187 |
9 | 0.02595836 | 0.02725318 | 0.00129482 |
10 | 0.01001244 | 0.02635971 | 0.01634727 |
11 | 0.02310867 | 0.02549554 | 0.00238687 |
12 | 0.01064808 | 0.02465970 | 0.01401161 |
13 | 0.02440333 | 0.02385126 | 0.00055207 |
14 | 0.01016357 | 0.02306932 | 0.01290574 |
15 | 0.02231302 | 0.02231302 | 0.00000000 |
Таблиця 17. Чисельне рішення рівняння переносу з постійними коефіцієнтами трехточечная схема з вагою Метод прогонки
------------------- Kogda p <0 --------------- kogda G = 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
50sloy N priblijennoe tochnoe pogreshnosti | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | 0.03678794 | 0.03678794 | 0.00000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 0.03676351 | 0.03654351 | 0.00022000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | 0.03679165 | 0.03630069 | 0.00049096 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | 0.03676949 | 0.03605949 | 0.00070999 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | 0.03679966 | 0.03581990 | 0.00097976 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | 0.03677973 | 0.03558189 | 0.00119784 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | 0.03681190 | 0.03534547 | 0.00146643 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 | 0.03679418 | 0.03511062 | 0.00168357 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 | 0.03682831 | 0.03487732 | 0.00195098 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9
Таблиця 18. Чисельне рішення рівняння переносу з постійними коефіцієнтами трехточечная схема з вагою Метод прогонки
Текст програми дивися в додатку 6 3.3.3 Схема "прямокутник" 1. P> 0 різницева схема права має вигляд
2. P <0 різницева схема ліва має вигляд
3.3.4 Схема зі згладжуванням Різницева схема має вигляд
1. P> 0
2. P <0
Схема зводиться до стандартного вигляду і вирішується методом прогонки. 3.3.5 Схема прямокутник зі згладжуванням 1. P> 0 2. P <0 3.3.6 "Шахова" схема Маємо схему з вагою 1. P> 0 2. p <0 Параметр управляє реалізацією схеми. При = 0 і (I + j) - парному вирішуємо по явною схемою, при = 1 і (I + j) - непарній вирішуємо за неявною схемою явно. У цілому схема реалізується явно. Висновок Теорія різницевих схем є самостійним розділом обчислювальної математики, де вивчаються методи наближеного рішення диференціальних рівнянь шляхом заміни їх кінцево-різницевими рівняннями (різницевими схемами). Звичайно-різницевий метод (метод сіток)-один з потужних досить універсальних методів сучасної обчислювальної математики. Цей метод належить до класу машинних методів вирішення широкого кола завдань для диференціальних рівнянь. У дипломній роботі розглянуті "явні" і неявні різницеві методи рішення для одновимірного рівняння переносу з змінними коефіцієнтами та для одновимірного рівняння переносу з постійними коефіцієнтами на нерівномірних сітках. Використано такі різницеві схеми, як схема біжить рахунку, трехточечная схема з вагою, центрально-різницева схема, схема "прямокутник", схема зі згладжуванням, схема прямокутник із згладжуванням, "шахова" схема. Зроблені деякі розрахунки для одновимірного рівняння переносу з змінними та постійними коефіцієнтами на нерівномірних сітках, з метою визначення найбільш стійкою різницевої схеми. Дослідження показало, що найбільш стійким методом для одновимірного рівняння переносу з змінними коефіцієнтами є:
Так само проведені розрахунки деяких методів одновимірного рівняння переносу з постійними коефіцієнтами. Дослідження показало, що найбільш стійким методом для одновимірного рівняння переносу з постійними коефіцієнтами є:
2) При p <0 також трехточечная схема з вагою при G = 1, абсолютна похибка на 50-му шарі складає 0,00022000 Список використаної літератури
Додаток 1 Рівняння зі змінними коефіцієнтами "Явна" схема. Ліва різницева схема p 0 <0, pN <0 uses crt; const n = 15; j0 = 20; tt = 1; l = 1; A = 0.01; a1 = 1; q = 2; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j: integer; x, h, t, tau, d: hi; u, u1, g, u2, u11, u12: m; function ut (p, r: real): real; begin ut: = A * exp (p + r); end; function fi (p, r: real): real; begin fi: = A * exp (p + r) * (p * (p +1) + r * (r +1) +7); end; function ro (p, r: real): real; begin ro: = sqr (p) + sqr (r) +5; end; function p1 (p, r: real): real; begin p1: =- (p + r +2); end; begin clrscr; writeln ('sxema begushego scheta'); writeln ('kogda p0 <0, pN <0'); writeln ('levaya raznostnaya sxema'); readln; h [0]: = 0; h [1]: = a1; for i: = 2 to n do h [i]: = l / n; tau [j]: = tt/j0; t [j]: = 0; j: = 1; for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A * (exp (x [i])); end; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; u1 [0]: = A * exp ((t [j])); for i: = n-1 downto 0 do begin g [i]: = tau [j +1] * p1 (x [i], t [j +1]) / h [i +1]; u11 [i ]:=(- g [i] * u1 [i +1]) + (ro (x [i], t [j +1]) * u [i]); u12 [i]: = tau [j +1] * fi (x [i], t [j]); u1 [i]: = (u11 [i] + u12 [i]) / (ro (x [i], t [j +1]) + g [i]); end; for i: = n-1 downto 0 do u [i]: = u1 [i]; writeln ('----------------------------------------------- -----------'); write ('', j, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; j: = j +1; writeln ('----------------------------------------------- ---------------'); readln; end; end. Рівняння зі змінними коефіцієнтами "Явна" схема. Схема біжить рахунку. Права різницева схема p 0> 0, pN> 0 uses crt; const n = 15; j0 = 50; tt = 1; l = 0.5; A = 0.5; a1 = 2; q = 2; type w = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j: integer; x, h, t, tau, d: hi; u, u1, g, u2, u11, u12: w; function ut (p, r: real): real; begin ut: = A * exp (p + r); end; {to4noe reshenie} function fi (p, r: real): real; begin fi: = A * exp (p + r) * (p * (p-1) + r * (r-1) + 3); end; function ro (p, r: real): real; begin ro: = sqr (p) + sqr (r) +5; end; function p1 (p, r: real): real; begin p1: = p + r +2; end; begin clrscr; writeln ('sxema begushego scheta'); writeln ('kogda p0> 0, pN> 0'); writeln ('pravaya raznostnaya sxema'); readln; h [0]: = 0; h [1]: = a1; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1]; tau [j]: = t [j]-t [j-1]; t [j]: = 0; j: = 1; for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A * exp (x [i]); {u0 (x)} end; begin while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; u1 [i]: = A * exp (l + t [j]); {mu2 (t)} for i: = n-1 downto 0 do begin g [i]: = (tau [j +1] * p1 (x [i], t [j +1]) / h [i +1]); {R [i, j +1]} u11 [i]: = (g [i] * u1 [i +1]) + ro (x [i], t [j +1]) * u [i]; u12 [i]: = tau [j +1] * fi (x [i], t [j +1]); u1 [i]: = (u11 [i] + u12 [i]) / (ro (x [i], t [j +1]) + g [i]); {y end; for i: = n-1 downto 0 do begin u [i]: = u1 [i]; end; writeln ('----------------------------------------------- -----------'); write ('', j, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; j: = j +1; writeln ('----------------------------------------------- ---------------' readln; end; end; end. Додаток 2 Рівняння зі змінними коефіцієнтами Схема з центральною різницею p 0> 0, pN> 0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A1 = 1; q = 3; g1 = 1; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j, k: integer; h, d, tau, t: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut (p, r: real): real; begin ut: = A1 * exp (p + r); end; function fi (p, r: real): real; begin fi: = begin fi: = A * exp (p + r) * (p * (p-1) + r * (r-1) + 3); end; function ro (p, r: real): real; begin ro: = sqr (p) + sqr (r) +5; end; p1 (p, r: real): real; begin p1: = p + r +2; end; begin clrscr; writeln ('chislennoe reshenie uravneniya perenosa'); writeln ('sxema s sentralnoy raznostju'); writeln ('kogda p0> 0, pn> 0'); readln; h [0]: = 0; h [1]: = a1; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1];; tau [j]: = t [j]-t [j-1]; t [j]: = 0; k: = 0; clrscr; writeln ('----------------------------------------------- -------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- --------'); writeln ('N priblijennoe tochnoe pogreshnost'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A1 * exp (x [i]); d [i]: = abs (ut (x [i], t [j])-u [i]); write ('', i,'', u [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8,'', d [i]: 6:8 ,''); end; writeln ('----------------------------------------------- --------'); readln; k: = 1; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; c [0]: = 1 + (p1 (x [i], t [j]) * tau [j]) / h [i] + tau [j] * q; b [0]: = (tau [j] * p1) / h [i]; a [n]: = 0; c [n]: = 1; for i: = 1 to n-1 do begin r [i]: = tau [j] * p1 / (2 * h [i]); a [i]: =- r [i]; c [i]: = ro; b [i]: =- a [i]; f [i]: = ro * u [i] + tau [j] * fi (x [i], t [j]); end; f [0]: = tau [j] * fi (x [0], t [j]) + u [0]; f [n]: = A1 * exp (l + t [j]); alfa [0]: = b [0] / c [0]; betta [0]: = f [0] / c [0]; for i: = 1 to n-1 do begin z [i]: = c [i]-alfa [i-1] * a [i]; alfa [i]: = b [i] / z [i]; betta [i]: = (f [i] + a [i] * betta [i-1]) / z [i]; end; u1 [n]: = (f [n] + a [n] * betta [n-1]) / (c [n]-alfa [n-1] * a [n]); for i: = n-1 downto 0 do u1 [i]: = alfa [i] * u1 [i +1] + betta [i]; writeln ('----------------------------------------------- -----------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; k: = k +1; writeln ('----------------------------------------------- ---------------'); readln; for i: = 0 to n do u [i]: = u1 [i]; end; end. Рівняння зі змінними коефіцієнтами Схема з центральною різницею p0 <0, pN <0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A1 = 1; q = 3; g1 = 1; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j, k: integer; h, d, tau, t: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut (p, r: real): real; begin ut: = A1 * exp (p + r); end; function fi (p, r: real): real; begin fi: = A1 * exp (p + r) * (p * (p +1) + r * (r +1) +7); end; function ro (p, r: real): real; begin ro: = sqr (p) + sqr (r) +5; end; function p1 (p, r: real): real; begin p1: =- (p + r +2); end; begin clrscr; writeln ('chislennoe reshenie uravneniya perenosa'); writeln ('sxema s sentralnoy raznostju'); writeln ('kogda p0 <0, pn <0'); readln; h [0]: = 0; h [1]: = g1; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1]; tau [j]: = t [j]-t [j-1]; t [j]: = 0; k: = 0; clrscr; writeln ('----------------------------------------------- -------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- --------'); writeln ('N priblijennoe tochnoe pogreshnost'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A1 * exp (x [i]); d [i]: = abs (ut (x [i], t [j])-u [i]); write ('', i,'', u [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8,'', d [i]: 6:8 ,''); end; writeln ('----------------------------------------------- --------'); readln; k: = 1; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; c [0]: = 1; b [0]: = 0; a [n ]:=-( tau [j] * p1 [x) / h [i]; c [n]: = 1 - (p1 * tau [j]) / h [i] + tau [j] * q; for i: = 1 to n-1 do begin r [i]: = tau [j] * p1 / (2 * h [i]); a [i]: =- r [i]; c [i]: = ro; b [i]: =- a [i]; f [i]: = ro * u [i] + tau [j] * fi (x [i], t [j]); end; f [0]: = A1 * exp (t [j]); f [n]: = (tau [j] * fi (x [n], t [j]) + u [n]); alfa [0]: = b [0] / c [0]; betta [0]: = f [0] / c [0]; for i: = 1 to n-1 do begin z [i]: = c [i]-alfa [i-1] * a [i]; alfa [i]: = b [i] / z [i]; betta [i]: = (f [i] + a [i] * betta [i-1]) / z [i]; end; u1 [n]: = (f [n] + a [n] * betta [n-1]) / (c [n]-alfa [n-1] * a [n]); for i: = n-1 downto 0 do u1 [i]: = alfa [i] * u1 [i +1] + betta [i]; writeln ('----------------------------------------------- -----------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; k: = k +1; writeln ('----------------------------------------------- ---------------'); readln; for i: = 0 to n do u [i]: = u1 [i]; end; end. Рівняння зі змінними коефіцієнтами Схема з центральною різницею. p0 <0, pN> 0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A1 = 1; q = 3; a2 = 1; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j, k: integer; h, d, tau, t: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut (p, r: real): real; begin ut: = v * exp (p + r); end; function fi (p, r: real): real; begin fi: = A1 * exp (p + r) * ((p + r +10) - (2 * p-1) * exp (2 * r); end; function ro (p, r: real): real; begin ro: = p + r +10; end; function p1 (p, r: real): real; begin p1: = (2 * p-1) * exp (2 * r); end; begin clrscr; writeln ('chislennoe reshenie uravneniya perenosa'); writeln ('sxema s sentralnoy raznostju'); writeln ('kogda p0 <0, pn> 0'); readln; h [0]: = 0; h [1]: = a2; for i: = 2 to n do h [i]: = h [i-1] * q1; h [i]: = x [i]-x [i-1];; tau [j]: = t [j]-t [j-1]; t [j]: = 0; k: = 0; clrscr; writeln ('----------------------------------------------- -------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- --------'); writeln ('N priblijennoe tochnoe pogreshnost'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin x [i]: = i * h [i]; u [i]: = A1 * exp (x [i]); d [i]: = abs (ut (x [i], t [j])-u [i]); write ('', i,'', u [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8,'', d [i]: 6:8 ,''); end; writeln ('----------------------------------------------- --------'); readln; k: = 1; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; c [0]: = 1; b [0]: = 0; a [n]: = 0; c [n]: = 1; for i: = 1 to n-1 do begin r [i]: = tau [j +1] * p1 / (2 * h [i]); a [i]: =- r [i]; c [i]: = ro; b [i]: =- a [i]; f [i]: = ro * u [i] + tau [j +1] * fi (x [i], t [j]); end; f [0]: = A1 * exp (t [j]); f [n]: = A1 * exp (l + t [j]); alfa [0]: = b [0] / c [0]; betta [0]: = f [0] / c [0]; for i: = 1 to n-1 do begin z [i]: = c [i]-alfa [i-1] * a [i]; alfa [i]: = b [i] / z [i]; betta [i]: = (f [i] + a [i] * betta [i-1]) / z [i]; end; u1 [n]: = (f [n] + a [n] * betta [n-1]) / (c [n]-alfa [n-1] * a [n]); for i: = n-1 downto 0 do u1 [i]: = alfa [i] * u1 [i +1] + betta [i]; writeln ('----------------------------------------------- -----------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; k: = k +1; writeln ('----------------------------------------------- ---------------'); readln; for i: = 0 to n do u [i]: = u1 [i]; end; end. Рівняння зі змінними коефіцієнтами Схема з центральною різницею. p0> 0, p <0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A1 = 1; a2 = 1; q = 3; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j, k: integer; h, d, tau, t: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut (p, r: real): real; begin ut: = A1 * exp (p + r); end; function fi (p, r: real): real; begin fi: = A1 * exp (p + r) * ((p + r +10) - (2 * p-1) * exp (2 * r); end; function ro (p, r: real): real; begin ro: = p + r +10; end; function p1 (p, r: real): real; begin p1: = (2 * p-1) * exp (2 * r); end; begin clrscr; writeln ('chislennoe reshenie uravneniya perenosa'); writeln ('sxema s sentralnoy raznostju'); writeln ('kogda p0> 0, pn <0'); readln; h [0]: = 0; h [1]: = a2; for i: = 2 to n do h [i]: = h [i-1] * q; h [i]: = x [i]-x [i-1]; tau [j]: = t [j]-tau [j-1]; t [j]: = 0; k: = 0; clrscr; writeln ('----------------------------------------------- -------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- --------'); writeln ('N priblijennoe tochnoe pogreshnost'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A1 * exp (x [i]); d [i]: = abs (ut (x [i], t [j])-u [i]); write ('', i,'', u [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8,'', d [i]: 6:8 ,''); end; writeln ('----------------------------------------------- --------'); readln; k: = 1; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; c [0]: = p1 + ro * tau [j] / h [i]; b [0]: = tau [j] * p1 / h [i]; a [n]: = tau [j] * p1 / h [i]; c [n]: =- ro + p1 * tau [j] / h [i]; for i: = 1 to n-1 do begin r [i]: = tau [j] * p1 / (2 * h [i]); a [i]: =- r [i]; c [i]: = ro; b [i]: =- a [i]; f [i]: = ro * u [i] + tau [j] * fi (x [i], t [j]); end; f [0]: = tau [j +1] * fi (x [0], t [j]) + ro * u [0]; f [n ]:=-( tau [j +1] * fi (x [n], t [j]) + ro * u [n]); alfa [0]: = b [0] / c [0]; betta [0]: = f [0] / c [0]; for i: = 1 to n-1 do begin z [i]: = c [i]-alfa [i-1] * a [i]; alfa [i]: = b [i] / z [i]; betta [i]: = (f [i] + a [i] * betta [i-1]) / z [i]; end; u1 [n]: = (f [n] + a [n] * betta [n-1]) / (c [n]-alfa [n-1] * a [n]); for i: = n-1 downto 0 do u1 [i]: = alfa [i] * u1 [i +1] + betta [i]; writeln ('----------------------------------------------- -----------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; k: = k +1; writeln ('----------------------------------------------- ---------------'); readln; for i: = 0 to n do u [i]: = u1 [i]; end; end. Додаток 3 Рівняння зі змінними коефіцієнтами Трехточечная схема з вагою Метод прогонки p 0> 0, pN> 0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A1 = 1; q = 3; a2 = 1; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j, k, G: integer; h, d, tau, t, f1, f2, f3, f4, f5, f6: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut (p, r: real): real; begin ut: = A1 * exp (p + r); end; function fi (p, r: real): real; begin fi: = A * exp (p + r) * (p * (p-1) + r * (r-1) + 3); end; function ro (p, r: real): real; begin ro: = sqr (p) + sqr (r) +5; end; function p1 (p, r: real): real; begin p1: = p + r +2; end; begin clrscr; writeln ('chislennoe reshenie uravneniya perenosa'); writeln ('sxema begushego scheta'); writeln ('metod progonki'); writeln ('------------------------------'); writeln ('------------- kogda p0> 0, pN> 0 ------------'); writeln ('vvedite G ='); read (G); writeln ('----------------------------------------'); readln; readln; h [0]: = 0; h [1]: = a2; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1];; tau [j]: = t [j]-t [j-1]; t [j]: = 0; k: = 0; clrscr; writeln ('----------------------------------------------- -------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- --------'); writeln ('N priblijennoe tochnoe pogreshnost'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A1 * exp (x [i]); d [i]: = abs (ut (x [i], t [j])-u [i]); write ('', i,'', u [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8,'', d [i]: 6:8 ,''); end; writeln ('----------------------------------------------- --------'); readln; k: = 1; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; c [0]: = ro + (p1 * tau [j]) / h [i]; b [0]: = G * tau [j] * p1 / h [i]; a [n]: = 0; c [n]: = 1; for i: = 1 to n-1 do begin a [i]: =- G * p1 * tau [j] / (2 * h [i]); c [i]: = ro; b [i]: =- a [i]; f1 [i]: = (1-G) * p1 * tau [j] / (2 * h [i]); f2 [i]: = ro * u [i]; f3 [i]: = G * tau [j] * fi (x [i], t [j]); f4 [i]: = (1-G) * tau [j] * fi (x [i], t [j]-tau [j]); f [i]: = f1 [i] * (u [i +1]-u [i-1]) + f2 [i] + f3 [i] + f4 [i]; end; f5 [i]: = (1-G) * p1 * (u [1]-u [0]) * tau [j] / h [i]; f6 [i]: = ro * u [0] + f5 [i] + G * tau [j] * fi (x [0], t [j] + tau [j]); f [0]: = f6 [j] + (1-G) * tau [j] * fi (x [0], t [j]); f [n]: = A1 * exp (l + t [j]); alfa [0]: = b [0] / c [0]; betta [0]: = f [0] / c [0]; for i: = 1 to n-1 do begin z [i]: = c [i]-alfa [i-1] * a [i]; alfa [i]: = b [i] / z [i]; betta [i]: = (f [i] + a [i] * betta [i-1]) / z [i]; end; u1 [n]: = (f [n] + a [n] * betta [n-1]) / (c [n]-alfa [n-1] * a [n]); for i: = n-1 downto 0 do u1 [i]: = alfa [i] * u1 [i +1] + betta [i]; writeln ('----------------------------------------------- -----------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; k: = k +1; writeln ('----------------------------------------------- ---------------'); readln; for i: = 0 to n do u [i]: = u1 [i]; end; end. Рівняння зі змінними коефіцієнтами Трехточечная схема з вагою Метод прогонки p 0 <0, pN <0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A1 = 1; q = 3; a2 = 1; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j, k, G: integer; h, d, tau, t, f1, f2, f3, f4, f5, f6: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut (p, r: real): real; begin ut: = A1 * exp (p + r); end; function fi (p, r: real): real; begin fi: = A * exp (p + r) * (p * (p +1) + r * (r +1) +7); end; function ro (p, r: real): real; begin ro: = sqr (p) + sqr (r) +5; end; function p1 (p, r: real): real; begin p1: =- (p + r +2); end; begin clrscr; writeln ('chislennoe reshenie uravneniya perenosa'); writeln ('trextochechnaya sxema'); writeln ('kogda p <0'); writeln ('vvedite G ='); read (G); writeln ('----------------------------------------------- -----'); readln; readln; h [0]: = 0; h [1]: = a2; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1];; tau [j]: = t [j]-t [j-1]; t [j]: = 0; k: = 0; clrscr; writeln ('----------------------------------------------- -------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- --------'); writeln ('N priblijennoe tochnoe pogreshnost'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A1 * exp (x [i]); d [i]: = abs (ut (x [i], t [j])-u [i]); write ('', i,'', u [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8,'', d [i]: 6:8 ,''); end; writeln ('----------------------------------------------- --------'); readln; k: = 1; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; c [0]: = 1; b [0]: = 0; a [n]: =- g * (tau [j] * p1) / h [i]; c [n]: = ro-g * (p1 * tau [j]) / h [i]; for i: = 1 to n-1 do begin r [i]: = tau [j] * p1 / (2 * h [i]); a [i ]:=(- g * p1 * tau [j]) / (2 * h [i]); c [i]: = ro; b [i]: =- a [i]; f1 [i]: = (1-g) * (p1 * tau [j]) / (2 * h [i]); f2 [i]: = ro * u [i]; f3 [i]: = g * tau [j] * fi (x [i], t [j]); f4 [i]: = (1-g) * tau [j] * fi (x [i], t [j]-tau [j]); f [i]: = f1 [i] * (u [i +1]-u [i-1]) + f2 [i] + f3 [i] + f4 [i]; end; f [0]: = A1 * exp (t [j]); f5 [i]: = (1-g) * p1 * (u [1]-u [0]) * tau [j] / h [i]; f6 [i]: = ro * u [0] + f5 [i] + g * tau [j] * fi (x [0], t [j] + tau [j]); f [n]: = f6 [j] + (1-g) * tau [j] * fi (x [0], t [j]); alfa [0]: = b [0] / c [0]; betta [0]: = f [0] / c [0]; for i: = 1 to n-1 do begin z [i]: = c [i]-alfa [i-1] * a [i]; alfa [i]: = b [i] / z [i]; betta [i]: = (f [i] + a [i] * betta [i-1]) / z [i]; end; u1 [n]: = (f [n] + a [n] * betta [n-1]) / (c [n]-alfa [n-1] * a [n]); for i: = n-1 downto 0 do u1 [i]: = alfa [i] * u1 [i +1] + betta [i]; writeln ('----------------------------------------------- -----------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; k: = k +1; writeln ('----------------------------------------------- ---------------'); readln; for i: = 0 to n do u [i]: = u1 [i]; end; end. Додаток 4 Рівняння з постійними коефіцієнтами "Явна" схема. Ліва різницева схема p <0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A = 1; B = 1; p1 = 1; q = 3; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j: integer; h, d, tau, t: hi; u11, u12: real; u, u1, x, g, u2: m; function ut (p, r: real): real; begin ut: = A * exp (B * (p + r)); end; function fi (p, r: real): real; begin fi: = A * B * exp (B * (p + r)) * (1-p1 + q / B); end; begin clrscr; writeln ('sxema begushego scheta'); writeln ('kogda p0> 0, pN> 0'); writeln ('pravaya raznostnaya sxema'); readln; h [0]: = 0; h [1]: = a1; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1];; tau [j]: = t [j]-t [j-1]; t [j]: = 0; j: = 1; for i: = 0 to n do begin x [i]: = i * h; t [j]: = j * tau [j]; u [i]: = A * (exp (B * (x [i ]))); end; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; u1 [n]: = A * exp (B * (l + t [j])); for i: = n-1 downto 0 do begin g [i]: = (tau [j +1] * p1) / h [i]; u11: = (g [i] * u1 [i +1]) + u [i]; u12: = tau * fi (x [i], t [j]); u1 [i]: = (u11 + u12) / (1 + g [i] + tau [j +1] * q); end; for i: = 0 to n do u [i]: = u1 [i]; writeln ('----------------------------------------------- -----------'); write ('', j, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t): 6:8, '', d [i]: 6:8, ''); end; j: = j +1; writeln ('----------------------------------------------- ---------------'); readln; end; end. Рівняння з постійними коефіцієнтами "Явна" схема. Схема біжить рахунку. Права різницева схема p> 0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A = 1; B =- 1; p1 =- 3; q = 3; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j: integer; x, h, d, tau, t: hi; u11, u12: real; u, u1, g: m; function ut (p, r: real): real; begin ut: = A * exp (B * (p + r)); end; function fi (p, r: real): real; begin fi: = A * B * exp (B * (p + r)) * (1-p1 + q / B); end; begin clrscr; writeln ('sxema begushego scheta'); writeln ('kogda p0 <0, pN <0'); writeln ('levaya raznostnaya sxema'); readln; h [0]: = 0; h [1]: = a1; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1];; tau [j]: = t [j]-t [j-1]; t [j]: = 0; j: = 1; for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A * (exp (B * (x [i ]))); end; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; u1 [0]: = A * exp (B * (t [j])); for i: = 1 to n do begin g [i]: = (tau [j] * p1) / h [i]; u11: = (-g [i] * u1 [i-1]) + u [i]; u12: = tau [j] * fi (x [i], t [j]); u1 [i]: = (u11 + u12) / (1-g [i] + tau [j] * q); end; for i: = 0 to n do u [i]: = u1 [i]; writeln ('----------------------------------------------- -----------'); write ('', j, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [j]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [j]: 6:8, ''); end; j: = j +1; writeln ('----------------------------------------------- ---------------'); readln; end; end. Додаток 5. Рівняння з постійними коефіцієнтами Схема з центральною різницею p> 0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A1 = 1; B1 = 1; p1 = 1; q = 3; g1 = 1; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j, k: integer; h, d, tau, t: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut (p, r: real): real; begin ut: = A1 * exp (B1 * (p + r)); end; function fi (p, r: real): real; begin fi: = A1 * B1 * exp (B1 * (p + r)) * (1-p + q / B); end; begin clrscr; writeln ('chislennoe reshenie uravneniya perenosa'); writeln ('sxema s sentralnoy raznostju'); writeln ('kogda p0> 0, pn> 0'); readln; h [0]: = 0; h [1]: = a1; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1];; tau [j]: = t [j]-t [j-1]; t [j]: = 0; k: = 0; clrscr; writeln ('----------------------------------------------- -------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- --------'); writeln ('N priblijennoe tochnoe pogreshnost'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A1 * exp (B1 * (x [i])); d [i]: = abs (ut (x [i], t [j])-u [i]); write ('', i,'', u [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8,'', d [i]: 6:8 ,''); end; writeln ('----------------------------------------------- --------'); readln; k: = 1; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; c [0]: = 1 + (p1 * tau [j +1]) / h [1] + tau [j +1] * q; b [0]: = (tau [j +1] * p1) / h [1]; a [n]: = 0; c [n]: = 1; for i: = 1 to n-1 do begin r [i]: = tau [j] * p1 / (2 * h [i]); a [i]: =- r [i]; c [i]: = ro; b [i]: =- a [i]; f [i]: = ro * u [i] + tau [j] * fi (x [i], t [j]); end; f [0]: = tau [j] * fi (x [0], t [j]) + u [0]; f [n]: = A1 * exp (B1 * (l + t [j])); alfa [0]: = b [0] / c [0]; betta [0]: = f [0] / c [0]; for i: = 1 to n-1 do begin z [i]: = c [i]-alfa [i-1] * a [i]; alfa [i]: = b [i] / z [i]; betta [i]: = (f [i] + a [i] * betta [i-1]) / z [i]; end; u1 [n]: = (f [n] + a [n] * betta [n-1]) / (c [n]-alfa [n-1] * a [n]); for i: = n-1 downto 0 do u1 [i]: = alfa [i] * u1 [i +1] + betta [i]; writeln ('----------------------------------------------- -----------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; k: = k +1; writeln ('----------------------------------------------- ---------------'); readln; for i: = 0 to n do u [i]: = u1 [i]; end; end. Рівняння з постійними коефіцієнтами Схема з центральною різницею P <0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A1 = 1; B1 =- 1; p1 =- 1; q = 3; g1 = 1; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j, k: integer; h, d, tau, t: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut (p, r: real): real; begin ut: = A1 * exp (B1 * (p + r)); end; function fi (p, r: real): real; begin fi: = A1 * B1 * exp (B1 * (p + r)) * (1-p1 + q / B); end; begin clrscr; writeln ('chislennoe reshenie uravneniya perenosa'); writeln ('sxema s sentralnoy raznostju'); writeln ('kogda p0 <0, pn <0'); readln; h [0]: = 0; h [1]: = g1; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1]; tau [j]: = t [j]-t [j-1]; t [j]: = 0; k: = 0; clrscr; writeln ('----------------------------------------------- -------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- --------'); writeln ('N priblijennoe tochnoe pogreshnost'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A1 * exp (B1 * (x [i])); d [i]: = abs (ut (x [i], t [j])-u [i]); write ('', i,'', u [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8,'', d [i]: 6:8 ,''); end; writeln ('----------------------------------------------- --------'); readln; k: = 1; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; c [0]: = 1; b [0]: = 0; a [n ]:=-( tau [j] * p1) / h [i]; c [n]: = 1 - (p1 * tau [j]) / h [i] + tau [j] * q; for i: = 1 to n-1 do begin r [i]: = tau [j] * p1 / (2 * h [i]); a [i]: =- r [i]; c [i]: = ro; b [i]: =- a [i]; f [i]: = ro * u [i] + tau [j] * fi (x [i], t [j]); end; f [0]: = A1 * exp (t [j]); f [n]: = (tau [j] * fi (x [n], t [j]) + u [n]); alfa [0]: = b [0] / c [0]; betta [0]: = f [0] / c [0]; for i: = 1 to n-1 do begin z [i]: = c [i]-alfa [i-1] * a [i]; alfa [i]: = b [i] / z [i]; betta [i]: = (f [i] + a [i] * betta [i-1]) / z [i]; end; u1 [n]: = (f [n] + a [n] * betta [n-1]) / (c [n]-alfa [n-1] * a [n]); for i: = n-1 downto 0 do u1 [i]: = alfa [i] * u1 [i +1] + betta [i]; writeln ('----------------------------------------------- -----------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; k: = k +1; writeln ('----------------------------------------------- ---------------'); readln; for i: = 0 to n do u [i]: = u1 [i]; end; end. Додаток 6 Рівняння з постійними коефіцієнтами Трехточечная схема з вагою Метод прогонки p> 0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A1 = 1; B1 = 1; p1 = 1; q = 3; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j, k, G: integer; h, d, tau, t, f1, f2, f3, f4, f5, f6: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut (p, r: real): real; begin ut: = A1 * exp (B1 * (p + r)); end; function fi (p, r: real): real; begin fi: = A1 * B1 * exp (B1 * (p + r)) * (1-p1 + q/B1); end; begin clrscr; writeln ('chislennoe reshenie uravneniya perenosa'); writeln ('sxema begushego scheta'); writeln ('metod progonki'); writeln ('------------------------------'); writeln ('------------- kogda p0> 0, pN> 0 ------------'); writeln ('vvedite G ='); read (G); writeln ('----------------------------------------'); readln; readln; h [0]: = 0; h [1]: = a1; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1];; tau [j]: = t [j]-t [j-1]; t [j]: = 0; k: = 0; clrscr; writeln ('----------------------------------------------- -------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- --------'); writeln ('N priblijennoe tochnoe pogreshnost'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A1 * exp (B1 * (x [i])); d [i]: = abs (ut (x [i], t [j])-u [i]); write ('', i,'', u [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8,'', d [i]: 6:8 ,''); end; writeln ('----------------------------------------------- --------'); readln; k: = 1; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; c [0]: = ro + (p1 * tau [j]) / h [i]; b [0]: = G * tau [j] * p1 / h [i]; a [n]: = 0; c [n]: = 1; for i: = 1 to n-1 do begin a [i]: =- G * p1 * tau [j] / (2 * h [i]); c [i]: = ro; b [i]: =- a [i]; f1 [i]: = (1-G) * p1 * tau [j] / (2 * h [i]); f2 [i]: = ro * u [i]; f3 [i]: = G * tau [j] * fi (x [i], t [j]); f4 [i]: = (1-G) * tau [j] * fi (x [i], t [j]-tau [j]); f [i]: = f1 [i] * (u [i +1]-u [i-1]) + f2 [i] + f3 [i] + f4 [i]; end; f5 [i]: = (1-G) * p1 * (u [1]-u [0]) * tau [j] / h [i]; f6 [i]: = ro * u [0] + f5 [i] + G * tau [j] * fi (x [0], t [j] + tau [j]); f [0]: = f6 [j] + (1-G) * tau [j] * fi (x [0], t [j]); f [n]: = A1 * exp (B1 * (l + t [j])); alfa [0]: = b [0] / c [0]; betta [0]: = f [0] / c [0]; for i: = 1 to n-1 do begin z [i]: = c [i]-alfa [i-1] * a [i]; alfa [i]: = b [i] / z [i]; betta [i]: = (f [i] + a [i] * betta [i-1]) / z [i]; end; u1 [n]: = (f [n] + a [n] * betta [n-1]) / (c [n]-alfa [n-1] * a [n]); for i: = n-1 downto 0 do u1 [i]: = alfa [i] * u1 [i +1] + betta [i]; writeln ('----------------------------------------------- -----------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; k: = k +1; writeln ('----------------------------------------------- ---------------'); readln; for i: = 0 to n do u [i]: = u1 [i]; end; end. Рівняння з постійними коефіцієнтами Трехточечная схема з вагою Метод прогонки P <0 uses crt; const n = 15; j0 = 50; tt = 1; l = 1; A1 = 1; B1 =- 1; p1 =- 1; q = 3; type m = array [0 .. n] of real; hi = array [0 .. n] of real; var i, j, k, G: integer; h, d, tau, t, f1, f2, f3, f4, f5, f6: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut (p, r: real): real; begin ut: = A1 * exp (B1 * (p + r)); end; function fi (p, r: real): real; begin fi: = A1 * B1 * exp (B1 * (p + r)) * (1-p1 + q/B1); end; begin clrscr; writeln ('chislennoe reshenie uravneniya perenosa'); writeln ('trextochechnaya sxema'); writeln ('kogda p <0'); writeln ('vvedite G ='); read (G); writeln ('----------------------------------------------- -----'); readln; readln; h [0]: = 0; h [1]: = a1; for i: = 2 to n do h [i]: = h [i-1] * q; for i: = 0 to n do h [i]: = x [i]-x [i-1];; tau [j]: = t [j]-t [j-1]; t [j]: = 0; k: = 0; clrscr; writeln ('----------------------------------------------- -------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- --------'); writeln ('N priblijennoe tochnoe pogreshnost'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin x [i]: = i * h [i]; t [j]: = j * tau [j]; u [i]: = A1 * exp (B1 * (x [i])); d [i]: = abs (ut (x [i], t [j])-u [i]); write ('', i,'', u [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8,'', d [i]: 6:8 ,''); end; writeln ('----------------------------------------------- --------'); readln; k: = 1; while t [j] <= tt do begin clrscr; t [j]: = t [j] + tau [j]; c [0]: = 1; b [0]: = 0; a [n]: =- g * (tau [j] * p1) / h [i]; c [n]: = ro-g * (p1 * tau [j]) / h [i]; for i: = 1 to n-1 do begin r [i]: = tau [j] * p1 / (2 * h [i]); a [i ]:=(- g * p1 * tau [j]) / (2 * h [i]); c [i]: = ro; b [i]: =- a [i]; f1 [i]: = (1-g) * (p1 * tau [j]) / (2 * h [i]); f2 [i]: = ro * u [i]; f3 [i]: = g * tau [j] * fi (x [i], t [j]); f4 [i]: = (1-g) * tau [j] * fi (x [i], t [j]-tau [j]); f [i]: = f1 [i] * (u [i +1]-u [i-1]) + f2 [i] + f3 [i] + f4 [i]; end; f [0]: = A1 * exp (B1 * (t [j])); f5 [i]: = (1-g) * p1 * (u [1]-u [0]) * tau [j] / h [i]; f6 [i]: = ro * u [0] + f5 [i] + g * tau [j] * fi (x [0], t [j] + tau [j]); f [n]: = f6 [j] + (1-g) * tau [j] * fi (x [0], t [j]); alfa [0]: = b [0] / c [0]; betta [0]: = f [0] / c [0]; for i: = 1 to n-1 do begin z [i]: = c [i]-alfa [i-1] * a [i]; alfa [i]: = b [i] / z [i]; betta [i]: = (f [i] + a [i] * betta [i-1]) / z [i]; end; u1 [n]: = (f [n] + a [n] * betta [n-1]) / (c [n]-alfa [n-1] * a [n]); for i: = n-1 downto 0 do u1 [i]: = alfa [i] * u1 [i +1] + betta [i]; writeln ('----------------------------------------------- -----------'); write ('', k, 'sloy'); writeln (''); writeln ('----------------------------------------------- ---------'); writeln ('N priblijennoe tochnoe pogreshnosti'); writeln ('----------------------------------------------- ---------'); for i: = 0 to n do begin d [i]: = abs (ut (x [i], t [j])-u1 [i]); write ('', I, '', u1 [i]: 6:8, ''); writeln (ut (x [i], t [j]): 6:8, '', d [i]: 6:8, ''); end; k: = k +1; writeln ('----------------------------------------------- ---------------'); readln; for i: = 0 to n do u [i]: = u1 [i]; end; end. Будь ласка, не зберігайте тестовий текст. |