两个不同区间的2个变量的Matlab函数

时间:2014-03-28 11:57:02

标签: matlab

这段代码有什么问题?没有间隔,只有一个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');

2 个答案:

答案 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.