#用matlab解决施密特正交规范化矩阵之后,我又想到矩阵的微分方程计算量真的太大了,来回转化让我头大,于是我尝试了一下用matlab建立模型来解决这类问题。
代码部分如下:注解还挺清晰的:
%%
%解微分方程组
%eg:x1t'=3*x1t+x2t
% x2t'=x1t+2*x2t+x3t
% x3t'=x2t+3*x3t
%1.首先设出xt
syms x1t;syms x2t; syms x3t;
syms x1t_;syms x2t_; syms x3t_;
xt1=[x1t;x2t;x3t];
xt_1=[x1t_;x2t_;x3t_];%用_代表一撇(导数)
%正常带入进去
%我们有:xt_=[x1t_;x2t_;x3t_]
% =[3*x1t+x2t;x1t+2*x2t+x3t;x2t+3*x3t]
% =[3 1 0;1 2 1;0 1 3]*[x1t;x2t;x3t]
% =[3 1 0;1 2 1;0 1 3]*xt
A=[3 1 0;1 2 1;0 1 3];
%2.对A进行对角化
%2.1求A的特征值
syms t;
%法1:因式分解
f=t*A-eye(3);%是多少写多少
fa=det(f);%求行列式
fac=factor(fa);
%法2:直接求解
[v,D]=eig(A);%v为特征向量,D为特征值
disp('特征值:');
disp(diag(D)');
disp('特征向量:');
disp(v);
%我们可知:p-1*A*p=D;
% 有A=p*D*p-1
%我们接着带入得:xt'=P*D*P-1*xt;
%移项凑形式: p-1*xt'=D*p-1*xt;
%引入变量 Yt=p-1*xt=[y1t;y2t;y3t]
%有 yt'=D*yt
%可得:[y1t';y2t';y3t']=D*[y1t;y2t;y3t]=[y1t;3*y2t;4*y3t];
syms y1t;
syms y2t;
syms y3t;
syms y1t_;
syms y2t_;
syms y3t_;
yt1=[y1t;y2t;y3t];
y1t_1=[y1t_;y2t_;y3t_];
%截图:
%微积分知识求解微分方程
%代入方程得到:
[y1t,y2t,y3t]=dsolve('Dy1t=y1t','Dy2t=3*y2t','Dy3t=4*y3t','t');
yt=[y1t;y2t;y3t];
%又知:xt=p*yt
xt=v*yt;
disp(xt);
%即为我们得到的答案
我们带入例题验证一下结论:
我们直接带入我们的代码:
得到:
结果是正确的,遇到类似题目可以直接带入模型进行求解,大大节约了我们的时间!
谢谢大家的支持啦~