这段代码有什么问题?没有间隔,只有一个Z功能完美,但我不能使它工作。 请帮忙。
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 :(得分:0)
你忘记了点...你应该考虑点乘法。最重要的是,您应该在for循环(简单解决方案)中添加它。还有另一种解决方案,代码行数较少。
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
答案 1 :(得分: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.