2014-03-28 43 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