2015-05-28 16 views
0

我有以下代碼: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.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) 

我知道我可以迭代循環並形成一個字符串變量,但我想知道是否有更好的方法來做到這一點。

回答

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格式說明符強制它在值爲正時添加+符號。

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循環將是最好的(最易讀的)解決方案。

+0

不完全。該方法在答案中生成一些冗餘項。上面的解決方案很整潔。無論如何感謝貢獻。 – Bababarghi