我有以下代码:
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
我知道我可以遍历一个循环并形成一个字符串变量,但我想知道是否有更好的方法。
答案 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循环将是最好的(最可读的)解决方案。