有没有办法防止MATLAB的simple()/ numden()函数取消相等的分子/分母项?

时间:2019-02-12 05:56:37

标签: matlab

我试图找到给定分数G的分母,但是我找不到一种方法来使用MATLAB的内置函数,而又不会过度简化分数并丢失重要信息。

我尝试使用MATLAB的内置命令“ numden”,“ simplify”和“ simplifyFraction”,但它们始终取消分子和分母的相等项。通常这是可以的,但是对于我的应用程序,我需要知道分母中可能导致函数G出现孔/不稳定性的所有值。

我尝试研究“ IgnoreAnalyticConstraints”等功能中的其他约束,但它们似乎无法解决问题。我简化了代码,以通过下面的当前尝试将我的问题隔离在下面:

syms 's'
G = 2/(s - 1) + 1/(s + 1) - 4/((s - 1)*(s + 1));
[n,d]=numden(G)
G_simp=simplify(G)
G_simpC=simplify(G,'IgnoreAnalyticConstraints',false)
G_simpF=simplifyFraction(G)

Output:
n = 3
d = s + 1
G_simp = 3/(s + 1)
G_simpC = 3/(s + 1)
G_simpF = 3/(s + 1)

这是分数输入的示例: G = 2 /(s-1)+ 1 /(s +1)-4 /((s-1)*(s +1))

可简化为: G = 3 *(s-1)/((s-1)*(s + 1))。 <所需结果

我试图将分数保留为简化形式,但是内置命令将取消(s-1)项,从而导致: G = 3 /(s +1)。 <实际结果

1 个答案:

答案 0 :(得分:1)

您可以使用控制系统工具箱:

s= tf([1 0],1);
G = 2/(s - 1) + 1/(s + 1) - 4/((s - 1)*(s + 1))
zpk(G)

代码s= tf([1 0],1);创建一个变量s。它包含一个表示传递函数f(s)=s的传递函数对象。线

G = 2/(s - 1) + 1/(s + 1) - 4/((s - 1)*(s + 1))

创建一个包含相应传递函数的传递函数对象。 zpk(G)将此功能转换为零/极/增益形式。

上面的代码的结果是

  

G =

3 s^3 - 3 s^2 - 3 s + 3   
-----------------------
  s^4 - 2 s^2 + 1   
     

连续时间传递函数。

     

ans =

3 (s+1) (s-1)^2   
---------------   
(s+1)^2 (s-1)^2   
     

连续时间零/极/增益模型。