2014-03-28 45 views
-1

這段代碼有什麼問題?沒有間隔和只有一個Z功能完美工作,但我不能讓它工作。 請幫忙。以2個不同間隔的2個變量的Matlab函數

X=[0:0.01:1] 
Y=[0:0.08:8] 

[X,Y] = meshgrid(X,Y) 
if X-0.08*Y <0.2 
Z=1-(10*(X-0.08*Y)-1).^2 
else 
    Z=X*Y; 
end 

mesh(X,Y,Z); 
title('a mesh plot of a function of two variables'); 
xlabel('x'); ylabel('y'); zlabel('z'); 

回答

0

你忘了放點...你應該考慮點倍增。最重要的是,你應該把它加入for-loop(簡單的解決方案)。有更少的代碼行是另一種解決方案。

X-0.08*Y <0.2 

總是在if條件中導致「錯誤」。你必須添加一個點和循環。

X=[0:0.01:1] 
Y=[0:0.08:8]  
[X,Y] = meshgrid(X,Y)  
Z=zeros(size(X)); 
for ii=1:size(Z,1) 
    for jj=1:size(Z,2) 
    if X(ii,jj)-0.08*Y(ii,jj) <0.2 
     Z(ii,jj)=1-(10.*(X(ii,jj)-0.08.*Y(ii,jj))-1).^2; 
    else 
     Z(ii,jj)=X(ii,jj).*Y(ii,jj); 
    end 
    end 
end 
0

試着做更多的Matlab-ish並且不使用循環。

X=[0:0.01:1]; 
Y=[0:0.08:8]; 

[X,Y] = meshgrid(X,Y); 

% Your else statement 
Z=X*Y; 

% The if-portion 
[i,j]=find(X-0.08*Y <0.2); 
Z(i,j)=1-(10*(X(i,j)-0.08*Y(i,j))-1).^2; 

mesh(X,Y,Z); 
title('a mesh plot of a function of two variables'); 
xlabel('x'); ylabel('y'); zlabel('z'); 

正如Wli所建議的,如果您希望逐元素乘法,您可能需要Z = X. * Y。

+0

感謝您輸入。但是X * Y不會給出與X相同的結果。* Y,考慮到if語句,我不認爲他/她想要進行矩陣乘法。 – Wli

+0

是的。我不確定需要什麼,所以我就這樣離開了。 – bornruffians