Программа на языке Паскаль

Program Vibration;

uses crt,gra1;

Const

time_end=6.0;

{Задание числа отрезков разбиения области решения}

N=200;

{Расчет шага интегрирования по пространству}

h=1/N;

{Задание числа Куранта}

C=1.0;

{Расчет шага по времени из условия устойчивости}

tau=C*h;

Var

i,nt:integer;

U1,U,U0,X:array [0..N] of real;

time:real;

FirstStep:Boolean;

Begin

{Расчет координат узлов по пространству разностной сетки}

for i:=0 to N do X[i]:=h*i;

{Задание начального смещения}

for i:=0 to N do U[i]:=sin(Pi*X[i]);

time:=0; nt:=1;

{Построение координатных осей}

CoordOs(0,time_end,10,-1,1,10,'Time','U');

{Установление графического курсора в начальную точку}

FirstRis; Ris(time,U[N div 2],13);

FirstStep:=true;

while time<=time_end do begin

{Вычисление смещения в граничных точках на верхнем временном слое}

U1[0]:=0.0;

If FirstStep Then

U1[N]:=C*C*U[N-1]+(1.0-C*C)*U[N]

Else

U1[N]:=-U0[N]+2*C*C*U[N-1]+2*(1.0-C*C)*U[N];

{Вычисление смещений во внутренних точках на верхнем временном слое}

for i:=1 to N-1 do

If FirstStep Then

U1[i]:=0.5*C*C*U[i-1]+(1.0-C*C)*U[i]+0.5*C*C*U[i+1]

Else

U1[i]:=-U0[i]+C*C*U[i-1]+2*(1.0-C*C)*U[i]+C*C*U[i+1];

{Присвоение переменным U, хранящим значения функции

на старом временном слое, значений функции на новом временном слое}

for i:=0 to N do begin U0[i]:=U[i];U[i]:=U1[i] end;

time:=time+tau;

{Графический вывод смещений в середине струны}

Ris(time,U[N div 2],13);

FirstStep:=false;

end;

repeat

until keypressed;

end.

Результат решения приведен на рис.7.

Рис.7.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: