首页 文章

Matlab - 求解三阶微分方程

提问于
浏览
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部分放在等式中 - 我不知道如何......

1 回答

  • 3

    要使用ODE45(或类似),您需要将三阶ODE转换为一阶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
    

    plot

相关问题