2012-11-19 141 views
1

我想用matlab構建一個vandermonde matrixvandermonde矩陣matlab混淆

我輸入向量爲

t = [ 1 2 3 4 ]' 

我使用的輸出vander function是:

ans = 

1  1  1  1 
8  4  2  1 
27  9  3  1 
64 16  4  1 

現在,如果我沒有記錯問題的矢量的Vandermonde矩陣應該是:

1 1 1 1 
1 2 4 8 
1 3 9 27 
1 4 16 64 

現在我只是意識到我可以達到我想要的結果使用類似於:

>> fliplr(vander(t)) 

ans = 

1  1  1  1 
1  2  4  8 
1  3  9 27 
1  4 16 64 

謝謝。

+0

範德蒙德矩陣中列的順序隻影響一件事 - 即可能構建的結果模型中多項式係數的順序。一旦可以使用任何一種形式並開心,只要你知道什麼出來,以及如何解釋它。 – 2012-11-19 13:06:51

+1

正如一般的提示:看起來你可以用'bsxfun'(@power,t,0:numel(t)-1)創建一個比'vander'快一個數量級的數量級;'(或者如果你願意, bsxfun(@power,t,numel(t)-1:-1:0);')。 –

+0

複製粘貼「vander」的內容甚至更快。 –

回答

-1

只需將矩陣(左/右)翻轉即可獲得所需的矩陣。

+6

我不認爲轉座會起作用,因爲'轉置(vander(t))'會是[1 8 27 64; 1 4 9 16; 1 2 3 4; 1 1 1 1] – HebeleHododo

11

維基百科和Mathworld同意你的觀點。然而,MATLAB documentation說:

A =範德(V)返回Vandermonde矩陣的矢量v的其列是權力 ,即,A(I,J)= V(I)^(NJ) ,其中n =長度(v)。

我不知道爲什麼The Mathworks這樣做。您可以使用fliplr來獲得所需的結果。

+5

TMW之所以這樣做是因爲他們希望係數的順序在polyfit和polyval等工具中減少。這使得他們的所有工具一致,使用多項式和分段多項式(樣條,pchip等)爲什麼有人按照這個順序首先是有趣的,但可能需要直接問Cleve或Carl來獲得他們的輸入,如他們肯定是罪魁禍首。我想知道它是否可能與解決方案中的列置換有關,但這只是一個瘋狂的猜測。 – 2012-11-19 13:02:52