查看: 2570|回复: 13|关注: 0

[已解决] MATLAB求零点和极点问题

[复制链接]

入门

60 麦片

财富积分


50500


26

主题

94

帖子

2

最佳答案
本帖最后由 谱宇 于 2019-5-6 15:42 编辑

各位大神,

1、对于已知传递函数,如何求其零极点?例如下面这个函数,请问(1)如何求解 TF 的零点和极点?(2)如何提取 TF 的分子 num 和 分母 den?(希望能够直接提取出,例如 num = [0.0234  -0.025   0.0569  -0.2733  -0.294   0.394   0.521], den = [   0.014  -0.113   0.378  -0.14  -0.714  -2.81   1])

  1. num = 0.52114 * (s - 0.4342) * (s-0.7116) * (s^2 + 1.786*s + 0.9456) * (s^2 + 0.1152*s + 0.1538);
  2. den = (s-3.048) * (s-0.2834) * (s^2 - 0.2973 * s + 0.04568) * (s^2 + 0.818 * s + 0.3544);
  3. TF = num/den;
复制代码

2、如下函数,如何求解其零极点?

  1. num = 3*s^5 + 4*s^4 + 12*s^3 + 19*s^2 + 18*s + 10;
  2. den = 20*s^5 + 2*s^4 + 22*s^3 + 23*s^2 + 17*s + 6;
  3. TF = num/den;
复制代码

因为不希望用手算的方法,得出num和den,希望能够用语句直接得到num和den的值。

入门

60 麦片

财富积分


50500


26

主题

94

帖子

2

最佳答案
 楼主| 发表于 2019-5-6 14:20:44 | 显示全部楼层
麻烦大神看一下,谢谢各位!

MATLAB 基础讨论
版块优秀回答者

中级

985 麦片

财富积分


5001500


0

主题

1557

帖子

215

最佳答案
  • 关注者: 37
发表于 2019-5-6 14:29:32 | 显示全部楼层
谱宇 发表于 2019-5-6 14:20
麻烦大神看一下,谢谢各位!

你这代码有问题吧!我之前没接触过传递函数!
未定义函数或变量 'ss2sym'。
这是你自己定义的函数吗

MATLAB 基础讨论
版块优秀回答者

中级

985 麦片

财富积分


5001500


0

主题

1557

帖子

215

最佳答案
  • 关注者: 37
发表于 2019-5-6 15:09:16 | 显示全部楼层
呃,不知道你是怎么想的!!!你把完整代码传上来呀,我都不知道你方程什么类型,我怎么解决呢!普通的方程求零点fzero可以吗?极点是函数的二次导数为零点吗?!,关于提取分母分子,可以试试simplify,factor等函数吧

入门

60 麦片

财富积分


50500


26

主题

94

帖子

2

最佳答案
 楼主| 发表于 2019-5-6 15:43:32 | 显示全部楼层
WarnerChang 发表于 2019-5-6 15:09
呃,不知道你是怎么想的!!!你把完整代码传上来呀,我都不知道你方程什么类型,我怎么解决呢!普通的方程 ...

大神,感谢您的回复,我已经将问题更新。

MATLAB 基础讨论
版块优秀回答者

中级

985 麦片

财富积分


5001500


0

主题

1557

帖子

215

最佳答案
  • 关注者: 37
发表于 2019-5-6 15:52:12 | 显示全部楼层
采用numden函数就可以分别提取分子和分母,求解零点的函数可以试试fzero函数,还有你的极点我不太明白,是复变函数中的极点,还是函数二阶导为零的点呢?

MATLAB 基础讨论
版块优秀回答者

中级

985 麦片

财富积分


5001500


0

主题

1557

帖子

215

最佳答案
  • 关注者: 37
发表于 2019-5-6 15:54:12 | 显示全部楼层
[u d]= numden(expand(num/den))

入门

60 麦片

财富积分


50500


26

主题

94

帖子

2

最佳答案
 楼主| 发表于 2019-5-6 16:43:51 | 显示全部楼层
WarnerChang 发表于 2019-5-6 15:54
= numden(expand(num/den))

非常感谢,的确可以的,但是跟平时常用的 num 和 den 还有点差别。这里输出的 num 和 den 无法直接运算,后续步骤若用到其他函数例如pzmap,就会报错,例如下面这个例子:

  1. num = 0.52114 * (s - 0.4342) * (s-0.7116) * (s^2 + 1.786*s + 0.9456) * (s^2 + 0.1152*s + 0.1538);
  2. den = (s-3.048) * (s-0.2834) * (s^2 - 0.2973 * s + 0.04568) * (s^2 + 0.818 * s + 0.3544);
  3. TF = num/den;
  4. [num1 den1]= numden(expand(num/den))
  5. [p2 z2] = pzmap(num1,den1)
复制代码

  1. num1 = [1 2 2 1];
  2. den1 = [1 4 8 8];
  3. [p2 z2] = pzmap(num1,den1)
复制代码


大神有方法输出num和den直接能够用于后续计算吗?例如后续使用pzmap

MATLAB 基础讨论
版块优秀回答者

中级

985 麦片

财富积分


5001500


0

主题

1557

帖子

215

最佳答案
  • 关注者: 37
发表于 2019-5-6 16:50:17 | 显示全部楼层
谱宇 发表于 2019-5-6 16:43
非常感谢,的确可以的,但是跟平时常用的 num 和 den 还有点差别。这里输出的 num 和 den 无法直接运算, ...

嗯,可以转化为数值,但是每段代码都针对每一次的符号表达式,也很麻烦

论坛优秀回答者

18

主题

1990

帖子

421

最佳答案
  • 关注者: 81
发表于 2019-5-7 15:00:48 | 显示全部楼层 |此回复为最佳答案
pole, zero,和tf的Denominator, Numerator属性

批注 2019-05-07 145846.png
多看帮助文档
说明你的matlab版本
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表