MATLAB 创建传递函数模型 - 躬耕南阳

时间:2024-02-24 07:26:00

MATLAB 创建传递函数模型

MATLAB 创建多项式的方式有两种:

  • 系数多项式
  • 符号多项式


1. 系数多项式

p = [an . . . a1 a0]

p_value = polyval(p, k)  % 计算自变量值为k时,多项式的值

r = roots(p)        % 计算多项式的根


2. 符号多项式

syms t           % 创建符号变量 t

p = t^2+2*t+1        % 创建符号多项式

p_value = subs(p, k)    % 计算自变量值为k时,多项式的值


3. 两种形式之间相互转换

sym2poly(p)       % 符号多项式→系数多项式 (包含为零的所有系数)

coeffs(p)          % 符号多项式→系数多项式 (除去为零的所有系数)

poly2sym(p)       % 系数多项式→符号多项式


 

分式有理函数的裂项形式如下:

pi为系统的极点,ci为常数,ks为增益系数。


分式有理函数与裂项形式之间的相互转换

[c, p, k] = residue(num, den)    % num, den 分别为有理函数的分子和分母

[num, den] = residue(c, p, k)    % 裂项形式→分式函数形式


 

传递函数线性定常系统,在零初始条件下,以复数为变量的有理函数。

描述的是系统输入与输出之间的关系,如下所示:

 


创建传递函数命令一

sys = tf(num, den)

创建一个时间连续传递函数。


创建传递函数命令二

sys = zpk(z, p, k)      % z, p 均为阵列,包含系统所有的零、极点,k 为增益系数。

              % 当系统传递函数没有零点时,仅输入 z = [ ]

创建一个“零-极点”形式的传递函数,如下所示:

能直观地看出系统的零点、极点。

创建传递函数命令三

s = tf(\'s\')        % 创建多项式形式传递函数的变量 s

s = zpk(\'s\')       % 创建系数形式传递函数的变量 s

同样地,上述两种形式传递函数之间可以互相转换:

s = tf(\'s\')        % 将原本系数形式的传递函数的变量 s 转换为多项式形式

s = zpk(\'s\')       % 将原本多项式形式的传递函数的变量 s 转换为系数形式

此种方法类似于创建符号多项式,先用“syms t”声明一个符号变量 t,再创建多项式。

主要用于子系统传递函数,而系统总传递函数未知的场景中。


互相转换方法

分式形式(多项式形式)⇌ “零点-极点-增益”形式(系数形式)

1. 分式形式“零点-极点-增益”形式

sys = tf(num, den)      % 分式形式传递函数

sys_zpk = zpk(sys)    % 分式形式的传递函数→“零点-极点-增益”形式的传递函数

或者

[z, p, k] = tf2zp(num, den) % tf2zp(num, den) 输入“分子-分母”,返回传递函数的“z, p, k”

sys = zpk(z, p, k)      % 即上面的“创建传递函数命令二

2. “零点-极点-增益”形式→分式形式

sys = zpk(z, p, k)

sys_tf = tf(sys)       % “零点-极点-增益”形式的传递函数→分式形式的传递函数

或者

[num, den] = zp2tf(z, p, k)   % zp2tf(z, p, k) 输入“z, p, k”,返回传递函数的“分子-分母”

sys = tf(num, den)    % 即上面的“创建传递函数命令一


 


练习题 1:

用tf(num, den)命令创建如下所示传递函数,并将其转换为“零点-极点-增益”形式。

解答:

num = [1 1];
den = [1 3 1];
sys = tf(num, den)
sys_zpk = zpk(sys)

 

练习题 2:

用zpk(z, p, k)命令创建如下所示传递函数,并将其转换为分式形式。

解答:

z = [-2];
p = [-1 -1 -3];
k = 1;
sys = zpk(z, p, k)
sys_tf = tf(sys)

 

练习题 3:

用创建传递函数的变量方式,创建不同形式的传递函数。

解答:

s = tf(\'s\');
sys = (s+1)/(s^2+2*s+1)

s = zpk(\'s\');
sys = (s+1)/(s^2+2*s+1)