2012-01-28 90 views
4

我想創建一個矩陣,看起來像這樣:Matlab的for循環改變每一行和列

[1 x x^2 x^3 x^4 x^5] 
[1 y y^2 y^3 y^4 y^5] 
[1 z z^2 z^3 z^4 z^5] 

等。這是會具有X,Y,Z的我的基瓦萊斯矩陣,K等是Orig

Orig = [ x y z k]; 

和我的起始基質將是

A = [1 x x^2 x^3 x^4 x^5]; 

我的下一行代碼是

for i=(2:10) 
    A(i)=A(i)^A(:,i) 
end 

for循環正確地更改每一行必須得提高了電源,但它不會去下一個值在我Orig矩陣。

所以基本上,我需要告訴Matlab的一種方式,內for循環,停止使用Orig(1,1),去Orig(1,2)爲第2行。

+0

類似的問題:Matlab的產生矩陣(http://stackoverflow.com/q/7547080/97160) – Amro 2012-01-28 23:29:31

回答

8

您可以用雙環

Orig = [x y z k]; 
exponent = [0 1 2 3 4 5]; 

%# preassign output to speed up loop 
output = zeros(length(Orig),length(exponent)); 

%# loop over all elements in Orig 
for r = 1:length(Orig) 
%# loop over all exponents 
for c = 1:length(exponent) 
output(r,c) = Orig(r)^exponent(c); 
end 
end 

然而做到這一點,這是不是你通常在MATLAB程序這種方式。

相反,你會複製這兩個Origexponent,並做計算於一體,向量操作:

%# transpose orig so that it is a n-by-1 array 
repOrig = repmat(Orig',1,length(exponent); %'# 
repExp = repmat(exponent,length(Orig),1); 
%# perform the exponent operation in one go 
output = repOrig .^ repExp; %# note the ".", it applies operations element-wise 

自從幾年,出現了此快捷方式的版本,使用功能bsxfun 。這將自動執行我們在repmat以上所做的擴展,並且速度會更快。

output = bsxfun(@power, Orig', exponent); 
2

嘗試:

n = 5; 
OrigArranged = Orig'*ones(1,n); 
PowerMat = ones(length(Orig),1) * [1:n]; 
A = OrigArranged.^PowerMat; 

我會再測試Octave已安裝,但它應該可以工作。

編輯:我已經糾正了一些小錯誤,現在的作品

+0

謝謝你的回覆! – Michael 2012-01-28 22:37:49