Реферат: Решение смешанной задачи для уравнения гиперболического типа методом сеток
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 n do Write(' x=', xp[i]:1:1);
WriteLn;
t := 0;
{ /// Печать решения на нулевом слое \\\ }
Write('t=',t:2:2,' ');
For i := 1 to n do
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 n do
If u2[i] >= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
For j := 1 to 15 do
Begin
{Subroutine GIP3 Begin}
n1 := n1-1;
{Вычисление параметра сетки для проверки условия Куранта}
a1 := ht/hx;
if a1 > 1 then 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;
{Subroutine GIP3 End}
t := t + ht;
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 to n do
{Вывод результатов}
If u2[i] >= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
End;
WriteLn;
WriteLn;
End.
Приложение 3
( выполнения лабораторной работы. Вариант 11)
Program Laboratornaya_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 n do Write(' x=', xp[i]:1:1);
WriteLn;
t := 0;
{ /// Печать решения на нулевом слое \\\ }
Write('t=',t:2:2,' ');
For i := 1 to n do
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 n do
If u2[i] >= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
For j := 1 to 15 do
Begin
{Subroutine GIP3 Begin}
n1 := n1-1;
{Вычисление параметра сетки для проверки условия Куранта}
a1 := ht/hx;
if a1 > 1 then 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;
{Subroutine GIP3 End}
t := t + ht;
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 to n do
{Вывод результатов}
If u2[i] >= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
End;
WriteLn;
WriteLn;
End.
(выполнения лабораторной работы. Вариант 20)
Program Laboratornaya_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 n do Write(' x=', xp[i]:1:1);
WriteLn;
t := 0;
{ /// Печать решения на нулевом слое \\\ }
Write('t=',t:2:2,' ');
For i := 1 to n do
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 n do
If u2[i] >= 0 then Write(' ',u2[i]:3:3) else Write(u2[i]:3:3);
For j := 1 to 15 do
Begin
{Subroutine GIP3 Begin}
n1 := n1-1;
{Вычисление параметра сетки для проверки условия Куранта}
a1 := ht/hx;
if a1 > 1 then 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;
{Subroutine GIP3 End}
t := t + ht;
WriteLn;
Write('t=',t:2:2,' ');
For i := 1 to n 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;