簡體   English   中英

Matlab-如何將多項式的根顯示為乘法項?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM