Министерство образования Российской Федерации РОСТОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
С.С.Михалкович, А.В.Олифер, А.М.Ст...
8 downloads
263 Views
647KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство образования Российской Федерации РОСТОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
С.С.Михалкович, А.В.Олифер, А.М.Столяр
ЧИСЛЕННЫЕ МЕТОДЫ Выпуск V Уравнения в частных производных Методические указания к выполнению индивидуальных заданий на ЭВМ для студентов 2 курса физического факультета
Ростов-на-Дону 2000
Печатается по решению кафедры алгебры и дискретной математики механико-математического факультета РГУ от 10 декабря 1999 года, протокол №4.
АННОТАЦИЯ Методические указания содержат условия индивидуальных заданий и необходимый для их выполнения теоретический материал по теме “Уравнения в частных производных” курса “Численные методы”. Даны рекомендации по реализации заданий на персональном компьютере. Указания предназначены для студентов 2 курса физического факультета. Авторы: С.С.Михалкович, А.В.Олифер, А.М.Столяр.
3
РЕШЕНИЕ ЗАДАЧ МАТЕМАТИЧЕСКОЙ ФИЗИКИ МЕТОДОМ КОНЕЧНЫХ РАЗНОСТЕЙ Уравнения гиперболического и параболического типов, которые рассматриваются в настоящих методических указаниях, встречаются в огромном числе физических приложений. Одним из эффективных численных подходов к их решению является применение метода конечных разностей (МКР). Сущность этого универсального метода состоит в том, что за искомый набор чисел принимается таблица значений решения в точках некоторого множества, называемого сеткой. Для определения этой таблицы решаются алгебраические уравнения, приближенно заменяющие исходные дифференциальные. Целью настоящей работы является освоение техники решения уравнений гиперболического и параболического типов при помощи явной и неявной схем МКР. 1. Начально-краевые задачи для уравнения гиперболического типа (волнового уравнения) 1.1. Задание. Найти численное решение задачи вида
u tt = g 2 ( x, t ) u xx + f ( x, t ),
x ∈ (0,1), t ∈ (0, T )
(1)
p 0 u (0, t ) + p1 u x (0, t ) = A(t )
(2)
u ( x,0) = σ 1 ( x); u t ( x,0) = σ 2 ( x)
(3)
s 0 u (1, t ) + s1 u x (1, t ) = B(t )
1) при помощи явной схемы МКР; 2) при помощи неявной схемы МКР. Найти решение с точностью до 0.0001 на отрезке времени T = 2 / g * , где g * = max g ( x, t ). При использовании явной схемы x ,t
предварительно определить условие ее устойчивости. При помощи средств пакета Maple построить графики функций u(x*,t), u(x,jt*), где x* =0.6, t* = T/4, j=1,2,3. Сравнить результаты, полученные по явной и по неявной схемам МКР. Проверить правильность работы программы на тестовом примере
u tt = g 2 u xx , u x (0, t ) = 0, u x (1, t ) = 0 u ( x,0) = ε 0 / 2 − ε 0 x,
u t ( x,0) = 0
( 4)
4
Точным решением задачи является ряд
u=
4ε 0
π2
∞
∑ (2k − 1) 1
2
cos((2k − 1) πx ) cos((2k − 1)πgt ) (5)
k =1
Расчет провести при следующих значениях параметров: g=const=1; ε0=0.02. Рекомендуемая литература: /1/,§§21,22,25,26; /2/, Ч.1, §4; Ч.3, гл.1. 1.2. Идея МКР Для решения задачи при помощи МКР стремятся построить такие разностные схемы, которые бы обеспечивали сходимость получаемого решения разностной задачи к решению исходной дифференциальной при измельчении сетки. В /1/ доказана теорема о том, “что если разностная краевая задача аппроксимирует дифференциальную задачу и устойчива, то при измельчении сетки решение разностной задачи сходится к решению дифференциальной”. Из этого следует, что для получения нужной схемы необходимо строить аппроксимирующие разностные схемы и выбирать среди них устойчивые (определение аппроксимации и устойчивости см. в /1/). 1.3. Построение явной разностной схемы На примере решения задачи (4) рассмотрим один из простейших приемов построения аппроксимирующей разностной схемы. Он связан с заменой производных приближенными разностными соотношениями:
df ( z ) f ( z + ∆z ) − f ( z − ∆z ) ≈ dz 2∆z
(6)
d 2 f ( z ) f ( z + ∆z ) − 2 f ( z ) + f ( z − ∆z ) ≈ dz 2 (∆z ) 2
Используя разложения функции f(z) в ряд Тейлора в окрестности точки z, легко показать, что первая и вторая производные аппроксимируются формулами (6) с точностью до членов порядка (∆z)2. Аналогичные формулы используем и для замены частных производных в задаче (4). В качестве сетки, на которой будем рассматривать задачу (4), используем совокупность точек пересечения прямых x= ih, t= jτ, i= 0,
5
1, ... , [1/h ]; j= 0, 1, ... , [ T/τ ], где h и τ - расстояния (шаги) между соседними узлами сетки соответственно по пространственной и временной координатам, [ T/τ ] - целая часть числа T/τ (рис.1). Считаем, что шаги h и τ связаны соотношением τ= rh, r= const, так что сетка зависит только от одного параметра h. Вместо функции u будем искать сеточную функцию, значения которой додлжны сходиться к значениям функции u в узлах при измельчении сетки. Через uij обозначим значение сеточной функции в точке (xi,tj) = (ih,jτ). На рис.1 сплошными жирными точками изображены реальные узлы сетки, а квадратиками – так называемые фиктивные (или законтурные). Cетка, на которой решается задача (1)-(3)
t=jτ
Рис. 1 Разностную схему, отвечающую исходной задаче (4), получим, приблизив производные разностными соотношениями соответственно (6). Например, ∂ 2u ∂t 2
x ,t
≈
u ( x, t + τ ) − 2u ( x, t ) + u ( x, t − τ )
τ2
6
Искомая схема примет вид
u ij +1 − 2u ij + u ij −1
τ2 u1j − u −j1 2h u i0
= 0,
=g
2
u ij+1 − 2u ij + u ij−1
u Lj +1 − u Lj −1 2h
(7 )
h2 = 0, L = [1 / h]
(8)
u 1i − u i−1 = − ε 0 ih, =0 2 2τ
ε0
(9)
Схеме (7)-(9) отвечает шаблон, изображенный на рис.2 (типа “крест”). Он иллюстрирует тот факт, что для вычисления значения искомой функции на текущем шаге по времени (на временном слое j+1) необходимо знать значения этой функции на двух предыдущих слоях (j и j-1). Пятиточечный шаблон явной схемы МКР для задачи (1)-(3)
(i, j+1) (i-1, j) (i+1,j)
(i,j-1) Рис. 2 Разрешая уравнение (7) относительно uij+1, находим
u ij +1 = 2u ij − u ij −1 + r 2 g 2 (u ij+1 − 2u ij + u ij−1 )
(10)
Равенство (10) позволяет явно вычислить значение сеточной функции uij в последовательные моменты времени tj=jτ, j=0,1,…, а на
7
каждом временном слое – во всех точках xi=ih, i=0,1,…, L .Схема, которой отвечает шаблон типа “крест” (см. рис.2), называется явной схемой МКР. Для того, чтобы запустить вычислительный процесс, требуется исключить из начальных условий (9) значения функции u в законтурных узлах j=-1 (ui-1); а для вычисления значений сеточной функции на краях отрезка интегрирования требуется исключить значения функции u в законтурных узлах i=L+1, i=-1 (uL+1j и u-1j) из граничных условий (8). Выполнив указанные действия, получим следующие вычислительные формулы
u i0 =
ε0
− ε 0 ih, i = 0,1, ..., L 2 u 10 = u 00 (1 − g 2 r 2 ) + g 2 r 2 u10 ; u 1L = u L0 (1 − g 2 r 2 ) + g 2 r 2 u L0 −1 u i1 = u i0 (1 − g 2 r 2 ) +
(11)
1 2 2 0 g r (u i +1 + u i0−1 ), i = 1,2, ..., L − 1 2
u 0j +1 = 2u 0j (1 − g 2 r 2 ) − u 0j −1 + 2 g 2 r 2 u1j ;
j = 1,2, ... ;
u ij +1 = 2u ij (1 − g 2 r 2 ) − u ij −1 + g 2 r 2 (u ij+1 + u ij−1 ) j = 1,2, ... ; i = 1,2, ..., L − 1 u Lj +1 = 2u Lj (1 − g 2 r 2 ) − u Lj −1 + 2 g 2 r 2 u Lj −1 ; j = 1,2, ... ; Можно показать (см./1/), что схема (7)-(9) имеет второй порядок аппроксимации относительно h. Далее, для того, чтобы решение задачи (7)-(9) сходилось к решению исходной задачи, требуется, чтобы эта схема была устойчивой. Рассмотрим один из наиболее популярных методов исследования устойчивости.
1.4. Способ Неймана исследования устойчивости задачи Коши Рассмотрим задачу Коши ∂ 2u ∂ 2u − = 0, − ∞ < x < ∞, 0 < t < T (12) ∂t 2 ∂x 2 ∂u ( x,0) = ψ 2 ( x), − ∞ < x < ∞ u ( x,0) = ψ 1 ( x), ∂t
8
и аппроксимируем ее схемой
u mj +1 − 2u mj + u mj −1
τ
2
−
u mj +1 − 2u mj − u mj −1 h
2
=0
(13)
j = 1,2, ... , [T / τ ] − 1 u m0
u 1m − u m0
= ψ 1 ( x m ),
τ
= ψ 2 ( x m ), m = 0, ± 1, ...
В /1/ показано, что для устойчивости разностной схемы необходимо, чтобы решение задачи (1.13) удовлетворяло условию max u mj ≤ const max u m0 , j = 0,1, ... , [T / τ ] m
m
(14 )
при произвольной ограниченной функции ψ 1 ( xm ) , где ψ 1 ( x) задает начальное возмущение решения. Поэтому свойство (14) называют устойчивостью задачи (12) относительно возмущения начальных данных. Для устойчивости задачи Коши (12) по начальным данным необходимо, чтобы условие (14) выполнялось, в частности, и для ψ 1 = e iαm , где α - вещественный параметр. Тогда решение задачи (12) можно искать в виде
u mj = λ j e iαm (15) где λ = λ (α ) определяется путем подстановки (15) в (12). Далее, можно показать , что условие (14) будет выполнено, если числа λ (α ) (вообще говоря, - комплексные) лежат в единичном круге, т.е. выполняется условие
λ (α ) ≤ 1
(16)
Неравенство (16) и выражает необходимое условие устойчивости Неймана применительно к рассматриваемому примеру. Используем его для анализа устойчивости схемы (7). Подставим (15) в (7) и для определения λ (α ) получим уравнение
α
(17) )λ + 1 = 0 2 По теореме Виета имеем, что произведение корней этого уравнения равно 1, т.е. для выполнения условия (16) требуется, чтобы корни λ1, 2 уравнения (17) были комплексно-сопряженными и лежали
λ 2 − 2(1 − 2r 2 g 2 sin 2
9
на единичной окружности. Для этого, в свою очередь, необходимо, чтобы дискриминант D(α ) уравнения (17) был отрицателен: α⎛ α ⎞ D(α ) ≡ 4r 2 g 2 sin 2 ⎜ r 2 g 2 sin 2 − 1⎟ < 0. 2⎝ 2 ⎠ Данное неравенство выполняется при всех α, если gr ≤ 1 . Отсюда следует, что для устойчивости построенной схемы необходимо, чтобы шаг по временной координаты был связан с шагом по пространственной координате неравенством h (18) τ≤ g Пусть теперь g=g(x,t)≠ const. В этом случае применяется принцип “замороженных коэффициентов” /1/, в соответствии с которым необходимое условие устойчивости Неймана можно записать в виде h (19) τ≤ , g * = max g ( x, t ) x , t g* В заключение отметим, что описанный подход применяется и для анализа устойчивости явной конечноразностной схемы, которая строится для соответствующего параболического уравнения. Вопрос влияния граничных условий на устойчивость разностной схемы в настоящих методических указаниях не рассматривается. 1.5. Неявная схема МКР В выражении (4) вторая производная ∂2u/∂x2 была заменена конечной разностью на временном слое tj= jτ. Если замену провести на временном слое tj+1= (j+1)τ, то вместо (7) получим
u ij +1 − 2u ij + u ij −1
τ2
=g
2
u ij++11 − 2u ij +1 + u ij−+11 h2
(20)
Уравнению (20) отвечает шаблон, изображенный на рис.3.
Пятиточечный шаблон неявной схемы МКР для задачи (1)-(3)
10
Рис.3 Видно, что из уравнения (20) невозможно явно выразить u ij +1 через значения функции u с предыдущих слоев по времени (j и j-1). Это происходит оттого, что в (20) наряду с u ij +1 входят неизвестные
u ij++11 и u ij−+11 . Поэтому данная схема и называется неявной. Обозначив γ = g2 r2 , перепишем (20) в виде
γu ij++11 − (1 + 2γ )u ij +1 + γu ij−+11 = −2u ij + u ij −1
(21)
Используя соотношения (8), (9), получим
γu1i +1 − 2(1 + γ )u1i + γu1i −1 = −2ui0 , i = 1,2,..., L − 1
(22)
γu11 − (1 + γ )u10 = −u00 , γu1L −1 − (1 + γ )u1L = −uL0 ε ui0 = 0 − ε 0ih, i = 0,1,..., L
(23)
2γu1j +1 − (1 + 2γ )u0j +1 = −2 u0j + u0j −1
(25)
2γuLj +−11 − (1 + 2γ )uLj +1 = −2 uLj + uLj −1
(26)
2
(24)
Опишем по шагам алгоритм решения системы уравнений (21)(26) с применением метода прогонки /2/. Шаг первый. Вычисление значений функции u на нулевом слое по времени из уравнений (24). Шаг второй. Вычисление значений функции u на первом слое по времени из уравнений (22), (23) при помощи метода прогонки. Для применения этого процесса перепишем (22), (23) в стандартном для прогонки виде /2/
11
a i y i −1 − c i y i + bi y i +1 = − Fi , i = 1,2, ... , L − 1
(27)
y 0 = κ 1 y1 + µ1 ;
(28)
y L = κ 2 y L −1 + µ 2
Здесь введены обозначения
yi = u1i , ai = γ , ci = 2(1 + γ ), bi = γ , Fi = 2ui0
(29)
u00 uL0 κ1 = , µ1 = , κ 2 = κ1, µ2 = 1+ γ 1+ γ 1+ γ
γ
Для возможности применения метода прогонки достаточно потребовать, чтобы коэффициенты системы (27), (28) удовлетворяли условиям /2/
a i ≠ 0, bi ≠ 0,
ci ≥ a i + bi , i = 1,2, ... , L − 1
(30)
κ 1 ≤ 1, κ 2 < 1 Очевидно, параметры (29) удовлетворяют условиям (30). Коэффициенты прямой прогонки вычисляем по формулам bi α1 = κ1, β1 = µ1, αi +1 = (31) ci − αi ai
Fi + ai βi , i = 1,2, ... , L − 1 ci − αi ai Неизвестные yi находим в ходе обратной прогонки по формулам κ β + µ2 (32) yL = 2 L , y i = α i +1 y i +1 + β i +1, i = L − 1, L − 2,...,0 1 − κ 2α L
βi +1 =
Шаг третий (и последующие). Вычисление значений функции u на (j+1)-ом слое по времени (j≥1) из уравнений (21), (25), (26) в цикле по j при помощи метода прогонки. Для применения этого процесса перепишем (21), (25), (26) в виде (27), (28), введя обозначения
12
y i = u ij +1 , Fi = 2u ij − u ij −1 , a i = bi = γ , c i = 1 + 2γ
(33)
2u 0j − u 0j −1 2γ i = 0,1, ... , L; κ 1 = κ 2 = , µ1 = 1 + 2γ 1 + 2γ
µ2 =
2u Lj − u Lj −1 1 + 2γ
Очевидно, что для параметров (33) удовлетворяются условия (30) и, следовательно, здесь также можно применить метод прогонки. Вычисление коэффициентов и неизвестных (последовательно для каждого j= 1,2, …) проводится по формулам (32), (33) аналогично тому, как это описано на Шаге втором . Отметим, что неявная схема, как говорят, безусловно устойчива, т.е. обеспечивает сходимость разностной задачи к решению соответствующей дифференциальной при любом отношении τ/h.
2. Начально-краевые задачи для уравнения параболического типа (уравнения теплопроводности) 2.1. Задание. Найти численное решение задачи вида
u t = g 2 ( x, t )u xx + f ( x, t ), p 0 u (0, t ) + p1u x (0, t ) = A(t ) s 0 u (1, t ) + s1u x (1, t ) = B (t ) u ( x,0) = σ 1 ( x)
x ∈ (0,1), t ∈ (0, T )
(34) (35) (36)
1) при помощи явной схемы МКР; при помощи неявной схемы МКР. 2) Найти решение с точностью до 0.0001 на отрезке времени T=1/g*, где g * = max g ( x, t ) . При использовании явной схемы x ,t
предварительно определить условие ее устойчивости. При помощи средств пакета Maple построить графики функций u ( x* , t ), u ( x, jt * ), где x*=0.6, t*=T/10, j=1,2,4. Сравнить результаты, полученные по явной и по неявной схемам МКР. Проверить правильность работы программы на тестовом примере /3/
13
⎧u t = g 2 u xx, 0 < x < 1, 0 < t < ∞ ⎪⎪ ⎨u (0, t ) = 0, u (1, t ) = 0, 0 < t < ∞ ⎪u ( x,0) = 1, 0 ≤ x ≤ 1 ⎪⎩
(37)
Точным решением задачи является ряд
u=
4
π
∞
∑ k =1
2 1 e −[π ( 2k −1) g ] t sin[π (2k − 1) x] 2k − 1
(38)
Расчет провести при g = const = 1. 2.2. Явная схема МКР Для аппроксимации производной по времени используем одностороннюю разность u t ≈ ( u ( x , t + τ ) − u ( x , t )) / τ . Действуя аналогично п.1.3, получим следующие вычислительные формулы
u ij +1 = u ij (1 − 2rg 2 ) + rg 2 (u ij+1 + u ij−1 ), i = 1,2, ... , L − 1
(39)
u 0j = u Lj = 0, u i0 = 1, j = 0,1,2, ... ; r = τ / h 2
(40)
Используя описанный в п.1.4 подход, находим, что для устойчивости построенной разностной схемы между шагами по временной и пространственной координатам должно иметь место соотношение 2
В случае коэффициентов дает
1 ⎛ h⎞ τ≤ ⎜ ⎟ 2 ⎝ g⎠ g = g ( x , t ) ≠ const принцип
(41) замороженных
2
1⎛ h ⎞ τ ≤ ⎜⎜ ⎟⎟ , 2 ⎝ g* ⎠
g * = max g ( x, t ) x ,t
(42)
Вычислительный процесс организуется в следующем порядке. После задания шага h по пространственной координате и определения шага τ по времени ( в соответствии с (41)) находим значения функции u на нулевом слое по времени по формуле (40). Далее значения функции u определяются в цикле по времени по формулам (39) для j ≥ 0 .
14
2.3. Неявная схема МКР Поступая аналогично п.1.5, неявную схему МКР для задачи (2.4) запишем в виде γuij++11 − (1 + 2γ ) uij +1 + γuij−+11 = − uij , i = 1,2 ,..., L − 1 (43)
u 0j = u Lj = 0; ui0 = 1; j = 0,1,...; i = 1,2 ,..., L − 1 Задача (43) решается c применением метода прогонки на каждом слое по времени. Опишем по шагам алгоритм решения. Шаг первый. Вычисление значений функции u на нулевом слое по времени по формуле ui0 = 1. Шаг второй ( и последующие). Вычисление значений функции u на (j+1) –ом слое по времени ( j≥0 ) из уравнений (43) в цикле по j при помощи метода прогонки. Для применения этого процесса перепишем (43) в виде (27), (28), введя обозначения
yi = uij +1, ai = bi = γ , ci = 1 + 2γ
(44)
Fi = uij , i = 1,2, ... , L − 1 Кроме этого, из граничных условий в (2.10) имеем
κ1 = µ1 = κ 2 = µ2 = 0
(45)
Очевидно, параметры в (44), (45) удовлетворяют условиям (30), что делает возможным применение метода прогонки. Для каждого j = 0,1,2, … вычисление коэффициентов прямой прогонки происходит по формулам (31), а неизвестные u ij +1 определяются в ходе обратной прогонки по формулам (32). Отметим, что, как и в случае волнового уравнения, неявная схема МКР является безусловно устойчивой. 3. Требования к отчету и программам 3.1. Структура отчета Отчет должен содержать следующие разделы: 1)результаты расчета тестовой задачи и сравнение их с аналитическим решением; 2)постановку задачи, т.е. уравнение вместе с начальными и граничными условиями; 3)разностную схему, аппроксимирующую исходную задачу, вместе с оценкой порядка аппроксимации; 4)вычислительные формулы для своего варианта (по явной и неявной схемам);
15
5)для явной схемы - вычисление условия ее устойчивости; 6)оценку погрешности ∆ результата, вычисляемую по формуле ∆ = max u h (0.5, t ) − u h / 2 (0.5, t ) , где uh и uh./2 - результаты расчетов с t
шагом h и h/2 соответственно; 7)значения параметров (в т.ч. шагов h и τ), при которых производились расчеты; 8)графики функций, указанные в задании; 9)результаты сравнения данных расчета по явной и по неявной схемам. 3.2. Параметры программы Во всех процедурах, реализующих явную и неявную схемы МКР, должны использоваться следующие входные и выходные параметры. Входные параметры: • X0,XN – начальное и конечное значения пространственного аргумента; • Т – величина временного отрезка интегрирования; • P0,P1,S0,S1 – коэффициенты в краевых условиях (2), (35); • L – количество шагов, на которые разбивается отрезок интегрирования по оси x. Выходные параметры: • U – массив приближенных значений функции u(x,t) на текущем временном слое. Во всех программах в качестве внешних функций описываются входящие в краевые и начальные условия зависимости A(t), B(t), σ1(x),σ2(x), а также переменные коэффициенты g2(x,t), f(x,t). В процедуре, реализующей метод прогонки для неявной схемы МКР, коэффициенты α i , β i следует хранить в массивах, описанных внутри процедуры. В процедуре, реализующей явную схему МКР, наряду с массивом U следует организовать массив U0 для хранения значений функции u(x,t) с предыдущего слоя по времени. Варианты заданий к темам 1, 2 Таблица 1. Коэффициенты уравнения и начальные данные № f ( x, t ) σ1 ( x ) σ 2 ( x) g 2 ( x, t ) 3(11 . − 0.5x ) 0,01(1 − x ) 0 1 et − 1 . + x )(11 . − x ) 1 − cos(t ) 2 5(01 0 0
3
2x + 1
4
e1− x
t cos(t ) t (0.01 + t )
0 0
0.001x(1 − x ) 0
16
5
3 cos(πx / 3)
6
(15. x − 1)2
7 8
9 10
t (t + 01 . )) 01 . t + sin(t )
0
0
0
0
ex
2t + 1 2t + 1
0 0
0 x⎞ ⎛ 0.01x 2 ⎜ 0.5 − ⎟ 3⎠ ⎝
2x3 + 1 4( x + 0.1) 2 + cos(πx ) 2 + sin (πx ) 2 + tg (πx 4 )
t (0.01 + t ) t (0.01 + t )
0
0
0
0
0.1 + e −t 0.1 + e −t 0.1 + e −t 0.1t + sin (t ) 1 − sin (t ) 1 − sin (t ) 1 − sin (t ) − t (2 − cos(t ))
0 0 0.1 sin (πx ) 0 0.1 sin (πx ) 0 0 0
0 0 0 0.01 cos(πx ) 0.01 cos(πx ) 0 0 0 0 0 0 0 0
e− x + 1
11 12 13 14 15 16 17 18
x3 + 1 3x 2 − 2 x + 1 e −2 x + 3 x − 1 3x 4 − 2 x 2 + 2 x+2
19 20 21 22 23 24
3x 3 − x + 1 x4 + x2 + 1 2x 2 + 1 2 − cos(πx ) 3 + sin (πx ) 3x + 1
3t + e −t 2t − cos(t )
25 26
3 + cos(πx ) 4 − sin (πx )
3t + e −t 2t − cos(t ) 3t + e −t 2t − cos(t )
0 0 0 0 0.01x(tg ( x ) − 1) 0
3t + e −t 2t − cos(t )
0 0
№
p0
p1
s0
s1
1 2 3 4 5 6 7 8 9
1 0 1 0 1 1 0 0 -1
0 1 0 1 0 0 1 1 1
1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 1
0.01x(1 − x )2 0 0
Таблица 2. Граничные значения A(t ) B(t ) 0 0 0 -0.001t -0.001t 0 0.01t3 0 0
0 0 0 0.001t 0.001t 0.01t2 0 0 0
17
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
1 1 -1 1 1 1 0 1 1 1 1 1 1 1 1 1 -1
0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0
1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1
0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0
0.001sin(t) 0 0.001t 0 0 0 0.001t 0 -0.01tsin(t) 0 0 -0.01te-t 0 0 0 -0.01tcos(t) -0.01tcos(t)
0 0.01(e-t-1) 0.001t 0 0 0 0.01t2 0.01etsin(t) 0 0 0 0 2 0.01t cos(t) 0 0 0.01tcos(t) 0.01tcos(t)
ЛИТЕРАТУРА 1. Годунов С.К., Рябенький В.С. Разностные схемы (введение в теорию). Учебное пособие. - М.: Наука, 1977.- 439 с. 2.Самарский А.А., Гулин A.В. Численные методы: Учебное пособие для вузов. - М.: Наука. Гл. ред. физ. - мат. лит.,1989.- 432 с. 3.Фарлоу С. Уравнения с частными производными для научных работников и инженеров. - М.: Мир, 1985. - 384 с. ПРИЛОЖЕНИЕ А. Приведем фрагмент программы, реализующей алгоритм явной схемы МКР решения тестового примера (4) (обозначения переменных соответствуют обозначениям раздела 1). TK:=2/g; L:=Round(1/h); TAU:=CTAU*h/g; R:=TAU/h; RG2:=SQR(R*g); NT:=Round(TK/TAU)+1; {CTAU - коэффициент ≤ 1, подбираемый в численном эксперименте при реализации формулы (18); ТК - длина временного интервала, на котором решается задача (4)} Iprint:=Round(0.6/h); JPrint:=Round(TK/20); JOut:=0; {Результатом работы программы являются значения функции u в узле под номером Iprint по пространственной переменной, выдаваемые через равные промежутки времени, равные JPrint;
18
JOut - текущее значение номера временного слоя, на котором происходит выдача результата} j:=0; T:=0; for i:=0 to L do begin x:=i*h; U0[i]:=Sig1(x); end; {На нулевом шаге по времени (j=0) в массив U0 заносятся начальные значения функции u. Далее при определении функции u на (j+1) - ом шаге в массиве U0 хранятся значения u c (j-1) - го шага} UOut(U0); {UOut - процедура, выводящая на экран значение функции u в узле под номером Iprint} j:=1; U[0]:=RG2*(U0[1]-U0[0])+U0[0]; for i:=1 to L-1 do U[i]:=0.5*RG2*(U0[i+1]-2*U0[i]+U0[i-1])+U0[i]; U[L]:=RG2*(U0[L-1]-U0[L])+U0[L]; {Здесь в массив U заносятся значения функции u при j=1 (реализация второй и третьей формул (11)} for j:=2 to NT do begin T:=j*TAU; Buf:=U[0]; U[0]:=2*(RG2*(U[1]-U[0])+U[0])-U0[0]; U0[0]:=Buf; for i:=1 to L-1 do begin Buf:=U[i]; U[i]:=RG2*(U[i+1]-2*U[i]+U0[i-1])+2*U[i]-U0[i]; U0[i]:=Buf; end; Buf:=U[L]; U[L]:=2*(RG2*(U0[L-1]-U[L])+U[L])-U0[L]; U0[L]:=Buf; if j=JOut then begin JOut :=JOut + JPrint; UOut(U); end; end {j}; {Здесь в цикле по j реализуется оставшаяся часть формул (11)} Приложение B.
19
Приведем фрагмент программы, реализующей алгоритм неявной схемы МКР решения тестового примера (4). Отметим, что при увеличении числа узлов в аппроксимирующей схеме переменные программы могут переполнить статическую память. В этом случае следует разместить их в динамической памяти (heap). IPrint:=Round(0.6/h); L:=Round(1/h); Tau:=CTau*h; {Величина коэффициента CТau, конечно, не сказывается на устойчивости схемы, однако при слишком большом CТau ухудшается точность аппроксимации}
R:=Tau/h; gam:=SQR(R*G); gam1:=1+gam; cap1:=gam/gam1; cap2:=cap1; j:=0; T:=0; NT:=Round(Tk/Tau)+1; JPrint:=Round(NT/20); for i:=0 to L do begin x:=i*h; XN[i]:=x; U0[i]:=Sig1(x); FPR[i]:=2*U0[i] end; {Реализация шага 1 алгоритма, описанного в п. 1.5 (FPR - правая часть уравнения (22)} jp:=0; JOut:=JPrint; gotoxy(k+1,jp+2); write(j:4); gotoxy(k+7,jp+2); write(t:10:3); gotoxy(k+18,jp+2); write(U0[IPrint]:12:5); { k и jp - некоторые параметры печати} j:=1; T:=Tau; mu1:=U0[0]/gam1; mu2:=U0[L]/gam1; Alpha[1]:=cap1; Beta[1]:=mu1; for i:=1 to L-1 do begin A[i]:=gam; C[i]:=2*gam1; b[i]:=gam; Rab:=C[i]-Alpha[i]*A[i]; Alpha[i+1]:=B[i]/Rab; Beta[i+1]:=(FPR[i]+A[i]*Beta[i])/Rab end; {Вычисление коэффициентов (27) и параметров (28), (29), участвующих в прямом ходе прогонки на первом шаге по времени. Вычисление коэффициентов (31) для проведения обратной прогонки на первом шаге по времени} gam1:=gam1+Gam;
20
U[L]:=(Cap2*Beta[L]+Mu2)/(1-Cap2*Alpha[L]); for i:=L-1 downto 0 do begin U[i]:=Alpha[i+1]*U[i+1]+Beta[i+1]; {Вычисление значений функции u в ходе обратной прогонки на первом шаге по времени} C[i]:=Gam1; end; Cap1:=2*Gam/Gam1; Cap2:=Cap1; if JOut=j then begin JOut:=JOut+JPrint; jp:=jp+1; gotoxy(k+1,jp+2); write(j:4); gotoxy(k+7,jp+2); write(t:10:3); gotoxy(k+18,jp+2); write(U[IPrint]:12:5); end; for j:=2 to NT do begin T:=J*Tau; mu1:=(2*U[0]-U0[0])/Gam1; mu2:=(2*U[L]-U0[L])/Gam1; Alpha[1]:=Cap1; Beta[1]:=Mu1; for i:=1 to L-1 do begin FPR[i]:=2*U[i]-U0[i]; Rab:=C[i]-Alpha[i]*A[i]; Alpha[i+1]:=B[i]/Rab; Beta[i+1]:=(FPR[i]+A[i]*Beta[i])/Rab; end; {Вычисление коэффициентов по формулам (33) для проведения прямого хода прогнки на j - ом шаге по времени} U0[L]:=U[L]; U[L]:=(Cap2*Beta[L]+Mu2)/(1-Cap2*Alpha[L]); for i:=L-1 downto 0 do begin U0[i]:=U[i]; U[i]:=Alpha[i+1]*U[i+1]+Beta[i+1]; end; {Вычисление значений функции u в ходе обратной прогонки на j - ом шаге по времени}
21
If j=JOut then begin jp:=jp+1; JOut:=JOut+JPrint; gotoxy(k+1,jp+2); write(j:4); gotoxy(k+7,jp+2); write(t:10:3);gotoxy(k+18,jp+2); write(U[IPrint]:12:5); end end{J};