实验五 Matlab/Simulink仿真实验
一、 实验目的:
1.学习系统数学模型的多种表达方法,并会用函数相互转换。
2.学习模型串并联及反馈连接后的系统传递函数。
3.掌握系统BODE图,根轨迹图及奈奎斯特曲线的绘制方法。并利用其对系统进行分析。
4.掌握系统时域仿真的方法,并利用其对系统进行分析。
二、预习要求:
借阅相关Matlab/Simulink参考书,熟悉能解决题目问题的相关Matlab函数。
三、实验内容及结果:
1.已知H(s)=,求H(s)的零极点表达式和状态空间表达式。
程序为:
> num=[0.05,1];
>> den=[0.02,0.3,1];
零极点:
>> s=tf(num,den);
>> [z,p,k]=tf2zp(num,den)
z =
-20
p =
-10
-5
k =
2.5000
状态空间:
>> [r,p,k]=residue(num,den)
r =
-5.0000
7.5000
p =
-10
-5
k =
[]
>> [A,B,C,D]=tf2ss(num,den)
A =
-15 -50
1 0
B =
1
0
C =
2.5000 50.0000
D =
0
零极点表达式:
状态空间矩阵:
2.已知,。
(1) 求两模型串联后的系统传递函数。
(2) 求两模型并联后的系统传递函数。
(3) 求两模型在负反馈连接下的系统传递函数。
程序为:
num1=[1,5];
>> den1=[1,3,2,0];
>> s1=tf(num1,den1)
Transfer function:
s + 5
-----------------
s^3 + 3 s^2 + 2 s
>> num2=[1];
>> num3=[1,1];
>> s2=tf(num2,num3)
Transfer function:
1
-----
s + 1
串联:
>> series(s1,s2)
Transfer function:
s + 5
-------------------------
s^4 + 4 s^3 + 5 s^2 + 2 s
并联:
parallel(s1,s2)
Transfer function:
s^3 + 4 s^2 + 8 s + 5
-------------------------
s^4 + 4 s^3 + 5 s^2 + 2 s
负反馈:
>> feedback(s1,s2)
Transfer function:
s^2 + 6 s + 5
-----------------------------
s^4 + 4 s^3 + 5 s^2 + 3 s + 5
两模型串联后的系统传递函数:
两模型并联后的系统传递函数:
两模型在负反馈连接下的系统传递函数:
3.作出上题中H1(s)的BODE图,并求出幅值裕度与相位裕度。
程序为(接2题):
>> bode(s1),grid on
从图上竖直的两组数据(图上的四个点)可以看出:
传递函数的幅值裕度为9.58;相位裕度为20度。
4.给定系统开环传递函数为,绘制系统的根轨迹图与奈奎斯特曲线,并求出系统稳定时的增益K的范围。
程序为:
>>num4=[1];
>> num5=[1,4,9,10];
>> s3=tf(num4,num5)
Transfer function:
1
----------------------
s^3 + 4 s^2 + 9 s + 10
>> rlocus(s3)
根轨迹图:
通过根轨迹图可以看出,系统稳定的K 的范围是0<K<26。
奈奎斯特曲线:
5.对内容4中的系统,当K=10和40时,分别作出闭环系统的阶跃响应曲线,要求用Simulink实现。
(1)K=10时:
由阶跃响应曲线可以看出系统是稳定的。
(2)K=40时:
由阶跃响应曲线可以看出此时系统发散,不稳定。
第二篇:Matlab仿真及其应用66
温州大学物理与电子信息工程学院
Matlab仿真及其应用 实验报告
实验名称:实验三 Matlab基本编程操作
实验目的:
1、 熟悉Matlab的脚本编写
2、 熟悉Matlab的函数编写
3、 书写Matlab的变量使用
4、 熟悉Matlab的程序控制结构
实验内容:
1. 分别选用if或switch结构实现函数表示
2. 根据近似计算指数,当与指数函数的误差小于0.01时停止,分别用for和while 结构实现。
3. 迭代计算,给出可能的收敛值,并给出不同收敛对应的处置范围。
4. 在第3题的代码中增加try和catch控制块,以避免出现的情况
5. 从键盘输入数值,迭代计算
实验结果及分析:
1、分别选用if或switch结构实现函数表示
新建M-file
编写程序
function y=function1(x,a)
if x<=-a
y=-1;
elseif -a<x&&x<a
y=x/a;
else
y=1;
end
保存后在命令窗口键入y=function1(1,5)
运行结果:
Switch实现:
function y=function1(x,a)
switch x
case x<=-a
y=-1;
case -a<x&&x<a
y=x/a;
otherwise
y=1;
end
保存后在命令窗口键入y=function1(1,5)
运行结果:
>> y=function1(1,5)
y =
0.2000
2、根据近似计算指数,当与指数函数的误差小于0.01时停止,分别用for和while 结构实现。
用for 结构实现:
用for结构:
function y=function3(x)
y=1;t=1;a=x;m=y+x;
for i=1:inf
if (m-y)>=0.00001
y=y+a/function1(t);
a=a*x;
t=t+1;
m=y+a/function1(t);
else
break;
end
end
end
function y=function1(n)
y=1;
for i=1:1:n
y=y*i;
end
end
运行结果:
用while 结构实现:
function y=function1(x)
y=1;i=1;a=1;
while abs(a*(x/(i+1)-1))>0.00001|i<10
a=1;
for i=1:1:i
a=a*x;
a=a/i;
end
y=y+a;
i=i+1;
end
运行结果:
3、迭代计算,给出可能的收敛值,并给出不同收敛对应的处置范围。
function y=function3(x)
x0=x/2;
x1=3/(x0+2);
while abs(x0-x1)>=0.00001
x0=x1;
x1=3/(x0+2);
x1
end
4、在第3题的代码中增加try和catch控制块,以避免出现的情况
function y=function4(x)
x0=x/2;
x1=3/(x0+2);
while abs(x0-x1)>=0.00001
x0=x1;
x1=3/(x0+2);
try
x0=-2;
catch
disp('error');
end
end
5、 从键盘输入数值,迭代计算
function function5()
x=input('input a number:');
x0=x/2;
x1=3/(x0+2);
while abs(x0-x1)>=0.00001
x0=x1;
x1=3/(x0+2);
x1
end
运行结果
>> function5()
input a number:5
x1 =
1.1250
x1 =
0.9600
x1 =
1.0135
x1 =
0.9955
x1 =
1.0015
x1 =
0.9995
x1 =
1.0002
x1 =
0.9999
x1 =
1.0000
x1 =
1.0000
x1 =
1.0000
评定成绩: