MATLAB: Surf plot using meshgrid

matrix editing

Good day
Pleas advise for code error. First figure is OK. 2nd one is incorrect.
Whei statments z<100 and 100<=z<200 are not taken in to accounte?
x=0:300;
y=x;
[xx,yy]=meshgrid(x,y);
z=(xx+yy)/2;
figure
surf(x,y,z)
if z<100;
k=z;
elseif z>=100 & z<200;
k=100;
else
k=z-100;
end
figure
surf(x,y,k)

Best Answer

  • As z is an array, the following two statements
    if z<100
    and
    elseif z>=100 & z<200
    will only be true if every element within z satisfies the conditions, so you always end up with the third result (k=z-100).
    To apply the if elseif statements to every element within z, try
    x=0:300;
    y=x;
    [xx,yy]=meshgrid(x,y);
    z=(xx+yy)/2;
    figure
    surf(x,y,z,'EdgeColor','none')
    k = z;
    k(z>=100) = z(z>=100)-100;
    k(z>=100&z<200) = 100;
    figure
    surf(x,y,k,'EdgeColor','none')