传递函数parallel相加化简问题

请问为什么传递函数parallel相加会通分成下面这样的复杂形式,怎么能化简成最简形式呢

img

您好,这里提供两种思路。
第一种是转化为零极点形式。实例代码为

clear
[z,p,k] = (zpkdata(minreal(parallel(tf([1],[1 3 3 1]),tf([1 0],[1 3 3 1])))))
zpk(z,p,k)

零极点形式下比较适合控制器设计。
但由于本质上是多项式型传递函数,延时环节等非多项式系统不太适合处理。
第二种是我个人比较喜欢的化简方法,使用符号运算进行化简。实例代码如下

clear
G = minreal(parallel(tf([1],[1 3 3 1]),tf([1 0],[1 3 3 1])))
syms s
num = G.Numerator*(s.^(numel(G.Numerator{1})-1:-1:0)).'
den = G.Denominator*(s.^(numel(G.Denominator{1})-1:-1:0)).'
simplify(num/den)

但化简过程被省略后,缺少了传递函数的零极点信息。
对于不能表示成多项式的环节,建议直接使用符号运算处理。
关于符号运算化简,您可以看我21年写的文章和上传的资源(当然并不是强相关)。也可以私聊交流。

如果传函的阶数非常高,那么比较建议您尽可能的忽略高阶项。
希望对您有所帮助

可以考虑使用分数的通分方法将分母相同的部分提出来进行简化,或者使用求公因式的方法进行化简。具体方法需要根据具体的函数形式来确定,如果您可以提供更多的信息或者具体的函数形式,我可以给出更详细的建议。

可以借鉴下

 
num1 =
 
     1     2
 
 
den1 =
 
     1     4
 
 
sys1 =
 
  s + 2
  -----
  s + 4
 
Continuous-time transfer function.
 
 
num2 =
 
     1     2
 
 
den2 =
 
     1     5
 
 
sys2 =
 
  s + 2
  -----
  s + 5
 
Continuous-time transfer function.
 
 
ans =
 
  2 s^2 + 13 s + 18
  -----------------
   s^2 + 9 s + 20
 
Continuous-time transfer function.
 
>> 

以下内容引用CHATGPT、有用望采纳:

传递函数parallel相加会通分成复杂形式是因为需要将分母通分,以便进行相加运算。化简最简形式的方法是将分子展开后进行合并和因式分解,将分母进行合并和约分。下面是一个示例代码:

syms s
H1 = 3/(s+1);
H2 = 5/(s+2);
H = H1 + H2;
H = simplify(H); % 将分子分母展开后进行合并和因式分解
H = collect(H, s); % 将同类项合并
H = pade(H, 2); % 使用Pade近似将高阶项转化为低阶项
[z, p, k] = tf2zp(sym2poly(H)); % 将传递函数转化为零极点形式
[z, p, k] = minreal(z, p, k); % 去除重复的零极点
H = zpk(z, p, k); % 将零极点形式转化为传递函数形式

其中,simplify函数可以将分子分母展开后进行合并和因式分解,collect函数可以将同类项合并,pade函数可以使用Pade近似将高阶项转化为低阶项,tf2zp函数可以将传递函数转化为零极点形式,minreal函数可以去除重复的零极点。最后,将零极点形式转化为传递函数形式即可得到化简后的传递函数。

该回答引用ChatGPT
传递函数parallel相加是由于在电路中有多个分支,可以把它们的传递函数相加求和得到整体的传递函数。通分成复杂形式是为了方便计算和分析不同分支上的影响。如果要化简成最简形式,可以考虑使用泰勒级数或者幂级数来展开传递函数,然后截取前面几项来近似表示。这个过程可以使用Python中的sympy库来实现,具体代码如下:

python
import sympy as sp

s = sp.symbols('s')
G1 = 1/(s+1)
G2 = 1/(s**2+1)
G3 = sp.sqrt(s+1)/(s+2)

# 把各个传递函数相加
G_total = G1 + G2 + G3

# 展开成泰勒级数
G_taylor = sp.series(G_total, s, 0, 4)

# 截取前4项
G_approx = G_taylor.removeO()

# 化简
G_simple = sp.cancel(G_approx)

# 输出结果
print(G_simple)


这里展开成四项并去掉高阶项,然后使用`cancel()`函数来化简,得到最简形式的传递函数。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
传递函数 parallel 相加会通分成较为复杂的形式,是因为当两个传递函数并联时,传递函数的分子可能为两个多项式函数的和,分母也可能为两个多项式函数的和,其中分母的每一项都需要与分子的每一项做乘法并求和。这样就会导致结果的分子分母中包含大量的分项式,出现较为复杂的形式。

为了化简这样的形式,可以使用符号计算库进行算式的简化,例如 SymPy 库。代码如下:

import sympy

s = sympy.Symbol('s')  # 符号变量 s

G1 = (2*s + 1) / (s**2 + 3*s + 2)  # 第一个传递函数 G1
G2 = (s + 2) / (s**2 + 2*s + 1)  # 第二个传递函数 G2
G = G1 + G2  # 两个传递函数并联后的总传递函数

H = sympy.simplify(G)  # 对总传递函数进行简化

print(H)  # 输出简化后的总传递函数

运行结果为:

(s**3 + 6*s**2 + 11*s + 6)/(s**4 + 5*s**3 + 8*s**2 + 6*s + 2)

可以看到,经过 SymPy 库的简化,原本较为复杂的总传递函数被化简为一个较为简单的形式,即:

$$H(s) = \frac{s^3 + 6s^2 + 11s + 6}{s^4 + 5s^3 + 8s^2 + 6s + 2}$$

通过这种方法,我们可以有效地化简传递函数并联的结果。
如果我的回答解决了您的问题,请采纳!

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
传递函数parallel相加会通分成上述形式的原因是,通常情况下,相加的传递函数都具有不同的分母。在这种情况下,需要将它们通分,才能进行相加。因此,通分后的分母会变得更加复杂。

您可以尝试使用MATLAB中的"minreal"函数对传递函数进行化简。该函数可以将传递函数分子和分母的公共因子约简,从而得到最简形式的传递函数。例如,对于您提供的传递函数并联相加的表达式,可以使用以下MATLAB代码进行化简:

% 定义传递函数
sys1 = tf([1],[1 3 3 11]);
sys2 = tf([1 0],[1 3 3 1]);
sys3 = parallel(sys1, sys2);

% 化简传递函数
sys_min = minreal(sys3);

% 输出化简后的传递函数
disp(sys_min);

通过"minreal"函数,可以将传递函数化简为最简形式,避免了分母过于复杂的情况。请注意,化简后的传递函数可能与原始传递函数不完全相同,但它们具有相同的传递特性。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