我试图找到给定分数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)。 <实际结果
答案 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
连续时间零/极/增益模型。