习题2:第1~8题
第1题
在指令窗口输入: x = 1:0.2:2 和 y = 2:0.2:1 ,观察所生成的数组。
代码实现:
x = 1:0.2:2
y = 2:0.2:1
运行结果:
x =
1.0000 1.2000 1.4000 1.6000 1.8000 2.0000
y =
空的 1×0 double 行向量
第2题
要求在[ 0 , 2π ]上产生50个等距采样数据的一维数组,试用两种不同的指令实现。
代码实现:
x1 = 0:2*pi/9:2*pi;%冒号生成法
x2 = linspace(0,2*pi,10);%线性定点法
运行结果:
>> x1
x1 =
0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 4.8869 5.5851 6.2832
>> x2
x2 =
0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 4.8869 5.5851 6.2832
第3题
计算
e
−
2
t
s
i
n
t
.
\\e^{-2t}sint\,.
e−2tsint.
其中,t 为 [ 0 , 2π ]上生成的10个等距采样的数组。
代码实现:
t = linspace(0,2*pi,10);
t1 = exp(-2*t).*sin(t);
运行结果:
>> t
t =
0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 4.8869 5.5851 6.2832
>> t1
t1 =
0 0.1591 0.0603 0.0131 0.0013 -0.0003 -0.0002 -0.0001 -0.0000 -0.0000
第4题
已知
计算矩阵A 、B乘积和点乘。
代码实现:
A = [1,2;3,4];
B = [5,6;7,8];
A1 = A * B;
B1 = A .* B;
运行结果:
>> A1
A1 =
19 22
43 50
>> B1
B1 =
5 12
21 32
第5题
对题4中的 A,令 A ( : , 3 ) = [ 5 ,6 ] 生成 2×3 数组 , 利用 reshape ( A , 3 , 2) 指令,使A重构为 3×2 数组,再利用 “[ ]” ,裁去重构后的数组 A 的第一列 ,求最后结果。
代码实现:
A = [1,2;3,4];
A(:,3) = [5;6];
reshape(A,3,2);
A(:,1) = [];
运行结果:
>> A
A =
2 5
4 6
第6题
已知
计算 A & B ,A | B ,~A ,A == B , A > B 。
代码实现:
A = [0,2,3,4;1,3,5,0];
B = [1,0,5,3;1,5,0,5];
X1 = A & B;
X2 = A | B;
X3 = ~A;
X4 = (A == B);
X5 = (A>B);
运行结果:
>> X1
X1 =
2×4 logical 数组
0 0 1 1
1 1 0 0
>> X2
X2 =
2×4 logical 数组
1 1 1 1
1 1 1 1
>> X3
X3 =
2×4 logical 数组
1 0 0 0
0 0 0 1
>> X4
X4 =
2×4 logical 数组
0 0 0 0
1 0 0 0
>> X5
X5 =
2×4 logical 数组
0 1 0 1
0 0 1 0
第7题
先产生一个 3×3 的正态随机矩阵 A , 再用 floor(A) 、ceil(A) 、fix(A) 、round(A),进行 A 的取整运算,体会不同取整方法的效果。
代码实现:
A1 = rand(3);%返回3*3的随机矩阵
A = 10 + 2*A1;%产生均值为10,方差为4的矩阵
X1 = floor(A);
X2 = ceil(A);
X3 = fix(A);
X4 = round(A);
运行结果:
>> X1
X1 =
11 11 10
11 11 11
10 10 11
>> X2
X2 =
12 12 11
12 12 12
11 11 12
>> X3
X3 =
11 11 10
11 11 11
10 10 11
>> X4
X4 =
12 12 11
12 11 11
10 10 12
第8题
将题6中的 A阵 用串转换函数转换为串B,再用size指令查看两者的结构有何不同。
代码实现:
A = [0,2,3,4;1,3,5,0];%得到题6的A矩阵
B = num2str(A);
Y1 = size(A);
Y2 = size(B);
运行结果:
>> Y1
Y1 =
2 4
>> Y2
Y2 =
2 10
习题5:第1~7题
第1题
将下列系统的传递函数模型用MATLAB语言表达出来。
代码实现:
%习题5,第1题(1):传递函数模型(有理多项式)
num = [1,35,291,1093,1700];
den = [1,289,254,2541,4684,1700];
sys = tf(num,den);
运行结果:
>> sys
sys =
s^4 + 35 s^3 + 291 s^2 + 1093 s + 1700
--------------------------------------------------
s^5 + 289 s^4 + 254 s^3 + 2541 s^2 + 4684 s + 1700
Continuous-time transfer function.
代码实现:
%习题5,第1题(2):零-极点模型
z = -3;
p = [-1,-5,-15];
k = 15;
sys = zpk(z,p,k);
运行结果:
>> sys
sys =
15 (s+3)
------------------
(s+1) (s+5) (s+15)
Continuous-time zero/pole/gain model.
代码实现:
%习题5,第1题(3):两个传递函数串联
z = [0,-2,-2];
p = [-1,1];
k = 100;
[num1,den1] = zp2tf(z',p,k);
sys1 = tf(num1,den1);
num = [1,3,2];
den = [1,2,5,2];
sys2 = tf(num,den);
sys = series(sys1,sys2);
运行结果:
>> sys
sys =
100 s^5 + 700 s^4 + 1800 s^3 + 2000 s^2 + 800 s
-----------------------------------------------
s^5 + 2 s^4 + 4 s^3 - 5 s - 2
Continuous-time transfer function.
第2题
求第 1 题中各个系统模型的等效状态空间模型。
代码实现:
%习题5,第2题(1):传递函数模型→状态空间模型
num = [1,35,291,1093,1700];
den = [1,289,254,2541,4684,1700];
sys = tf(num,den);
Gss = ss(sys);
运行结果:
>> Gss
Gss =
A =
x1 x2 x3 x4 x5
x1 -289 -15.88 -9.926 -4.574 -1.66
x2 16 0 0 0 0
x3 0 16 0 0 0
x4 0 0 4 0 0
x5 0 0 0 1 0
B =
u1
x1 2
x2 0
x3 0
x4 0
x5 0
C =
x1 x2 x3 x4 x5
y1 0.5 1.094 0.5684 0.5337 0.8301
D =
u1
y1 0
Continuous-time state-space model.
代码实现:
%习题5,第2题(2):零-极点模型→传递函数模型→状态空间模型
z = -3;
p = [-1,-5,-15];
k = 15;
[num,den] = zp2tf(z,p,k);
sys = tf(num,den);
Gss = ss(sys);
运行结果:
>> Gss
Gss =
A =
x1 x2 x3
x1 -21 -11.88 -2.344
x2 8 0 0
x3 0 4 0
B =
u1
x1 2
x2 0
x3 0
C =
x1 x2 x3
y1 0 0.9375 0.7031
D =
u1
y1 0
Continuous-time state-space model.
代码实现:
%习题5,第2题(3):两个传递函数串联,状态空间模型
z = [0,-2,-2];
p = [-1,1];
k = 100;
[num1,den1] = zp2tf(z',p,k);
sys1 = tf(num1,den1);
num = [1,3,2];
den = [1,2,5,2];
sys2 = tf(num,den);
sys = series(sys1,sys2);
Gss = ss(sys);
运行结果:
>> Gss
Gss =
A =
x1 x2 x3 x4 x5
x1 -2 -2 0 1.25 1
x2 2 0 0 0 0
x3 0 1 0 0 0
x4 0 0 2 0 0
x5 0 0 0 0.5 0
B =
u1
x1 64
x2 0
x3 0
x4 0
x5 0
C =
x1 x2 x3 x4 x5
y1 7.813 10.94 15.63 5.078 1.563
D =
u1
y1 100
Continuous-time state-space model.
第3题
将以下系统状态空间模型用MATLAB语言表达出来。
代码实现:
%习题5,第3题:状态空间模型
A = [3,2,1;0,4,6;0,-3,-5];
B = [1,2,3]';
C = [1,2,5];
D = 0;
Gss = ss(A,B,C,D);
运行结果:
>> Gss
Gss =
A =
x1 x2 x3
x1 3 2 1
x2 0 4 6
x3 0 -3 -5
B =
u1
x1 1
x2 2
x3 3
C =
x1 x2 x3
y1 1 2 5
D =
u1
y1 0
Continuous-time state-space model.
第4题
求第 3 题中的系统模型的等效传递函数模型和零极点模型。
代码实现:
%习题5,第4题:状态空间模型→传递函数模型,传递函数模型→零-极点模型
A = [3,2,1;0,4,6;0,-3,-5];
B = [1,2,3]';
C = [1,2,5];
D = 0;
Gss = ss(A,B,C,D);
[num,den] = ss2tf(A,B,C,D);
sys = tf(num,den);
Gzpk = zpk(sys);
运行结果:
>> sys
sys =
20 s^2 - 83 s + 138
---------------------
s^3 - 2 s^2 - 5 s + 6
Continuous-time transfer function.
>> Gzpk
Gzpk =
20 (s^2 - 4.15s + 6.9)
----------------------
(s+2) (s-3) (s-1)
Continuous-time zero/pole/gain model.
第5题
已知系统动力学方程如下,试用MATLAB语言写出它们的传递函数。
代码实现:
%习题5,第5题(1):传递函数模型
num = [1,2,0];
den = [1,15,50,500];
sys = tf(num,den);
运行结果:
>> sys
sys =
s^2 + 2 s
-------------------------
s^3 + 15 s^2 + 50 s + 500
Continuous-time transfer function.
代码实现:
%习题5,第5题(2):传递函数模型
num = [4,0];
den = [1,3,6,4];
sys = tf(num,den);
运行结果:
>> sys
sys =
4 s
---------------------
s^3 + 3 s^2 + 6 s + 4
Continuous-time transfer function.
第6、7题
代码实现:
%习题5,第6题:传递函数模型
k = 7;
c1 = 0.5;
c2 = 0.2;
m1 = 3.5;
m2 = 5.6;
num = [m1,c1,k];
den = [m1*m2,c1*m1+c2*m1+c1*m2,c1*c2+m2*k,c1*k+c2*k,0];
sys = tf(num,den);
运行结果:
>> sys
sys =
3.5 s^2 + 0.5 s + 7
--------------------------------------
19.6 s^4 + 5.25 s^3 + 39.3 s^2 + 4.9 s
Continuous-time transfer function.
代码实现:
%习题5,第7题:传递函数模型
m1 = 12;
m2 = 38;
k = 1000;
c = 0.1;
num = [c,k];
den = [m1*m2,m1*c+m2*c,m1*k+m2*k,0,0];
sys1 = tf(num,den);
num1 = [m1,c,k];
den = [m1*m2,m1*c+m2*c,m1*k+m2*k,0,0];
sys2 = tf(num1,den);
运行结果:
>> sys1
sys1 =
0.1 s + 1000
---------------------------
456 s^4 + 5 s^3 + 50000 s^2
Continuous-time transfer function.
>> sys2
sys2 =
12 s^2 + 0.1 s + 1000
---------------------------
456 s^4 + 5 s^3 + 50000 s^2
Continuous-time transfer function.
习题6:第2~4题
第2题
将例 6-2 中的微分方程改写为以下形式:
求 u 分别为1、2时,在时间区间 t = [ 0 , 20 ] 微分方程的解(提示:使用附加变量的ode算法)
代码实现:
%习题6,第2题,主函数
tspan = [0,20];
x0 = [0,1];
ps = 1;
[T1,X1] = ode45('wffc',tspan,x0,odeset,ps);
ps = 2;
[T2,X2] = ode45('wffc',tspan,x0,odeset,ps);
plot(T1,X1(:,1),'r',T2,X2(:,1),'b--');
title('微分方程的解','fontsize',18);xlabel('时间t','fontsize',15);
legend('T1','T2');
%习题6,第2题,子函数
function dx = wffc(t,x,flag,ps)
%微分方程的解
dx = zeros(2,1);
dx(1) = x(2);
dx(2) = ps*(1-x(1)^2)*x(2)-x(1);
end
运行结果:
第3、4题
代码实现:
%习题6,第3题(1)
num = [1,0.5];
den = [1,0.1];
sys1 = tf(num,den);
z = [];
p = [0,-2,-10];
k = 20;
sys2 = zpk(z,p,k);
sys3 = series(sys1,sys2);
sys4 = feedback(sys3,1,-1);
%习题6,第3题(2)
subplot(1,2,1)
step(sys4);%计算系统对单位阶跃输入的响应
%习题6,第3题(3)
[u,t] = gensig('square',30,60);
subplot(1,2,2)
lsim(sys4,'r',u,t);%计算系统对任意输入的响应
运行结果1:
>> sys4
sys4 =
20 (s+0.5)
-------------------------------------------
(s+10.23) (s+0.8195) (s^2 + 1.052s + 1.193)
Continuous-time zero/pole/gain model.
运行结果2:
代码实现:
%习题6,第4题(1)
num = 1;
den = [1,0.2,1.01];
sys = tf(num,den);
subplot(1,2,1)
step(sys);
%习题6,第4题(2)
sys1 = c2d(sys,0.3,'zoh');%传递函数离散
[num1,den1] = tfdata(sys1,'v');%离散后提取分子分母
subplot(1,2,2)
dstep(num1,den1);
运行结果: