Карачун В.В., Мельник В.М.

Національний технічний університет України «КПІ»

ЧИСЕЛЬНИЙ АНАЛІЗ ПЕРЕХІДНОГО ПРОЦЕСУ В СТРУНІ

 

 Розв’язок хвильового рівняння  наводиться в багатьох джерелах з теорії коливань і рівнянь математичної фізики. Разом з тим, чисельний метод, що реалізується на комп'ютері, відкриває можливість за допомогою однієї програми вирішувати широке коло задач при різних комбінаціях початкових та граничних умов, а також для різноманітних форм збурюючих  чинників.

Розглянемо підготовку задачі до розв’язання її на ЕОМ.

Перейдемо від неперервних змінних до дискретних -

                             (1)

Замінимо частинні похідні відповідними співвідношеннями, наприклад, таким чином:

            (2)

Якщо рівняння (2) роз’язати відносно , то отримаємо розрахункове співвідношення для так званої явної схеми інтегрування

   (3)

де               ;                   ;          .

Перш ніж програмувати формулу (3), визначимося з формою представлення стану струни в довільний поточний момент часу . Функцію  будемо представляти у вигляді масиву Yt такої структури

 

    

-1

0

1

2

...

m

 Yt

m

 

 

 

...

 

 

 

 

де m - число розрахункових відрізків, на які поділяється струна,  ( - довжина струни,  - крок вздовж координати , як вже відзначалося раніше, вираз (3)).

Початковий стан струни (за ) визначимо відповідною підпрограмою-функцією Yn. Але, крім цього ще необхідно задати швидкості точок струни (підпрограма Dyn). Скористаємося щойно згаданими функціями для обчислення значень  за умови . Для цього запишемо ряд Тейлора -

                    (4)

обмежившись в ньому трьома першими доданками. Тут  означає , а  відповідає .

Значення другої похідної у формулі (4) визначаємо за умови :

.                            (5)

Підставляємо (5) в (4) -

 . (6)

Формула (6) покладена в основу підпрограми Init, яка формує масиви  (для  ) і Yt (для  ), а також задає .

procedure Init;

var g,s:integer;

 begin

  for s:=0 to m do Yp[s]:=Yn(s*Hx);

  for s:=1 to m-1 do

           Yt[s]:=Yp[s]+Dyn(s*Hx)*Tau+E/2*(Yp[s-1]-2*Yp[s]+Yp[s+1])+

           Tau2/2*Fxt(s,0);

  g:=round(Xg(0)/Hx);

  if Mg>0 then Yt[g]:=Yp[g]+Dyg*Tau+

                          sqr(Tau)/2*(Mh*fxt(g,0)+Fg(0)+

                         Ts/Hx*(Yp[g-1]-2*Yp[g]+Yp[g+1]))/(Mg+Mh);

   case Ngl of

    1:Yt[0]:=Yl(Tau);

    2:if g>0 then Yt[0]:=Yp[0]+Dym0*Tau+

                            sqr(Tau)/2*(Ts*(Yp[1]-Yp[0])/Hx+

                            fxt(0,0)*Mh/2+Fl(0))/(M0+Mh/2)

                   else Yt[0]:=Yp[0]+(Dyn(0)*Mh/2+

                           Dym0*M0+Dyg*Mg)/(M0+Mh/2+Mg)+

                           (Ts*(Yp[1]-Yp[0])/Hx+fxt(0,0)*Mh/2+

                           Fl(0)+Fg(0))*sqr(Tau)/2/(M0+Mh/2+Mg);

    3: if g>0 then Yt[0]:=Yp[0]+Tau*(Dyn(0)+Mh/2+

                          Dym0*M0)/(M0+Mh/2)+

                          sqr(Tau)/2/(M0+Mh/2)*(Ts*(Yp[1]-Yp[0])/Hx+

                          C0*(Ylk(0)-Yp[0]))

                   else Yt[0]:=Yp[0]+Tau*(Dyn(0)*Mh/2+

                          Dym0+M0+Dyg*Mg)/(M0+Mg/2+Mg)+

                         sqr(Tau)/2/(M0+Mh/2+Mg)*(Ts*Yp[1]-

                          Yp[0]+C0*(Ylk(0)-Yp[0])+fxt(0,0)*Mh/2+Fg(0))

   end;

   case Ngr of

    1: Yt[m]:=Yr(Tau);

    2: if g<m then Yt[m]:=Yp[m]+Tau*(Mh/2*Dyn(m*Hx)+

                              Mm*DyMm)/(Mh/2+Mm)+

                             sqr(Tau)/2/(Mh/2+Mm)*(Ts*(Yp[m-1]-

                            Yp[m])/Hx+Fr(0)+Fxt(m*Hx,0)*Mh/2)

                     else  Yt[m]:=Yp[m]+Tau*(Mh/2*Dyn(M*Hx)+

                            Mm*DyMm+Mg*Dyg)/(Mh/2+Mm+Mg)+

                            sqr(Tau)/2/(Mm+Mh/2+Mg)*(Ts*(Yp[m-1]-

                           Yp[m])/Hx+Fr(0)+Fg(0)+Fxt(m*Hx,0)*Mh/2);

     3:if g<m then Yt[m]:=Yp[m]+Tau*(Mm*DYMm+

                          Mh/2*Dyn(M*Hx))/(Mm+Mh/2)+

                          sqr(Tau)/2/(Mm+Mh/2)*(Ts*(Yp[m-1]-

                          Yp[m])/Hx+C1*(Yrk(0)-Yp[m])+

                          fxt(m*Hx,0)*Mh/2+Fr(0))

                    else Yt[m]:=Yp[m]+Tau*(Mm*DyMm+Mh/2*Dyn(M*Hx)+

                           Mg*Dyg)/(Mm+Mg+Mh/2)+

                          sqr(Tau)/2/(Mm+Mg+Mh/2)*(Ts*(Yp[m-1]-

                          Yp[m])/Hx+C1*(Yrk(0)-Yp[m])+

                          fxt(m*Hx,0)*Mh/2+Fr(0)+Fg(0))

   end;

  T:=Tau

 end;

 

