6
y''' + 41y'' + 360y' + 900y = 600x' + 1200x;
y(0)= 2 ; y'(0)= 1 ; y''(0) = -0.05

ODE45関数を使用してこの方程式を解くにはどうすればよいですか?

私はこれを試しました:

==>
function dydt=f(t,y)

dydt = [y(2) ; y(3) ; -41*y(3)-360*y(2)- 900*y(1)]

==>
clear all;

timerange=[0 1.4]; %seconds
initialvalues=[2 1 -0.05];


[t,y]=ode45(@dydt, timerange, initialvalues)

plot(t,y(:,1));

しかし、Xの部分を方程式に入れる必要があります-方法がわかりません...

4

1 に答える 1

3

ODE45(または同様のもの)を使用するには、3次ODEを1次ODEのシステムに変換する必要があります。

そうするために、

y0 = y
y1 = y0'
y2 = y1'
y3 = y2'

それで

y0' = y1
y1' = y2
y2' = y3

y3' = y''' = -41*y2-360y1-900y0+600dx+1200x

これで、ODE45を使用して、x(t)およびdx(t)が使用可能な関数をネストすることにより、システムを統合できます。

function test()

    % some random x function 
    x = @(t) exp(-t);
    dx = @(t) -exp(-t);

    % integrate numerically
    [T, Y] = ode45(@linearized, [0 1], [2 1 -0.05 0]);

    % plot the result
    plot(T, Y(:,1))

    % linearized ode
    function dy = linearized(t,y)
       dy = zeros(4,1);
       dy(1) = y(2);
       dy(2) = y(3);
       dy(3) = y(4);
       dy(4) = -41*y(3)-360*y(2)-900*y(1)+600*dx(t)+1200*x(t);
    end
end

プロット

于 2012-12-07T16:45:17.957 に答える