当前位置:首页 >> 工学 >>

Matlab作业答案

控制系统的 MATLAB 仿真与设计 - 实验作业

第二章数据结构及其运算 2.1 实验程序:
x=[12 23 34 45 56 67 78]%逐个输入数组中的元素值 x(6)%读数组中的第 6 个元素 x([1 3 5])%返回数组的第 1、3、5 个元素构成的子数组 x(4:end)%返回第 4 个元素与其后所有元素构成的子数组 x(find(x>70))%返回数组中大于 70 的元素的值 MATLAB 分步截屏:
创建一个有 7 个元素的一维数组:

直接寻访一维数组的第 6 个元素:

寻访一维数组的第 1,3,5 个元素:

(3)寻访一维数组中第 4 个至最后一个元素:

寻访一维数组中大于 70 的元素:

2.3 实验程序:
1

控制系统的 MATLAB 仿真与设计 - 实验作业

A=zeros(2,5)%生成 2 行 5 列的全 0 数组 A(1:10)=-4:5%将单下标为 1 到 10 的元素分别赋值为-4 到 5 L=abs(A)>3%判断其绝对值是否大于 3,大于则 L 对应的位置为值 1,否则为 L
值为 0

islogical(L)%判断 L 是否为逻辑数组,是逻辑数组则返回 1,否则返回 0 X=A(L) %X 为逻辑数组 L 对应为 1 的位置的数据的列向量 MATLAB 分步截屏:
生成数组:

寻访数组 A 中绝对值大于 3 的元素:

输出数组 A 中绝对值大于 3 的元素:

2.5 实验程序:
2

控制系统的 MATLAB 仿真与设计 - 实验作业

p1=[1,0,2]; p2=[1,4]; p3=[1,1]; p4=conv(p1,conv(p2,p3)); p5=[1 0 1 1]; [q,r]=deconv(p4,p5); disp(['商:',poly2str(q,'s')]); disp(['余式:',poly2str(r,'s')]) MATLAB 实验截屏:

%定义多项式 p1(s)=s2+1 %定义多项式 p2(s)=s+4 %定义多项式 p3(s)=s+1 %定义多项式 p4(s)=p1(s)p2(s)p3(s) %定义多项式 p5(s)=s3+s+1 % 求 p4(s)/p5(s)

2.6 实验程序:
A=[12 23 34;45 56 67;78 89 90];%定义 3 阶数组 A p1A=poly(A);%创建方阵 A 的特征多项式 p1A p2A=poly2str(p1A,'s')%将拟合后的 p1A 多项式系数转换为字符形式的特征多
项式函数 p2A

MATLAB 实验截屏:

3

控制系统的 MATLAB 仿真与设计 - 实验作业

第四章 M 文件和程序设计 4.2 实验程序 exp4_2:
x=input('请输入半径 r 的值:'); s=f1(x); c=f2(x); disp(['圆的面积 S 为:',num2str(s)]) disp(['圆的周长 C 为:',num2str(c)]) 实验程序-面积函数文件 f1: function s=f1(x) s=pi*x*x; end 实验程序-周长函数文件 f2: function c=f2(x) c=2*pi*x; end MATLAB 截屏: %将用户键入量赋给 x %调用函数 f1(x)计算面积 S %调用函数 f2(x)计算面积 C %用 num2str 将数值变量转换为字符变量 并用 disp 输出带数值的文本信息

%自定义函数 f1(x)

%自定义函数 f2(x)

4.3 实验程序 exp4_3:
sum=0; n=input('请输入 n 的值: ') for i=1:n sum=sum+1/i^2; end disp(['计算结果为:',num2str(sum)]) %定义变量 sum %并将用户键入量赋给变量 n, 并显示 “请 输入 n 的值” % i 从 1 取到 n %依次求 sum 的值 %用 num2str 将数值变量转换为字符变量 并用 disp 输出带数值的文本信息

MATLAB 截屏:
4

控制系统的 MATLAB 仿真与设计 - 实验作业

