2016-03-18 4 views
0

Ich möchte eine Funktion machen, die ein Mesh-Plot machen wird. Start x, y; dx, dy und end x, y werden in eine Funktion eingegeben. Z sollte wie es berechnet werden:Matlab-Mesh-Plot. Spezifische Funktion für z. Z muss eine Matrix sein

if x>y 
    z =x^2-sin(x); 
elseif x==y 
    z = 3; 
else 
    z = 2*x+2*x; 
end 

ich diesen Code gemacht haben:

function []= mes(xp,xk,dx,yp,yk,dy) 
x=[xp:dx:xk]; 
y=[yp:dy:yk]; 
zv=[]; 

for i=1:numel(x) 
     if x>y 
      z=x(i)^2-sin(y(i)); 
     elseif x(i)==y(i) 
      z=3; 
     else 
      z=2*x(i)+2*y(i);  
     end 
    zv=[zv z]; 
end 
[X,Y]=meshgrid(x,y); 
figure 
x 
y 
zv 
mesh(X,Y,zv) 

und bekam diese Fehlercodes:

Error using mesh (line 70) 
Z must be a matrix, not a scalar or vector. 

Error in mes (line 21) 
mesh(X,Y,zv) 

Gleichung für z scheint zu funktionieren. Ich weiß, dass es viele similare Probleme gibt, wie meins, aber wenn ich eine einfache Gleichung für z aufstelle, funktioniert es, aber nicht mit diesem.

+0

'zv = Umformen (zv, [Länge (x) Länge (y)])'? –

+0

Funktion [] = mes (xp, xk, dx, yp, yk, dy) x = [xp: dx: xk]; y = [yp: dy: yk]; [x, y] = Gittergitter (x, y); zv = []; für i = 1: numel (x) wenn x> y z = x (i)^2-sin (y (i)); anderes x (i) == y (i) z = 3; sonst z = 2 * x (i) + 2 * y (i); Ende zv = [zv z]; Ende zv = reshape (zv, [Länge (x) Länge (y)]) Figur mesh (zv) Ja, Mesh-Plot zeigt, aber es scheint seltsam, nicht 3d zu sein. @ ander-biguri –

+0

Cosnider akzeptiert die Antwort, wenn es geholfen hat –

Antwort

0

Verwendung Vektorisierung!

x=[xp:dx:xk]; 
y=[yp:dy:yk]; 
[X,Y]=meshgrid(x,y); 

z=zeros(size(X)); 

z=2*X+2*Y; 
z(X>Y)=X((X>Y)).^2-sin(Y((X>Y))); 
z(X==Y)=3; % Careful with floating points!! maybe abs(X-Y)<0.00001 ? 

mesh(X,Y,Z);