MATLAB的Solve函数巧求信号流图传递函数

这几天在复习MATLAB和自控相关的一些操作。看到信号流图那一章节,不禁问自己,MATLAB那么强大,怎么帮助我们便捷地通过信号流图求出传递函数呢。

以老胡《自动控制原理(第六版)》P53页例题2-15为例子

MATLAB的Solve函数巧求信号流图传递函数_第1张图片

信号流图已经给出,我们直入主题。
Solve函数最方便的应用就是方程求解。如:

       syms x y
       [Sx,Sy] = solve(x^2 + x*y + y == 3,x^2 - 4*x + 3 == 0) returns

         Sx =
          1
          3

         Sy =
             1
          -3/2

那我们要用Solve求信号流图的传递函数,就必须输入一个方程组。仔细观察信号流图,不难得出要解的方程:
这里写图片描述
运行结果
MATLAB的Solve函数巧求信号流图传递函数_第2张图片

貌似没有问题,我们看看Cs/Rs 是什么?
MATLAB的Solve函数巧求信号流图传递函数_第3张图片

明显哪里出问题了,实际上算出的结果全部都是0,自然不能作除法。
问题根源在于solve最后的‘X1,X2,X3,Rs,Cs’ 把五个量全部作为待求量,必须拿出一个,用以表示Cs和Rs。这样拿出X3,结果变成了:
MATLAB的Solve函数巧求信号流图传递函数_第4张图片
结果中含有X3,明显也不对。原因在于老胡的这个信号流图最后的阱节点没有分离出来,如果稍作修改,令C(s)=X4,
MATLAB的Solve函数巧求信号流图传递函数_第5张图片
把solve的内容改成如下:
这里写图片描述
结果完全正确:
MATLAB的Solve函数巧求信号流图传递函数_第6张图片

总结

  1. solve函数最后的变量必须拿出一个不写,比如上面没有写X4,这样才能用X4表示各个变量。
  2. 方程数依然等于变量数。
  3. 阱节点一定要单独分离出来。

你可能感兴趣的:(自控)