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



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

我试过使用MATLAB的内置命令"numden"、"simple"one_answers"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-2)*(s+1))&lt-期望结果

我试图将分数保持在这种简化的形式,但内置命令将取消(s-1)项,导致:G=3/(s+1)&lt-实际结果

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

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

代码CCD_ 1创建一个变量CCD_。它包含一个表示传递函数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   

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

最新更新