2017-10-25 32 views
-1

Ich versuche, einen 3D-Plot zu machen, aber ich bekomme einen Fehler und ich bin nicht sicher, wie man es löst. Ich weiß, dass es andere Fragen gibt, die meinen ähnlich sind, aber ich habe einige von ihnen ausprobiert und es hat nicht funktioniert.Z muss eine Matrix sein, kein Scalaqr oder Vektor, Matlab

fh = sin(x)*cos(y).^3 + 2*cos(x).^5*sin(y) 

[X,Y] = meshgrid(1:0.5:10,1:20); 

surf(X,Y,fh) 

Error using surf (line 82) 
Z must be a matrix, not a scalar or vector. 
+0

Bitte senden Sie sich ein minimales Beispiel mit Code, der ausgeführt werden kann. Die erste Zeile gibt einen Fehler, weil 'x' und' y' nicht definiert sind. –

+0

@LuisMendo Nachdem ich einige einfache 3D-Plot-Beispiele betrachtet habe, sah ich nicht, dass sie irgendwo X und Y definieren. Seit meinem ersten 3D-Plot suche ich Hilfe, um diese Funktion, die ich habe, grafisch darstellen zu können. Das ist also der Code, den ich habe. – AppCodah

Antwort

0

Die Z Daten in diesem Fall ist, was Sie surf als fh sind vorbei. Es sieht aus wie fh ist die Funktion, die Sie zum Berechnen Z verwenden möchten, aber Sie müssen die Gitterwerte verwenden, die Sie für X und Y generiert haben, um es zu bewerten. Wie Ihr Code jetzt ist, bewertet er die Funktion mit x und y (Fall ist wichtig!), Die Sie für uns nicht definiert haben. Versuchen Sie stattdessen:

[X, Y] = meshgrid(1:0.5:10, 1:20); 
Z = sin(X).*cos(Y).^3 + 2.*cos(X).^5.*sin(Y); 

surf(X, Y, Z); 

Beachten Sie, dass ich verwendet, um die .* Operator (element-wise multiplication) anstelle des * Operator (matrix multiplication) in der Gleichung.

Sie könnten auch dies tun, indem ein anonymous function definieren, die die Formel für eine gegebene Menge von Daten auswertet:

fh = @(x, y) sin(x).*cos(y).^3 + 2.*cos(x).^5.*sin(y); 
[X, Y] = meshgrid(1:0.5:10, 1:20); 

surf(X, Y, fh(X, Y)); 
Verwandte Themen