在Matlab中计算常微分方程

在Matlab中计算常微分方程,matlab,matrix-multiplication,differential-equations,Matlab,Matrix Multiplication,Differential Equations,给定一个形式为y'=a*y(t)的系统,其解为y(t)=e^(tA)*y(0),其中e^a是矩阵指数(即从n=0到a^n/n的无穷大之和!),在给定矩阵a的值和y的初始值的情况下,我如何使用matlab计算解 也就是说,给定A=[-2.1,1.6;-3.1,2.6],y(0)=[1;2],我如何在matlab中求解t=[0:5]上的y(t)=[y1;y2] 我试着用像这样的东西 t = 0:5 [y1; y2] = expm(A.*t).*[1;2] 我在计算乘法时发现了错误,因为维数不一致

给定一个形式为y'=a*y(t)的系统,其解为y(t)=e^(tA)*y(0),其中e^a是矩阵指数(即从n=0到a^n/n的无穷大之和!),在给定矩阵a的值和y的初始值的情况下,我如何使用matlab计算解

也就是说,给定A=[-2.1,1.6;-3.1,2.6],y(0)=[1;2],我如何在matlab中求解t=[0:5]上的y(t)=[y1;y2]

我试着用像这样的东西

t = 0:5
[y1; y2] = expm(A.*t).*[1;2]

我在计算乘法时发现了错误,因为维数不一致

请注意,矩阵指数是为平方矩阵定义的。尝试将衰减系数与时间向量相乘并不能得到您想要的结果(这应该是一个3D矩阵,应该逐片进行指数化)

其中一个简单的方法是:

A = [-2.1, 1.6; -3.1, 2.6];

t = 0:5;
n = numel(t);  %'number of samples'

y = NaN(2, n);
y(:,1) = [1;2];


for k =2:n
    y(:,k) = expm(t(k)*A) * y(:,1);
end;

figure();
plot(t, y(1,:), t, y(2,:));
请注意,在MATLAB中,数组的索引从1开始