Matlab-如何将多项式的根显示为相乘项?
我有以下代码:Matlab-如何将多项式的根显示为相乘项?,matlab,Matlab,我有以下代码: roots([0.00995 -0.02786 0.03611 -0.0293 0.01565 -0.005669 0.001274 -0.0001554]) 其结果如下: 1.0001e+00 + 0.0000e+00i 2.8235e-01 + 4.3896e-01i 2.8235e-01 - 4.3896e-01i 3.4409e-01 + 3.9169e-01i 3.4409e-01 - 3.9169e-01i 2.7349e-01 + 3.6892e-01i 2.7
roots([0.00995 -0.02786 0.03611 -0.0293 0.01565 -0.005669 0.001274 -0.0001554])
其结果如下:
1.0001e+00 + 0.0000e+00i
2.8235e-01 + 4.3896e-01i
2.8235e-01 - 4.3896e-01i
3.4409e-01 + 3.9169e-01i
3.4409e-01 - 3.9169e-01i
2.7349e-01 + 3.6892e-01i
2.7349e-01 - 3.6892e-01i
如何将多项式显示为单阶项的乘法,即:
(z-1.0001)(z-0.28235-0.43896i)(z-0.28235+0.43896i)(z-0.34409-0.39169i)(z-0.34409+0.39169i)(z-0.27349-0.36892i)(z-0.27349+0.36892i)
我知道我可以遍历循环并形成字符串变量,但我想知道是否有更好的方法来实现这一点。如果
r = roots([0.00995 -0.02786 0.03611 -0.0293 0.01565 -0.005669 0.001274 -0.0001554]);
然后
这仍将显示一个等于
0
的组件。如果您想摆脱这种情况,那么我认为for循环将是最好(可读性最高)的解决方案。您需要在每个元素上分别应用num2str
:
cell2mat(strcat('(z', arrayfun(@(x) num2str(x, '%+f'), -r, 'uni', 0), ')')')
给予
您可以对整个数组应用num2str
,但由于它将整个数组视为复数,因此可以得到实根的虚部
当值为正值时,使用
%+f
格式说明符强制它添加+
符号 不完全是。这种方法会在答案中产生一些冗余项。上述溶液更为整洁。无论如何,谢谢你的贡献。
cell2mat(strcat('(z', arrayfun(@(x) num2str(x, '%+f'), -r, 'uni', 0), ')')')
(z-1.000147)(z-0.282353-0.438959i)(z-0.282353+0.438959i)(z-0.344086-0.391687i)(z-0.344086+0.391687i)(z-0.273487-0.368920i)(z-0.273487+0.368920i)