matlab练习程序(线性常微分方程组矩阵解)

之前有通过ode和simulink解线性常微分方程组。

除了上面两种方法,线性常微分方程组还可以通过矩阵的方法求解。

比如下面这个之前使用的方程组:

x'' = x' - x + y' -z'

y'' = y' - y - x'

z'' = z' - z + x'

可以写成下面矩阵形式:

 

设这个矩阵为A,那么解可以表示为如下形式:

可以直接通过matlab的expm函数求解。

或者对A做特征值分解[e,v]=eig(A),然后得到特征值的exp对角阵,最后通过欧拉公式求解。

matlab代码如下:

clear all;close all;clc;
X0=[3;1;-1;1;0.5;0];

fvdp = @(T,Y) [Y(4);        %x'
    Y(5);                   %y'
    Y(6);                   %z'
    Y(4)-Y(1)+Y(5)-Y(6);    %x''
    Y(5)-Y(2)-Y(4);         %y''
    Y(6)-Y(3)+Y(4)];        %z'']

[T,Y] = ode45(fvdp, [0:0.1:5],X0);

for i=1:6
    plot(T,Y(:,i),'r-o');
    hold on;
end

A = [0 0 0 1 0 0;
    0 0 0 0 1 0;
    0 0 0 0 0 1;
    -1 0 0 1 1 -1;
    0 -1 0 -1 1 0;
    0 0 -1 1 0 1];

[e,v] = eig(A);

re=[];
for t = 0:0.1:5

    M = e*(exp(real(v)*t).*(cos(imag(v)*t)+1i*sin(imag(v)*t)))*inv(e);
    %M = e*expm(v*t)*inv(e);
    %M = expm(A*t);
    Y = M*X0;

    re=[re;Y'];
end

Y = re-re(1,:);

for i=1:6
    plot(T,real(Y(:,i))+X0(i),'b*');
end
grid on;

结果和ode解法是一致的:

 

posted @ 2024-05-16 23:03  Dsp Tian  阅读(22)  评论(0编辑  收藏  举报