MATLAB中求传递函数代码

今天MATLAB发生了一件非常稀奇的事,采用扩展描述函数法对LLC谐振变换器进行小信号建模时,由于建出传递函数比较复杂,分子是6阶,分母是7阶,然后进行画bode图时,采用s=zpk('s')时,即用零极点表示形式,发现分子自动化简为5阶,分母变成了4阶,虽然低频阶段一样,但是在高频阶段与我本身原始的传递函数非常不同,甚是不解,经查阅资料,这位仁兄也出现了这个问题,https://www.ilovematlab.cn/thread-528695-1-1.html,现在还不知道原因,目测可能是传递函数较为复杂,系统自动忽略了好几阶,但是,这不是闹呢吗?这样咋行,于是,我采用s=tf('s'),bode(w)形式就画出了正确的bode图,然后w1=zpk(w),此处的w化简的零极点形式也对,但就是一开始进行bode(w)不对,下面放图

这是我的计算出来的传递函数

w=[ (1111526900521297989143889.0*s^6 + 1.7437085492236794654793956803548e42*s^5 + 1.8393191660914236041880562807788e50*s^4 + 2.6822260623568432590070035520044e56*s^3 + 5.8021392115569656298893197366969e60*s^2 - 1.35046335131135770412751911276e65*s - 1.7968543059018822109219611230821e66)/(100000000000000000000000000000.0*s^7 + 3.4400078148230019431421169429086e38*s^6 + 4.7842904416012526220714187101147e46*s^5 + 9.1796901337779257182320554823251e53*s^4 + 1.5471453043954728734754557971307e57*s^3 + 1.6524946882706120801498451092459e64*s^2 + 1.6813846183780374328516518788862e66*s + 7.8892607345760140816093303165264e63),

采用s=zpk(‘s’)画出的bode图

MATLAB中求传递函数代码_第1张图片

在MATLAB运行窗口出现的化简w为,分子5阶,分母4阶

  w=1.8995e-12 (s+1.04e08) (s+1.456e06) (s+3.638e04) (s-1.406e04) (s+13.3)/((s+101.7) (s+0.004692) (s^2 + 1584s + 1.8e10))

这完全没问图,很符合上述的bode图,高频段翘上去了,但是,我的实际传递函数肯定不是这样的

然后接下来将脚本开头的s=zpk('s')换成s=tf('s'),进行bode w,得出下图

MATLAB中求传递函数代码_第2张图片

 

可以看出高频段完全不同,这才是我实际的bode图

然后进行w1=zpk(w),可得零极点形式的w

   1.1115e-05 (s+1.569e18) (s+1.04e08) (s+1.456e06) (s+3.638e04) (s-1.406e04) (s+13.3)
  -------------------------------------------------------------------------------------
  (s+3.296e09) (s+1.214e08) (s+2.295e07) (s+101.7) (s+0.004692) (s^2 + 645.4s + 1.8e10)

此处可以看出完全没有降阶,完全就是化简出零极点,我实在不明白,开头s=zpk('s')为什么化简出那样的?MATLAB小白一枚,希望大神在下面解惑!感谢!!!!

 

你可能感兴趣的:(求解)