上机练习(三)
1. 用matlab语言完成下列问题
1) 已知矩阵。
运用相关运算指令,回答下列问题。
a)分别是多少?(其中i为3×3矩阵)
b)的结果是多少?它们是否相同?为什么?
2) 分别用for和while循环结构编写程序,求出。
的结果,并写出源程序。
(3) 求出以下矩阵a的行列式、迹、秩、特征多项式和特征值。
解:(1) a+5*b-eye(3)= 8 22 35
a'+a\b= 3.9167 12.8333 21.7500
20.0000 78.0000 90.0000 (用a'+inv(a)*b也可得到结果)
b^3= 468 576 684
b.^3= 1 8 27
b^3是矩阵乘法,而 b.^3相当于给矩阵b的每一项都取立方。
(2) 在m文件中用for循环:
function suma(a,n)
sum=0;
for i=1:n
sum=sum+a^i;
end执行suma(a,5)得sum=181 182
在命令行中用while循环:
i=0;sum=0;
while(i<5)
i=i+1;
sum=sum+a^i;
end结果为:sum =181 182
(3)行列式det(a)=46
迹trace(a)=14
秩rank(a)=3
特征多项式poly(a)= 1.0000 -14.0000 47.0000 -46.0000
特征值eig(a)= 2.0000
2.考虑如下lorenz模型,其微分方程为:
其中参数为试写出该方程的s函数表示,并分别通过matlab 编程和simulink对其进行**分析并绘制图形。
解:(1)解微分方程法:
在命令行中输入:
[t,dy]=ode45('diffirental_plot_sfun',[0,30],[0;0;1]);
plot(t,dy)
得到结果如下:
其中,diffirental_plot_sfun(t,y)是编写的函数,**如下:
function dy=diffirental_plot_sfun(t,y)
dy=[-8/3*y(1)+y(2)*y(3);-10*y(2)+10*y(3);-y(1)*y(2)+28*y(2)-y(3)];
end2)用simulink的s-function builder:
结果如下:3.针对如下控制系统分别讨论和时,采用simulink**系统在单位阶跃输入下的响应,计算系统的动态性能指标;并比较二种情况下系统对单位阶跃扰动的抑制能力。
解:下图分别为k=10和k=80时系统的单位阶跃响应,易看出当k相对较小时系统无超调:
下图分别为k=10和k=80时,在系统输出稳定后,加入阶跃扰动后系统的响应曲线, 易
看出当k相对较大时系统抗扰动能力比较强:
未加入扰动时系统的动态性能指标为:
k=10时:在命令行中输入:
g1=tf([5000],[1 1000]);
g2=tf([1],[1 20 0]);
g3=tf([10],[1]);
h=tf([1],[1]);
t=feedback(g1*g2*g3,h);
dynamicperformance(t)
得到如下结果:
stablevalue=1.000000,peaktime=null, /null表示无意义;
overshoot=null, /null表示无意义;
delaytime=0.324457,risetime=0.865219,setllingtime=1.369930.
k=80时:在命令行中输入:
g1=tf([5000],[1 1000]);
g2=tf([1],[1 20 0]);
g3=tf([80],[1]);
h=tf([1],[1]);
t=feedback(g1*g2*g3,h);
dynamicperformance(t)
得到如下结果:
stablevalue=1.000000,peaktime=0.183893,overshoot=17.
083643,delaytime=0.075720,risetime=0.108172,setllingtime=0.
400237.
上述调用的函数dynamicperformance(t)是我自己写的的计算动态性能指标的通用函数,
参数t为系统的闭环传递函数, 其详细**如下:
function dynamicperformance(t)
[y,t]=step(t);
plot(t,y)
stablevalue=dcgain(t);
[ymax,k]=max(y);
if(ymax>stablevalue)
peaktime=t(k);
overshoot=100*(ymax-stablevalue)/stablevalue;
elseend
i=1;while(y(i)<0.9*stablevalue)
i=i+1;
endrisetime=t(i);
i=length(t);
while(abs(y(i)-stablevalue)<0.02*stablevalue)
i=i-1;
endsetllingtime=t(i);
i=1;while(y(i)<0.5*stablevalue)
i=i+1;
enddelaytime=t(i);
if(ymax>stablevalue)
sprintf('stablevalue=%f,peaktime=%f,overshoot=%f,ndelaytime=%f,risetime=%f,setllingtime=%f.',stablevalue,peaktime,overshoot,delaytime,risetime,setllingtime) %在m函数中必须把这句写在同一行,下同。
else sprintf('stablevalue=%f,peaktime=null,overshoot=null,ndelaytime=%f,risetime=%f,setllingtime=%f.',stablevalue,delaytime,risetime,setllingtime)end
matlab练习
1 写一个matlab小程序,求出最小的n值,使得n 2 写一个matlab函数来计算下列方程式 y 0.5 exp x 3 x x sin x 其中x是函数的输入,y是函数的输出。你的函数必须能处理当x是标量或向量的两种情况。3 一个平面上的椭圆可以表示成下列方程式 我们也可以用参数将椭圆表示成 ...
Matlab练习
下列matlab语句用于画出函数在 0,10 的值。x 0 0.1 10 y 2 exp 0.2 x plot x,y 用matlab编辑器创建一个新的m文件,把上面的语句写入这个文件并命名为然后在命令窗口中输入test1执行这个文件。看得到什么结果?通过以下两种方式得到关于exp函数的帮助。a 在...
Matlab练习
编写matlab语句计算y t 的值。已知t从9到9每隔0.5取一次值。运用循环和选择语句进行计算。用向量算法解决练习4.1。编写matlab语句计算并打印出1到50之间所有整数的平方。创建一个包含有每一个整数和他相应平方的和,注意在每一列加上合适的标签。在m文件中编写程序,计算阶乘n 注意0 如果...