Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab-如何将多项式的根显示为相乘项?_Matlab - Fatal编程技术网

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)