基于MATLAB机电系统动态仿真部分习题

本文档详细解析了MATLAB中的仿真习题,涉及传递函数模型的表示、零极点模型、状态空间转换、系统串联与并联、微分方程求解及控制系统响应分析。通过实例展示了如何在MATLAB中实现各种系统模型的创建和操作。
摘要由CSDN通过智能技术生成

习题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\,. e2tsint.
其中,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];%得到题6A矩阵
  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);

运行结果:
在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值