Реферат: Решение смешанной задачи для уравнения гиперболического типа методом сеток
Решение смешанной задачи для уравнениягиперболическоготипа методом сеток
Рассмотрим смешанную задачудля волнового уравнения ( ¶ 2u/ ¶ t2) = c 2 * ( ¶ 2u/¶ x2) (1). Задача состоит в отыскании функции u(x,t)удовлетворяющей данному уравнению при0 < x < a, 0 < t £T, начальнымусловиям u(x,0) = f(x), ¶u(x,0)/ ¶t = g(x), 0 £ x £ a инулевыми краевыми условиями u(0,t) = u(1,t)=0.
Так как замена переменных t ® ct приводит уравнение (1)к виду ( ¶ 2 u/¶ t2) = ( ¶ 2u/ ¶ x2),то в дальнейшем будем считать с = 1.
Для построения разностнойсхемы решения задачи строим в области D = {(x,t) | 0 £ x £ a, 0 £ t £ T } сетку xi = ih, i=0,1… n, a = h * n, tj= j* ttt , j = 0,1…, m, t m = T иаппроксимируем уравнение (1) в каждом внутреннем узле сетки на шаблоне типа“крест”.
/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>
t
T
j+1
j
j-1
0 i-1 i i+1
Используя для аппроксимациичастных производных центральные разностные производные, получаем следующуюразностную аппроксимацию уравнения (1) .
ui,j+1 — 2uij + ui,j-1 ui+1,,j — 2uij + ui-1, j
t 2 h2
(4)
Здесь uij — приближенное значение функции u(x,t) в узле (xi,tj).
Полагая, что l = t / h, получаем трехслойную разностную схему
ui,j+1 = 2(1- l 2 )ui,j + l 2 (ui+1,j-ui-1,j) — ui,j-1, i = 1,2 ... n. (5)
Для простоты в даннойлабораторной работе заданы нулевые граничные условия, т.е. m 1(t) º 0, m 2(t) º 0. Значит, в схеме (5) u0,j=0, unj=0 для всех j. Схема (5) называется трехслойной на трехвременных слоях с номерами j-1, j, j+1. Схема (5) явная, т.е. позволяет вявном виде выразить ui,j через значения u с предыдущих двух слоев.
Численное решение задачисостоит в вычислении приближенных значений ui,j решения u(x,t) вузлах (xi,tj) при i =1,… n, j=1,2,… ,m. Алгоритмрешения основан на том, что решение на каждом следующем слое ( j = 2,3,4,…n) можно получить пересчетом решений с двух предыдущих слоев ( j=0,1,2,…,n-1) по формуле (5). На нулевом временном слое (j=0) решение известно изначального условия ui0 = f(xi).
Для вычисления решения напервом слое (j=1) в данной лабораторной работе принят простейший способ,состоящий в том, что если положить ¶ u(x,0)/ ¶ t » ( u( x, t ) — u(x,0) )/ t (6), то ui1=ui0+ + t (xi), i=1,2,… n. Теперь для вычислениярешений на следующих слоях можно применять формулу (5). Решение на каждомследующем слое получается пересчетом решений с двух предыдущих слоев по формуле(5).
Описанная выше схемааппроксимирует задачу с точностью до О( t +h2).Невысокий порядок аппроксимации по t объясняетсяиспользованием слишком грубой аппроксимации для производной по е в формуле (6).
Схема устойчива, есливыполнено условие Куранта t < h. Это означает, чтомалые погрешности, возникающие, например, при вычислении решения на первомслое, не будут неограниченно возрастать при переходе к каждому новомувременному слою. При выполнении условий Куранта схема обладает равномернойсходимостью, т.е. при h ® 0 решение разностной задачи равномерно стремитсяк регшению исходной смешанной задачи.
Недостаток схемы в том, что кактолько выбраная величина шага сетки h в направлении x, появляется ограничениена величину шага t по переменной t. Если необходимо произвестивычисление для большого значения величины T, то может потребоваться большоеколичество шагов по переменной t. Указанный гнедостаток характерен для всехявных разностных схем.
Для оценки погрешностирешения обычно прибегают к методам сгущения сетки.
Для решения смешанной задачидля волнового уравнения по явной разностной схеме (5) предназначена частьпрограммы, обозначенная Subroutine GIP3 Begn… End. Данная подпрограммавычисляет решение на каждом слое по значениям решения с двух предыдущих слоев.
Входные параметры :
hx — шаг сетки h попеременной х;
ht — шаг сетки t по переменной t;
k — количество узлов сетки поx, a = hn;
u1 — массив из kдействительных чисел, содержащий значение решений на ( j — 1 ) временном слое,j = 1, 2,… ;
u2 — массив из nдействительных чисел, содержащий значение решений на j — м временном слое, j =1, 2,… ;
u3 — рабочий массив из kдействительных чисел.
Выходные параметры :
u1 — массив из nдействительных чисел, содержащий значение решения из j — м временном слое, j =1, 2,… ;
u2 — массив из nдействительных чисел, содержащий значение решения из ( j +1) — м временномслое, j = 1, 2, ... .
К части программы,обозначенной как Subroutine GIP3 Begin… End происходит циклическоеобращение, пеоред первым обращением к программе элементам массива u2присваиваются начальные значения, а элементам массива u1 — значения на решенияна первом слое, вычислинные по формулам (6). При выходе из подпрограммы GIP3 вмассиве u2 находится значение решения на новом временном слое, а в массиве u1 — значение решения на предыдущем слое.
Порядок работы программы:
1) описание массивов u1, u2,u3;
2) присвоение фактическихзначений параметрам n, hx, ht, облюдая условие Куранта;
3) присвоение начальногозначения решения элементам массива и вычисленное по формулам (6) значениерешения на первом слое;
4) обращение к GIP3 в циклеk-1 раз, если требуется найти решение на k-м слое ( k ³ 2 ).
Пример:
/>/>/>/>
1
0.5 0.5
Решить задачу о колебанииструны единичной длины с закрепленными концами, начальное положение которойизображено на рисунке. Начальные скорости равны нулю. Вычисления выполнить сшагом h по x, равным 0.1, с шагом t по t, равным0.05, провести вычисления для 16 временных слоев с печатью результатов накаждом слое. Таким образом, задача имеет вид
( ¶ 2 u/ ¶ t2) = ( ¶ 2 u/ ¶ x 2), x Î [0,1] , tÎ[0,T] ,
u (x,0)=f (x), xÎ[0,a], ¶u(x,0)/¶ t=g(x), xÎ[0,a],
u ( 0, t ) = 0, u ( 1, t ) = 0, t Î [ 0, 0.8 ],
æ 2x, x Î [0,0.5] ,
f(x) = í g( x ) = 0
î 2 — 2x, x Î [0.5,1] ,
Строим сетку из 11 узлов по xи выполняем вычисления для 16 слоев по t. Программа, и результаты вычисленияприведены далее.
Приложение 1
(пример выполнения лабораторной работы)
Программа решениясмешанной задачи для уравнения гиперболического типа методом сеток.
ProgramLaboratornaya_rabota_43;
Const
hx = 0.1 ; {Шаг по x — hx }
ht = 0.05 ; {Шаг по t — ht }
n = 11 ; {Количество узлов }
Function f(x:Real): Real; { Данная функция }
{ вычисляющая решение при t=0 }
Begin
If x <= 0.5then
f:= 2 * x
else
f:= 2 — 2 * x;
End;
Function g(x:Real): Real; { Данная функция }
{ вычисляющая производную решения при t=0 }
Begin
g := 0;
End;
Var
xp :Array[1..n] of Real;
i,j,n1 :Word;
x,t,a1,b1 :Real;
u1,u2,u3 :Array[1..n] of Real;
Begin
n1 := n;
WriteLn('Приложение 2');
WriteLn('------------');
WriteLn('Результат, полученный при вычислении программы :');
WriteLn;
xp[1] := 0;
xp[n] := 1;
For i := 2 to (n — 1 ) do
Begin
x := (i-1) *hx;
xp[i] := x;
u1[i] :=f(x); { u(x,0) на 0 слое }
u2[i] :=u1[i] + ht * g(x); { u(x,ht) на 1 слое }
End;
{ /// Задание граничных условий \\\ }
u1[1] := 0 ; { u(0,0) }
u1[n] := 0 ; { u(1,0) }
u2[1] := 0 ; { u(0,ht) }
u2[n] := 0 ; { u(1,ht) }
u3[1] := 0 ; { u(0,2ht) }
u3[n] := 0 ; { u(1,2ht) }
{ /// Печатьзаголовка \\\ }
Write(' ');
For i := 1 to ndo Write(' x=', xp[i]:1:1);
WriteLn;
t := 0;
{ /// Печатьрешения на нулевом слое \\\ }
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u1[i] >=0 then Write(' ',u1[i]:3:3) else Write(u1[i]:3:3) ;
t := t + ht;
{ /// Печатьрешения на первом слое \\\ }
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u2[i] >=0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
For j := 1 to 15do
Begin
{SubroutineGIP3 Begin}
n1 := n1-1;
{Вычислениепараметра сетки для проверки условия Куранта}
a1 := ht/hx;
if a1 > 1then WriteLn('Нарушено условие Куранта') else
Begin
b1 := a1* a1;
a1 := 2* ( 1 — b1);
{Вычисление решения на очередном слое}
For i :=2 to n do u3[i] := a1*u2[i] + b1 * (u2[i+1] +
u2[i-1]) — u1[i];
For i :=2 to n do
Begin
u1[i] := u2[i];
u2[i] := u3[i]
End;
End;
u1[n] := 0;
u2[n] := 0;
u3[n] := 0;
{SubroutineGIP3 End}
t := t + ht;
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 ton do
{Выводрезультатов}
If u2[i]>= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
End;
WriteLn;
WriteLn;
End.
Приложение 3
( выполнения лабораторной работы. Вариант11)
ProgramLaboratornaya_rabota_43_variant_11;
Const
hx = 0.1 ; {Шаг по x — hx }
ht = 0.05 ; {Шаг по t — ht }
n = 11 ; {Количество узлов }
Function f(x:Real): Real; { Данная функция }
{ вычисляющая решение при t=0 }
Begin
f := x * ( x * x- 1 );
End;
Function g(x:Real): Real; { Данная функция }
{ вычисляющая производную решения при t=0 }
Begin
g := 0;
End;
Var
xp :Array[1..n] of Real;
i,j,n1 :Word;
x,t,a1,b1 :Real;
u1,u2,u3 :Array[1..n] of Real;
Begin
n1 := n;
WriteLn('Приложение 4');
WriteLn('------------');
WriteLn('Результат, полученный при вычислении программы :');
WriteLn;
xp[1] := 0;
xp[n] := 1;
For i := 2 to (n — 1 ) do
Begin
x := (i-1) *hx;
xp[i] := x;
u1[i] :=f(x); { u(x,0) на 0 слое }
u2[i] :=u1[i] + ht * g(x); { u(x,ht) на 1 слое }
End;
{ /// Задание граничных условий \\\ }
u1[1] := 0 ; { u(0,0) }
u1[n] := 0 ; { u(1,0) }
u2[1] := 0 ; { u(0,ht) }
u2[n] := 0 ; { u(1,ht) }
u3[1] := 0 ; { u(0,2ht) }
u3[n] := 0 ; { u(1,2ht) }
{ /// Печатьзаголовка \\\ }
Write(' ');
For i := 1 to ndo Write(' x=', xp[i]:1:1);
WriteLn;
t := 0;
{ /// Печатьрешения на нулевом слое \\\ }
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u1[i] >=0 then Write(' ',u1[i]:3:3) else Write(u1[i]:3:3) ;
t := t + ht;
{ /// Печатьрешения на первом слое \\\ }
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u2[i] >=0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
For j := 1 to 15do
Begin
{SubroutineGIP3 Begin}
n1 := n1-1;
{Вычислениепараметра сетки для проверки условия Куранта}
a1 := ht/hx;
if a1 > 1then WriteLn('Нарушено условие Куранта') else
Begin
b1 := a1* a1;
a1 := 2* ( 1 — b1);
{Вычислениерешения на очередном слое}
For i :=2 to n do u3[i] := a1*u2[i] + b1 * (u2[i+1] +
u2[i-1]) — u1[i];
For i :=2 to n do
Begin
u1[i] := u2[i];
u2[i] := u3[i]
End;
End;
u1[n] := 0;
u2[n] := 0;
u3[n] := 0;
{SubroutineGIP3 End}
t := t + ht;
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 ton do
{Выводрезультатов}
If u2[i]>= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
End;
WriteLn;
WriteLn;
End.
(выполнения лабораторной работы. Вариант20)
ProgramLaboratornaya_rabota_43_variant_20;
Const
hx = 0.1 ; {Шаг по x — hx }
ht = 0.05 ; {Шаг по t — ht }
n = 11 ; {Количество узлов }
Function f(x:Real): Real; { Данная функция }
{ вычисляющая решение при t=0 }
Begin
f := 10 * x * (x * x * x — 1 );
End;
Function g(x:Real): Real; { Данная функция }
{вычисляющая производную решения при t=0 }
Begin
g := 0;
End;
Var
xp :Array[1..n] of Real;
i,j,n1 :Word;
x,t,a1,b1 :Real;
u1,u2,u3 :Array[1..n] of Real;
Begin
n1 := n;
WriteLn('Приложение 4');
WriteLn('------------');
WriteLn('Результат, полученный при вычислении программы :');
WriteLn;
xp[1] := 0;
xp[n] := 1;
For i := 2 to (n — 1 ) do
Begin
x := (i-1) *hx;
xp[i] := x;
u1[i] :=f(x); { u(x,0) на 0 слое }
u2[i] :=u1[i] + ht * g(x); { u(x,ht) на 1 слое }
End;
{ /// Задание граничных условий \\\ }
u1[1] := 0 ; { u(0,0) }
u1[n] := 0 ; { u(1,0) }
u2[1] := 0 ; { u(0,ht) }
u2[n] := 0 ; { u(1,ht) }
u3[1] := 0 ; { u(0,2ht) }
u3[n] := 0 ; { u(1,2ht) }
{ /// Печатьзаголовка \\\ }
Write(' ');
For i := 1 to ndo Write(' x=', xp[i]:1:1);
WriteLn;
t := 0;
{ /// Печатьрешения на нулевом слое \\\ }
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u1[i] >=0 then Write(' ',u1[i]:3:3) else Write(u1[i]:3:3) ;
t := t + ht;
{ /// Печатьрешения на первом слое \\\ }
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u2[i] >=0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
For j := 1 to 15do
Begin
{SubroutineGIP3 Begin}
n1 := n1-1;
{Вычислениепараметра сетки для проверки условия Куранта}
a1 := ht/hx;
if a1 > 1then WriteLn('Нарушено условие Куранта') else
Begin
b1 := a1* a1;
a1 := 2* ( 1 — b1);
{Вычисление решения на очередном слое}
For i :=2 to n do u3[i] := a1*u2[i] + b1 * (u2[i+1] +
u2[i-1]) — u1[i];
For i :=2 to n do
Begin
u1[i] := u2[i];
u2[i] := u3[i]
End;
End;
u1[n] := 0;
u2[n] := 0;
u3[n] := 0;
{SubroutineGIP3 End}
t := t + ht;
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 ton do
{Выводрезультатов}
If u2[i]>= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
End;
WriteLn;
WriteLn;
End.
( выполнения лабораторной работы. Вариант14)
Program Laboratornaya_rabota_43_variant_14;
Const
hx = 0.1 ; {Шаг по x — hx }
ht = 0.05 ; {Шаг по t — ht }
n = 11 ; {Количество узлов }
Function f(x:Real): Real; { Данная функция }
{ вычисляющая решение при t=0 }
Begin
f := x * sin( 2* (x — 1) );
End;
Function g(x:Real): Real; { Данная функция }
{ вычисляющая производную решения при t=0 }
Begin
g := 0;
End;
Var
xp :Array[1..n] of Real;
i,j,n1 :Word;
x,t,a1,b1 :Real;
u1,u2,u3 :Array[1..n] of Real;
Begin
n1 := n;
WriteLn('Приложение 4');
WriteLn('------------');
WriteLn('Результат, полученный при вычислении программы :');
WriteLn;
xp[1] := 0;
xp[n] := 1;
For i := 2 to (n — 1 ) do
Begin
x := (i-1) *hx;
xp[i] := x;
u1[i] :=f(x); { u(x,0) на 0 слое }
u2[i] :=u1[i] + ht * g(x); { u(x,ht) на 1 слое }
End;
{ /// Задание граничных условий \\\ }
u1[1] := 0 ; { u(0,0) }
u1[n] := 0 ; { u(1,0) }
u2[1] := 0 ; { u(0,ht) }
u2[n] := 0 ; { u(1,ht) }
u3[1] := 0 ; { u(0,2ht) }
u3[n] := 0 ; { u(1,2ht) }
{ /// Печатьзаголовка \\\ }
Write(' ');
For i := 1 to ndo Write(' x=', xp[i]:1:1);
WriteLn;
t := 0;
{ /// Печатьрешения на нулевом слое \\\ }
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u1[i] >=0 then Write(' ',u1[i]:3:3) else Write(u1[i]:3:3) ;
t := t + ht;
{ /// Печатьрешения на первом слое \\\ }
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u2[i] >=0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
For j := 1 to 15do
Begin
{SubroutineGIP3 Begin}
n1 := n1-1;
{Вычислениепараметра сетки для проверки условия Куранта}
a1 := ht/hx;
if a1 > 1then WriteLn('Нарушено условие Куранта') else
Begin
b1 := a1* a1;
a1 := 2* ( 1 — b1);
{Вычислениерешения на очередном слое}
For i :=2 to n do u3[i] := a1*u2[i] + b1 * (u2[i+1] +
u2[i-1]) — u1[i];
For i :=2 to n do
Begin
u1[i] := u2[i];
u2[i] := u3[i]
End;
End;
u1[n] := 0;
u2[n] := 0;
u3[n] := 0;
{SubroutineGIP3 End}
t := t + ht;
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 ton do
{Выводрезультатов}
If u2[i]>= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
End;
WriteLn;
WriteLn;
End.
( выполнения лабораторной работы. Вариант13)
ProgramLaboratornaya_rabota_43_variant_13;
Const
hx = 0.1 ; {Шаг по x — hx }
ht = 0.05 ; {Шаг по t — ht }
n = 11 ; {Количество узлов }
Function f(x:Real): Real; { Данная функция }
{ вычисляющая решение при t=0 }
Begin
f := sin(pi * x* x);
End;
Function g(x:Real): Real; { Данная функция }
{вычисляющая производную решения при t=0 }
Begin
g := 0;
End;
Var
xp :Array[1..n] of Real;
i,j,n1 :Word;
x,t,a1,b1 :Real;
u1,u2,u3 :Array[1..n] of Real;
Begin
n1 := n;
WriteLn('Приложение 4');
WriteLn('------------');
WriteLn('Результат, полученный при вычислении программы :');
WriteLn;
xp[1] := 0;
xp[n] := 1;
For i := 2 to (n — 1 ) do
Begin
x := (i-1) *hx;
xp[i] := x;
u1[i] :=f(x); { u(x,0) на 0 слое }
u2[i] :=u1[i] + ht * g(x); { u(x,ht) на 1 слое }
End;
{ /// Задание граничных условий \\\ }
u1[1] := 0 ; { u(0,0) }
u1[n] := 0 ; { u(1,0) }
u2[1] := 0 ; { u(0,ht) }
u2[n] := 0 ; { u(1,ht) }
u3[1] := 0 ; { u(0,2ht) }
u3[n] := 0 ; { u(1,2ht) }
{ /// Печатьзаголовка \\\ }
Write(' ');
For i := 1 to ndo Write(' x=', xp[i]:1:1);
WriteLn;
t := 0;
{ /// Печатьрешения на нулевом слое \\\ }
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u1[i] >=0 then Write(' ',u1[i]:3:3) else Write(u1[i]:3:3) ;
t := t + ht;
{ /// Печатьрешения на первом слое \\\ }
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u2[i] >=0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
For j := 1 to 15do
Begin
{SubroutineGIP3 Begin}
n1 := n1-1;
{Вычислениепараметра сетки для проверки условия Куранта}
a1 := ht/hx;
if a1 > 1then WriteLn('Нарушено условие Куранта') else
Begin
b1 := a1* a1;
a1 := 2* ( 1 — b1);
{Вычисление решения на очередном слое}
For i :=2 to n do u3[i] := a1*u2[i] + b1 * (u2[i+1] +
u2[i-1]) — u1[i];
For i :=2 to n do
Begin
u1[i] := u2[i];
u2[i] := u3[i]
End;
End;
u1[n] := 0;
u2[n] := 0;
u3[n] := 0;
{SubroutineGIP3 End}
t := t + ht;
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 ton do
{Выводрезультатов}
If u2[i]>= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
End;
WriteLn;
WriteLn;
End.
( выполнения лабораторной работы. Вариант12)
ProgramLaboratornaya_rabota_43_variant_12;
Const
hx = 0.1 ; { Шагпо x — hx }
ht = 0.05 ; {Шаг по t — ht }
n = 11 ; {Количество узлов }
Function f(x:Real): Real; { Данная функция }
{ вычисляющая решение при t=0 }
Begin
f := sin(pi * x) *cos(x);
End;
Function g(x:Real): Real; { Данная функция }
{ вычисляющая производную решения при t=0 }
Begin
g := 0;
End;
Var
xp :Array[1..n] of Real;
i,j,n1 :Word;
x,t,a1,b1 :Real;
u1,u2,u3 :Array[1..n] of Real;
Begin
n1 := n;
WriteLn('Приложение 4');
WriteLn('------------');
WriteLn('Результат, полученный при вычислении программы :');
WriteLn;
xp[1] := 0;
xp[n] := 1;
For i := 2 to ( n- 1 ) do
Begin
x := (i-1) *hx;
xp[i] := x;
u1[i] :=f(x); { u(x,0) на 0 слое }
u2[i] :=u1[i] + ht * g(x); { u(x,ht) на 1 слое }
End;
{ /// Заданиеграничных условий \\\ }
u1[1] := 0 ; { u(0,0) }
u1[n] := 0 ; { u(1,0) }
u2[1] := 0 ; { u(0,ht) }
u2[n] := 0 ; { u(1,ht) }
u3[1] := 0 ; { u(0,2ht) }
u3[n] := 0 ; { u(1,2ht) }
{ /// Печатьзаголовка \\\ }
Write(' ');
For i := 1 to ndo Write(' x=', xp[i]:1:1);
WriteLn;
t := 0;
{ /// Печатьрешения на нулевом слое \\\ }
Write('t=',t:2:2,' ');
For i := 1 to ndo
If u1[i] >=0 then Write(' ',u1[i]:3:3) else Write(u1[i]:3:3) ;
t := t + ht;
{ /// Печатьрешения на первом слое \\\ }
WriteLn;
Write('t=',t:2:2,'');
For i := 1 to ndo
If u2[i] >=0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
For j := 1 to 15do
Begin
{SubroutineGIP3 Begin}
n1 := n1-1;
{Вычислениепараметра сетки для проверки условия Куранта}
a1 := ht/hx;
if a1 > 1then WriteLn('Нарушено условие Куранта') else
Begin
b1 := a1* a1;
a1 := 2* ( 1 — b1);
{Вычисление решения на очередном слое}
For i :=2 to n do u3[i] := a1*u2[i] + b1 * (u2[i+1] +
u2[i-1]) — u1[i];
For i :=2 to n do
Begin
u1[i] := u2[i];
u2[i] := u3[i]
End;
End;
u1[n] := 0;
u2[n] := 0;
u3[n] := 0;
{SubroutineGIP3 End}
t := t + ht;
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 ton do
{Выводрезультатов}
If u2[i]>= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
End;
WriteLn;
WriteLn;
End.