Matlab - 如何将多项式的根显示为乘法项?

时间:2015-05-28 12:04:11

标签: matlab

我有以下代码:

int a[5] = { 5, 1, 15, 20, 25 };
int i, j, m;
i = ++a[1];
j = a[1]++;
m = a[i++];
printf("%d, %d, %d", i, j, m);
_getch();

结果如下:

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

我知道我可以遍历一个循环并形成一个字符串变量,但我想知道是否有更好的方法。

2 个答案:

答案 0 :(得分:2)

您需要在每个元素上单独应用num2str

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)

你可以在整个数组上应用num2str但是你会得到真实根的想象部分,因为它认为整个数组是复数值的。

使用%+f格式说明符强制它在值为正时添加+符号。

答案 1 :(得分:0)

如果

r = roots([0.00995 -0.02786 0.03611 -0.0293 0.01565  -0.005669 0.001274 -0.0001554]);

然后

sprintf('(z-%.5f%+.5fi)',[real(r),imag(r)]')

这仍将显示等于0的组件。如果你想摆脱它,那么我认为for循环将是最好的(最可读的)解决方案。