[英]Matlab - How to display roots of a polynomial as multiplied terms?
我有以下代碼:
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)
我知道我可以遍歷一個循環並形成一個字符串變量,但是我想知道是否有更好的方法可以做到這一點。
您需要在每個元素上分別應用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
格式說明符會在值為正數時強制其添加+
號。
如果
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循環將是最好的(最易讀的)解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.