Тут Type CoefR=array[-1..200]of real;

Коефіцієнти Tau, Tau2, Е, що використовуються в процедурі Init, як і ряд інших коефіцієнтів, що будуть залучені далі, обчислюються процедурою CoefB (буде наведена нижче).

Звернемося тепер до формули (3), що реалізує явну схему. Вона «обслуговує» внутрішні вузли сітки, яка покриває область , в яких відсутня маса . Якщо ж маса  в момент часу, що розглядається, знаходиться у вузлі з номером  тоді для цього вузла повинна виконуватися умова

                 (7)


де   - маса відрізку струни довжини .

Перейдемо в умові (7) до дискретних змінних

звідки

 

або після зведення подібних -

 

Після введення коефіцієнтів

             (8)

де      ,      ,   .

Зовнішні вузли сітки з номерами  і  «обслуговуються» граничними умовами. Розглянемо граничні умови послідовно:

 .                                                (9)

,

звідки        

або

 

Ввівши коефіцієнти  , приводимо  до вигляду

,            (10)

де ;       ;    .

Співвідношення (10) слушне за умови, коли ковзаюча вздовж струни маса в даний момент часу не виявляється на лівому кінці струни. В іншому випадку ця маса приєднується до ,  а сила, діюча на неї, додається до  і тоді:

,      (11)

де      ;  ,    .

Гранична умова у випадку, коли маса  відсутня, або знаходиться не на лівому кінці струни, дає при переході в дискретну форму наступне -

звідки

.

Після зведення подібних, маємо:

Введемо коефіцієнти  . Тоді отримаємо -

,          (12)

де  ;  ;  ; ; .

Якщо ж маса знаходиться на лівому кінці струни, тоді замість співвідношення (12) маємо:

          (13)

де      , , ,

,       .

Переходячи до правого кінця, будемо мати:

                                        (14)

Гранична умова якщо що маса  не знаходиться на правому кінці струни, в дискретній формі дає -

,

звідки

 .

Зводимо подібні

Введемо коефіцієнти :

            (15)

де ; ; .

Якщо ж в момент часу, що розглядається, маса   знаходиться на правому кінці струни, тоді -

               (16)

де ; ; .

І нарешті, гранична умова за відсутності маси  на правому кінці

дає можливість відзначити:

          Зводимо подібні

Застосуємо коефіцієнти :

,          (17)

де , , , , .

Якщо маса  знаходиться на правому кінці струни, тоді -

               (18)

де ; ; ;

;.

Співвідношення (3), (8)…(17) покладені в основу підпрограми Stept, що реалізує крок за часом за явною схемою.

Procedure Stept;

    Var  s, N:integer;

         Y:CoefR;

   Begin

     for s:=1 to m-1 do

    у[s]:=b*Yt[s]+е*(Yt[s-1]+Yt[s+1])-Yp[s]+Tau2*fxt(s*Hx, Т+Tau/2);

     N:=round (Xg(Т)/Hx);

     if (N>0)and(N<m) then Y[N]:=G1*Yt[N]-Yp[N]+G0*(Yt[n-1]+

        Yt[n+1])+G2*(Fxt(N*Hx, Т)+Fg(Т));  Т:=Т+Tau;

    сase Ngl of

      1: Y[0]:=Yl(Т);

      2: if N>0

                thenY[0]:=Y[1]/D0+D1*Fl(Т)+D2*(2*Yt[0]-Yp[0])

                else Y[0]:=Y[1]/D3+D4*(Fl(Т)+Fg(Т))+D5*(2*Yt[0]-Yp[0]);

      3: if N>0

            then Y[0]:=Y[1]/D7+D8*Ylk(Т)+D9 *(2*Yt[0]-Yp[0])

            else Y[0]:=Y[1]/D11+D12*Ylk(Т)+

                    D13*Fg(Т)+D14*(2*Yt[0]-Yp[0]);

    end;

  case Ngr of

1: Y[m]:=Yr(Т);

2: if N<m then Y[m]:=Y[m-1]/D15+D16*Fr(Т)+D17*(2* Yt[m]-Yp[m])

else Y[m]:=Y[m-1]/D18+D19* (Fr(Т)+

          Fg(Т))+D20*(2*Yt[m]-Yp[m]);

3: if N<m  then Y[m]:=Y[m-1]/D23+D24*Yrk(Т)+D25*(2*Yt[m]-Yp[m])

else Y[m]:=Y[m-1]/D27+D28*Yrk(Т)+D29*Fg(Т)+D30*(2*Yt[m]-Yp[m]);

     end;

  Y[- 1]:=m; Yp:=Yt;  Yt:=Y

end;