镇场诗:慈心积善来分享,无数技术誓愿学。学术有成当栽树,后人来此可乘凉。故吾诚心说愿望,愿见文者得利益。
///
1、代码
%制作时间:2016-09-26
%制作人:心少朴
%制作原因:我们自控原理留了作业,写完了后,想验证一下自己写的对不对,于是写了这个小代码
%这个代码,没有捕捉异常的工序,所以请使用的时候,小心点哦。
clear;
clc;
syms s t tao;
%因为u(tao)是单位阶跃响应,所以在t>0时,u=1
u=1;
%A[1 0;1 1] B[1;1] X0[1;0]
%输入已知条件
A=input('请输入题目已知的A矩阵,如果不会输入,请参考模板:一个三行三列[1 2 3;4 5 6;7 8 9]:\n');
fprintf('A矩阵是:');
A
B=input('请输入题目已知的B矩阵\n')
fprintf('B矩阵是:');
B
X0=input('请输入题目已知的X0矩阵\n')
fprintf('X0矩阵是:');
X0
%计算e^At
sizeOfA=size(A);
fprintf('s*I-A的结果:');
sI_A=s*eye(sizeOfA(1))-A
fprintf('对s*I-A求逆矩阵:\n');
fprintf('行列式为:')
hOfsI_A=det(sI_A)
fprintf('伴随矩阵为:')
bOfsI_A=det(sI_A)*inv(sI_A)
fprintf('逆矩阵为:')
nOfsI_A=inv(sI_A)
fprintf('对sI_A的逆矩阵进行拉普拉斯逆变换的结果是:');
lnOfsI_A=ilaplace(nOfsI_A)
fprintf('e^At为:')
lnOfsI_A
%计算e^A(t-tao)
fprintf('e^A(t-tao)为:')
t_taoOfEJuzhen=subs(lnOfsI_A,t,t-tao)
fprintf('\n\n最后的结果是:')
x_t=lnOfsI_A*X0+int(t_taoOfEJuzhen*B,tao,0,t)
2、效果
请输入题目已知的A矩阵,如果不会输入,请参考模板:一个三行三列[1 2 3;4 5 6;7 8 9]:
[1 0;1 1]
A矩阵是:
A =
1 0
1 1
请输入题目已知的B矩阵
[1;1]
B =
1
1
B矩阵是:
B =
1
1
请输入题目已知的X0矩阵
[1;0]
X0 =
1
0
X0矩阵是:
X0 =
1
0
s*I-A的结果:
sI_A =
[ s - 1, 0]
[ -1, s - 1]
对s*I-A求逆矩阵:
行列式为:
hOfsI_A =
(s - 1)^2
伴随矩阵为:
bOfsI_A =
[ s - 1, 0]
[ 1, s - 1]
逆矩阵为:
nOfsI_A =
[ 1/(s - 1), 0]
[ 1/(s - 1)^2, 1/(s - 1)]
对sI_A的逆矩阵进行拉普拉斯逆变换的结果是:
lnOfsI_A =
[ exp(t), 0]
[ t*exp(t), exp(t)]
e^At为:
lnOfsI_A =
[ exp(t), 0]
[ t*exp(t), exp(t)]
e^A(t-tao)为:
t_taoOfEJuzhen =
[ exp(t - tao), 0]
[ exp(t - tao)*(t - tao), exp(t - tao)]
最后的结果是:
x_t =
2*exp(t) - 1
2*t*exp(t) /// 感恩所有帮助过我的人。我的代码是新手入门级代码,您应该学习后结合自身特点加以改造。 MATLAB是一个优秀的软件,值得学习。如果发现错误,请评论。 如果觉得博文对您有帮助就评论写好的言语,不好就评论差在哪里。因为我想铸造出来一个更加优秀的博客,需要您的支持!O(∩_∩)O谢谢 注:如果我侵犯了您的权益,请告知。看到您的告知后,我将及时作出处理。