4.5 实验程序 exp4_5:
sum=0; %变量 sum 的初值是 0 n=0; %变量 n 的初值是 0 while sum<2000 %当 sum 值小于 2000 时 n=n+1; %n=n+1 sum=sum+n; %sum 为 n 的累加和 end disp(['最大的 n 值为:',num2str(n-1)]) %最后一次循环,sum+n 后得到的 sum 值 大于 2000, 因此最后输出的最大 n 值应为 n-1 MATLAB 截屏:

4.6(1)使用 for 循环时:
实验程序 exp4_6_1: sum=0; for i=0:63 sum=sum+2^i; end disp(['K=',num2str(sum)]) MATLAB 截屏: %定义变量 sum,其初值为 0 %i 从 0 取到 63 %依次求 sum 的累加

(2)使用 while 循环时: 实验程序 exp4_6_2: sum=0; i=0; while i<=63 sum=sum+2^i; i=i+1;

%定义变量 sum,其初值为 0 %定义变量 i,其初值为 0 %当 i≦63 时 %依次求 sum 的累加
5

控制系统的 MATLAB 仿真与设计 - 实验作业

end disp(['K=',num2str(sum)]) MATLAB 截屏:

6

控制系统的 MATLAB 仿真与设计 - 实验作业

第五章数值计算 5.1 用 LU 分解求解下列线性方程组:
+ ? + = ? + = ? + ? = + ? ? = 实验程序 exp5_1: A=[2,1,-5,1;1,-5,0,7;2,0,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; [L,U]=lu(A); x=U\(L\b) MATLAB 结果: %进行 LU 分解 %线性方程组的解

5.2 设 , ,

= + +





+ ,求函数 f 在(0.5,0.5,0.5)附近的最小值:



实验程序 exp5_2: fun=inline('x(1)+x(2)^2/(4*x(1))+x(3)^2/x(2)+2/x(3)','x') %使用内联函数构造函数 fun [x,fval]=fminsearch(fun,[0.5,0.5,0.5])%求函数 fun 在(0.5,0.5,0.5)附近的最小值 MATLAB 结果:

5.5 有初值问题:
7

控制系统的 MATLAB 仿真与设计 - 实验作业

′ =

2 ? ? 2 0 ≤ ≤ 1 4( + 1) 0 = 2

试求其数值解,并与下式精确解作比较:y t = + 1 + 1

实验程序 exp5_5: OdeFun=inline('(y^2-t-2)/(4*(t+1))') %内建函数编写待求微分方程 ts=[0,1]; y0=2; %自变量求解区间 %初值条件 %2、3 阶龙格库塔法求解微分方程数值解

[t,y]=ode23(OdeFun,ts,y0); y1=sqrt(t+1)+1; [t,y,y1]

%微分方程精确解 %以三列矩阵显示,第一列为采样点 t 对应的点,第二列为期数值 解,第三列为其精确解

MATLAB 结果:

8

控制系统的 MATLAB 仿真与设计 - 实验作业

第七章 Simulink 基础 7.1 单位负反馈系统的开环传递函数为
(. + )(. + ) 应用 Simulink 仿真系统构建其阶跃响应曲线。 (1)Simulink 仿真: =

(2)系统输出:

(3)验证: 应用 Matlab 函数 step 进行验证如下,系统单位阶跃响应的稳态值为 1:

= 7.2 系统微分方程为 ′ = ,试建立系统 Simulink 仿真模型。 ?.



Simulink 仿真:
9

控制系统的 MATLAB 仿真与设计 - 实验作业

① ②







⑥ ⑦





仿真图中位置处的信号说明如下: ① 时钟信号 t ② 信号2 ③ ′ = ④ 输出信号1 ⑤ -0.5t ⑥ ?0.5 ⑦ 信号2 ⑧ ′ = ?. ⑨ 信号2

7.3 利用 Simulink 构建函数曲线 = + 。
(1)Simulink 搭建仿真电路: 将时钟信号做平方数学运算得到单位抛物线函数,扩大 5 倍后与常数输入 16 叠 加作为系统给定输入。

(2)系统输出: ①示波器 Scope 输出函数曲线y = 5 2 + 16:

10

控制系统的 MATLAB 仿真与设计 - 实验作业

②示波器 Scope1 输出单位抛物线曲线y = 2 :

(3)验证: 在命令窗口输入程序:>>x=0:0.001:10; >> y=5.*x.*x+16; >>plot(x,y,'k-') >>grid on

与示波器 Scope 得出的仿真结果相同。

7.4 利用 Simulink 仿真 =
(1)Simulink 截图:

( +

)。

11

控制系统的 MATLAB 仿真与设计 - 实验作业

将时钟信号与常数输入 1 相加后做自然对数 ln 数学函数运算,再与时钟信号相 乘叠加后做积分运算,将仿真时间设为 1s,输出。

(2)系统输出: ①数字显示模块显示积分结果为 0.25:

②示波器 Scope 输出积分结果随积分时间 t 的变化:

③示波器 Scope1 输出积分函数曲线I =

1 (1 0

+ ):

(3)验证: ①积分结果验证:
12

控制系统的 MATLAB 仿真与设计 - 实验作业

输入程序:>> x=0:0.001:1; >> y=x.*log(1+x); >>trapz(x,y) s= 0.2500 积分结果为 0.25,Simulink 仿真在 t=1s 时输出为 0.25,两者结果相同。 ②积分函数曲线验证: 输入程序:>>plot(x,y) >>plot(x,y,'k-') >>grid on 输出积分函数图像如下,与 Simulink 仿真示波器 Scope1 输出结果相同:

7.6 利用使能子系统构成一个正弦半波整流器。
(1)Simulink 仿真: 使用电平触发的 Enabled Subsystem 子系统,当使能信号为高电平的时候运行子 系统,得出正弦半波整流波形。

(2)系统输出:

13

控制系统的 MATLAB 仿真与设计 - 实验作业

14

控制系统的 MATLAB 仿真与设计 - 实验作业

第八章控制系统的数学模型 8.1 创建连续二阶系统的传递函数模型
(1)G(s)=
++

实验程序 exp8_1_1: num=[0,0,5]; den=[1,2,2]; sys=tf(num,den) MATLAB 截屏: %分子多项式的系数 %分母多项式的系数 %建立系统的 TF 模型

(2)G(s)= ++ ? 实验程序 exp8_1_2: num=[0,0,5]; den=[1,2,2]; sys=tf(num,den); sys.inputdelay=2 MATLAB 截屏: %输入信号的滞后时间为 2 秒



8.2

已知系统的传递函数为 G(s)=

(+.)

(+.) +

,建立系统的传递函数模型,并转

换为零极点模型 实验程序 exp8_2: s=tf('s'); G1=2*(s+0.5)/((s+0.1)^2+1) num=G1.num{1}; den=G1.den{1}; sys=tf(num,den); %直接用数学运算符建立系统的 TF 模型并显示 %通过属性名访问分子的系数并赋给数组 num %通过属性名访问分母的系数并赋给数组 den %以 num 和 den 建立 TF 模型
15

控制系统的 MATLAB 仿真与设计 - 实验作业

[z,p,k]=tf2zp(num,den); G2=zpk(z,p,k) MATLAB 截屏:

%将 TF 对象的属性转换为 ZPK 对象的属性 %建立系统的 ZPK 模型

8.4

已知系统的方框图如下,其中 R1=1 , R2=2 , C1=3 , C2=4 ,计算系统的
() ()

? =
s=tf('s');


%直接用数学运算符建立各个环节的 TF 模型

实验程序 exp8_4: sys1=1+0*s; sys2=1/(3*s); sys3=1/2+0*s; sys4=1/(4*s); sys5=-1+0*s; sys6=-1+0*s; sys7=-1+0*s; sys8=1+0*s; %sys8 是 sys2、sys3 之间银触点和汇合点之间的连线,因 为前后信号不同,所以不能合并,需要建立成一个环节 sys=append(sys1,sys2,sys3,sys4,sys5,sys6,sys7,sys8);%扩展成无连接状态空间模型 Q=[1 5 0;2 1 7;3 8 6; 4 3 0;5 2 0;6 4 0;7 3 0;8 2 0]; inputs=1; outputs=4; %写出系统的连接矩阵 %sys1 的输入为系统的总输入 %sys4 的输出为系统的总输出 %生成组合后的整体系统

sysc=connect(sys,Q,inputs,outputs)

MATLAB 截屏:
16

控制系统的 MATLAB 仿真与设计 - 实验作业

17

控制系统的 MATLAB 仿真与设计 - 实验作业

第九章控制系统的分析 9.1 实验程序:
num=[2,5,1]; den=[1,2,3]; sys=tf(num,den); rlocus(sys); figure bode(num,den); grid on figure nyquist(num,den); MATLAB 结果: (1)根轨迹图: %绘制奈奎斯特图 %建立系统的传递函数模型 %绘制根轨迹图 %绘图命令 %绘制伯德图

(2)伯德图:

18

控制系统的 MATLAB 仿真与设计 - 实验作业

(3)奈奎斯特图:

9.2 实验程序:
num=[5,25,30]; den=[1,6,10,8]; sys=tf(num,den); step(sys) figure impulse(sys) MATLAB 结果:
19

%建立系统的传递函数模型 %绘制系统的单位阶跃响应曲线

%绘制系统的理想单位脉冲响应曲线

控制系统的 MATLAB 仿真与设计 - 实验作业

(1)单位阶跃响应:

(2)单位脉冲响应:

20

控制系统的 MATLAB 仿真与设计 - 实验作业

第十章基于传递函数模型的控制系统设计 10.4 考虑一个单位负反馈控制系统,其前向通道传递函数为
= ( + )
+

试应用伯德图法设计一个超前校正装置 = (+),使得校正后系统的 相角裕量 = ° , 幅值裕度 ≥ , 带宽 = ~/。 其中, < < 1。 试问已校正系统的谐振峰值 和谐振角频率 的值各为多少? (1)源程序 exp10_4:
ng0=[1]; dg0=[1,5,0,0]; t=[0:0.01:5]; w=logspace(-3,2); disp('校正前系统开环传递函数为:') g0=tf(ng0,dg0) b1=feedback(g0,1); %校正前系统闭环传函 [gm,pm,wcg,wcp]=margin(g0); %校正前系统频域参数 disp(['校正前系统频域参数:','相角裕度',num2str(pm),' ','幅值裕度',num2str(gm)]) Pm=55; %校正后系统的相角裕度(保留一定预留量) [ng1,dg1]=fg_lead_pm(ng0,dg0,Pm,w); %利用超前校正进行校正 disp('校正环节传递函数为:') g1=tf(ng1,dg1) %校正环节传递函数 disp('校正后系统开环传递函数为:') g2=g0*g1 %校正后前向通道传函 [gm1,pm1,wcg1,wcp1]=margin(g2); %校正后系统参数 disp(['校正后系统频域参数:','相角裕度',num2str(pm1),' ','幅值裕度',num2str(gm1)]) bode(g0,'r--',g1,'b--',g2,'g',w) grid on b2=feedback(g2,1); %校正后系统闭环传函 [mag,phase,w]=bode(b2);%对校正后系统闭环传函 bode 图进行离散化 Mr=max(mag); %求取 Mr disp(['校正后系统谐振峰值 Mr:',num2str(Mr)]) a=find(mag==Mr);%求 Mr 对应的脚标 wr=w(a); %求 wr disp(['校正后系统谐振峰值角频率 wr:',num2str(wr)]) b=find(mag<=0.707*mag(1));%求幅值小于 0.707 倍零频幅值的脚标所组成的数组 wb=w(b(1));%求 wb disp(['校正后系统的带宽 wb:',num2str(wb)])

源程序 fg_lead_pm:
function [ngc,dgc]=fg_lead_pm(ng0,dg0,Pm,w)
21

控制系统的 MATLAB 仿真与设计 - 实验作业

[mu,pu]=bode(ng0,dg0,w); [gm,pm,wcg,wcp]=margin(mu,pu,w); alf=ceil(Pm-pm+5); phi=(alf)*pi/180; a=(1+sin(phi))/(1-sin(phi)); a1=1/a; dbmu=20*log10(mu); mm=-10*log10(a); wgc=spline(dbmu,w,mm); T=1/(wgc*sqrt(a)); ngc=[a*T,1]; dgc=[T,1];

(2)MATLAB 仿真结果:

从仿真结果可知,校正后系统满足预期的相角欲量和带宽要求,但幅值裕量为 8.8907, 略微低于题目要求。 此时通过增加相角预留量重新进行系统校正发现, 校正后系统幅值裕度 增加缓慢,但相较于量和带宽有明显提高(如下表所示) 。为了保证系统的平稳性,选择预 留量为ε = 5° ,此时相角裕度如仿真结果。 相角裕度 幅值裕度 带宽
22

控制系统的 MATLAB 仿真与设计 - 实验作业

相角预留量ε = 0° 相角预留量ε = 5° 相角预留量ε = 8°

51.098 55.1177 57.3808

8.3933 8.8907 9.3199

1.7055 1.9373 1.9816

表 10-5 选择不同的ε时系统的频域参数

10.5 考虑一个单位负反馈控制系统,其前向通道传递函数为
( + )( + ) 试应用伯德图法设计一个校正装置 ,使得校正后系统的静态速度误差常数 = = ? ,相角裕量 = ° ,幅值裕度 ≥ 。 (1)源程序 exp10_5:
kk=40; %校正后系统开环增益 kk=4*kv ng0=kk*[1]; dg0=conv([1,0],conv([1,1],[1,4])); t=[0:0.01:5]; w=logspace(-3,2); disp('校正前系统开环传递函数为:') g0=tf(ng0,dg0) %校正前系统开关传递函数 [gm,pm,wcg,wcp]=margin(g0); %校正前系统开环传递函数的频域特性参数 disp(['校正前系统频域参数:','相角裕度',num2str(pm),' ','幅值裕度',num2str(gm)]) Pm=64.5; %期望相角裕量(留有一定的预留量) [ng1,dg1]=fg_lead_pm(ng0,dg0,Pm,w); %利用超前校正进行校正 disp('校正环节传递函数为:') g1=tf(ng1,dg1) %校正环节传递函数 disp('校正后系统开环传递函数为:') g2=g1*g0 %校正后前向通道传函 [gm1,pm1,wcg1,wcp1]=margin(g2); %校正后系统频域参数 disp(['校正后系统频域参数:','相角裕度',num2str(pm1),' ','幅值裕度',num2str(gm1)]) bode(g0,'b',g1,'r',g2,'g',w) grid on

(2)MATLAB 仿真结果:

23

控制系统的 MATLAB 仿真与设计 - 实验作业

24

控制系统的 MATLAB 仿真与设计 - 实验作业

第十一章基于状态空间模型的控制系统设计 11.1
考虑单输入系统: = + ,其中: = ? ? , = 。 ?

利 用 状 态 反 馈 控 制 = ? , 希 望 该 系 统 的 闭 环 极 点 为 , = ? ± 和 = ?。确定状态反馈增益矩阵 K。
(1)源程序 exp11_1: %利用 Bass-Gura 算法配置单输入系统极点 A=[0 1 0;0 0 1;-1 -5 -6]; b=[0;0;1]; p=[-2+i*4;-2-i*4;-10]; disp('状态反馈增益矩阵 K 为:') K=bass_pp(A,b,p) (2)MATLAB 仿真结果:

+ 11.8 考虑系统: = ,其中: = =



. , = , =



试设计一个全维状态观测器, 使得观测器所期望的特征值为: , = ?. ± . 。
(1)源程序 exp11_8: A=[0 20.06;1 0]; b=[0;1]; c=[0 1]; D=0; p=eig(A)' p1=p; p1(1:2)=[-1.8+i*2.4;-1.8-i*2.4]; %观测器极点配置 L=place(A',c',p1)' eig(A-L*c)' %观测器的状态观测值输出 [xh,x,t]=simobsv(A,b,c,D,L); (2)MATLAB 仿真结果:
25

控制系统的 MATLAB 仿真与设计 - 实验作业

26