2013-05-22 28 views
3

我有兩個像這樣循環的所有組合:MATLAB - 使用for循環找到X^2 + Y

for x = 1:1:15 
    for y = 1:1:15 
     values(x,y) = x^2 + y 
    end 
end 

這讓我算算X^2 + Y x和y的每個組合如果它們是整數。

但是,如果我還想計算小數點的x^2 + y怎麼辦?

因此,像這樣:

for x = 0:0.1:15 
    for y = 0:0.1:15 
     ????? = x^2 + y 
    end 
end 

誰能幫我看看,可以計算的所有可能性的方法X^2 + Y如果X和Y是小數所以不能再作爲索引引用?

回答

3

用途:

[x y] = ndgrid(0:0.1:15); 
values = x.^2 + y; 

問題與其他答案:

  1. @伊尼戈的答案會改變相比,你最初的例子的xy順序(通過使用meshgrid而不是ndgrid
  2. @ NominSim的回答必須去額外的努力,從x
  3. 得到d_x @ mecid的回答必須單獨計算列和行(也有在MATLAB沒有++運算符)。如果我要去@ mecid的路線,我會使用以下內容。
x = 0:.1:15; 
y = 0:.1:15; 
values = zeros(numel(x),numel(y)); 
for xnum = 1:numel(x) 
    for ynum = 1:numel(y) 
     values(xnum,ynum) = x(xnum)^2 + y(ynum); 
    end 
end 

由於上meshgridndgrid之間的差而產生的一些討論,從文檔(內MATLAB,而不是在在線文檔):

meshgrid相似,但ndgrid前兩個輸入和輸出參數的順序被切換(即,[X,Y,Z] = meshgrid(x,y,z)產生與[Y,X,Z] = ndgrid(y,x,z)相同的結果)... meshgrid也是有限的2D或3D。

+1

+1我喜歡使用'ndgrid'而不是'meshgrid'。我已經多次遇到笛卡爾與行/列問題。下面是一個很好的鏈接,解釋'ndgrid'和'meshgrid'之間的區別:http://www.mathworks.com.au/support/solutions/en/data/1-1AOGG/index.html?product=SL&solution=1 -1AOGG –

+0

請注意,我對@ inigo的回答的評論已過時,因爲在我回答之後,他從'[xy] = meshgrid'改爲'[yx] = meshgrid',這確實與'[xy] =相同ndgrid'。 – Ramashalanka

1

爲什麼不從1到151的整數循環,然後計算要使用的小數?那麼你仍然可以使用索引引用。

for x = 1:1:151 
    for y = 1:1:151 
     d_x = x/10.0 - 0.1 
     d_y = y/10.0 - 0.1 
     values(x,y) = d_x^2 + d_y 
    end 
end 

(原諒我,如果我的語法稍微偏離,有一段時間沒有使用MATLAB)。

+0

很確定你打算寫'values(x,y)= d_x^2 + d_y;'... – Floris

2
for x =1:0.1:15 
    for y=1:0.1:15 
    values(x*10-10, y*10-10) =x^2+y; 
    end 
end 
+0

我編輯了答案 – mecid

5

使用meshgrid,matlab的內置矩形網格在二維,並且沒有必要循環!

[y x]=meshgrid(0:0.1:15) 
values=x.^2+y 

想象這一點:

imagesc(values); 
title('values=x^2+y'); axis square 
xlabel('x'); ylabel('y'); colorbar; 
axis xy; 
set(gca,'XTick',1:10:151,'YTick',1:10:151); 
set(gca,'XTickLabel',0:1:15,'YTickLabel',0:1:15); 

enter image description here

編輯: mdgrid也蠻好唯一需要注意的一點是,[y x]=meshgrid...相同[x y]=ndgird...

+0

+1簡單,直截了當的答案。 (我也喜歡使用可視化...那個去哪了? –

+1

謝謝,我把它拿回來了... – 2013-05-22 04:37:11

+0

簡單而好的答案。我更喜歡'axis xy'到更復雜的'set(gca,'ydir','normal')'。更短... – Floris