Page 130 - 363_
P. 130

131




            варіант FM1:
                 function z = FMl(mpfun, t, y);
                 %  Процедура правих частин рівняння Фізичного Маятника.
                 %  Здійснює розрахунок вектора “z” похідних вектора “у” змінних стану
                 %  за формулами:
                 %                            z(l)=y(2);
                 %                            z(2)=-sin(y(l))+S(t,y),
                 %  де  вхідні параметри:
                 %                         mpfun - ім'я процедури S(t,y)
                 %                      mpfun = 'S';
                 %                         t - поточний момент часу;
                 %                         у - поточне значення вектору змінних стану;
                 %  вихідні параметри:
                 %                         z - вектор значень похідних від змінних стану.
                                                 z(l) = y(2);
                                                 z(2) = - sin(y(l)) + feval(mpfun,t,y);
                 % Кінець процедури FM1
                    Через  те,  що  вид  звернення  до  процедури  правих  частин  змінився,
            необхідно  також  перебудувати  і  процедуру  чисельного  методу.  Назвемо  її

            RK4m:

                    function (tout, yout| = RK4m(Zpfun, Mpfun, h, t, y)
                    %   RK4m – Інтегрування ЗДР методом Рунге-Кута 4-го порядку.
                    %   праві частини яких задані процедурою Zpfun і Mpfun.
                    %   Вхідні змінні:
                    %   Zpfun - рядок, що містить і'мя процедури обчислення правих частин ЗДР.
                    %    звернення: z = fun(Mpfun, t, y), де Zpfun = 'fun',
                    %    a Mpfun - рядок, що містить ім'я процедури, до якої
                    %    звертається процедура fun;
                    %    t     - поточний момент часу
                    %    у    - вектор поточних значень змінних стану
                    %    z    - обчислені значення похідних z(i) = dy(i)/dt.
                    %         h    - крок інтегрування
                    %         t    - попередній момент часу
                    %         у    - попереднє значення вектора змінних стану.
                    %   Вихідні змінні:
                    %        tout - новий момент часу
                    %        yout - обчислене значення вектора змінних стану через крок інтегрування
                    %   Розрахунок проміжних значень похідних
                            kl = feval(Zpfun, Mpfun,t, у);
                            k2 = feval(Zpfun, Mpfun, t+h/3, y+h/3*kl);
                            k3 = feval(Zpfun, Mpfun, t+2*h/3, y+h*k2-h/3*kl);
                            k4 = feval(Zpfun, Mpfun, t+h, y+h*(k3+kl-k2));
                        %   Розрахунок нових значень вектора змінних стану
                            tout = t + h;
                            yout = у + h*(kl + 3*k2 + 3*k3 + k4)/8;
                        % Кінець процедури RK4m
                   Ця форма подання процедури обчислення правих частин диференційних

            рівнянь  не  є  зручною,  бо,  по-перше,  процедуру  вигляду  FM1  неможливо

            використовувати  у  зверненні  до  процедур  MatLAB  ode23  та  ode45  (останні
   125   126   127   128   129   130   131   132   133   134   135