2017-07-07 7 views
0

Ich muss jede Komponente einer Funktion zeichnen f über ein Quadrat Q = [0,1] x [0,1]Plot 3D jede Komponente einer bestimmten Funktion (in Matlab/Octave)

f = @(x,y) [-0.5*x + 0.25 ; -0.5*y + 0.25]; 

wenn ich eine skalare Funktion (mit einer Komponente) g haben:

g = @(x,y) -0.5*x + 0.25; 

Grundstück ist leicht mit dem folgenden:

xxx=[0:0.01:1]; 
    yyy=[0:0.01:1]; 
    [xxx yyy]=meshgrid(xxx,yyy); 
    surfc(xxx,yyy,g(xxx,yyy)) 

Aber, wie ich jede Komponente eines Vektors fu plotten können nction f über die gleiche Menge Q?

f = @(x,y) [-0.5*x + 0.25 ; -0.5*y + 0.25]; 
+0

Wie sehen Sie den Ausgang? f_x als z-Achsenhöhe dargestellt und f_y als Colormap dargestellt? oder als ein 2D-Vektorfelddiagramm mit Vektoren an jeder x, y-Position, die durch f_x, f_y? –

Antwort

0

Wenn Sie glücklich sind die Ergebnisse als Vektorfeld sichtbar zu machen, dann können Sie es wie folgt tun:

f = @(z) -0.5 .* z + 0.25; 
[X, Y] = meshgrid (0:0.01:1, 0:0.01:1); 
quiver (X, Y, f(X), f(Y)); 

Wenn Ihr F_X und F_y Komponenten sind nicht notwendigerweise identisch, können Sie spalten sie (meshgrid Schritt impliziert):

f_x = @(x) -0.5 .* x + 0.25; 
f_y = @(y) -0.5 .* y + 0.25; 
quiver (X, Y, f_x(X), f_y(Y)); 

Wenn Sie wirklich, wirklich brauchen sie beide als einzige nicht-vektorisierbare Funktion haben, dann können Sie umgehen dies mit arrayfun:

f = @(x,y) [-0.5*x + 0.25 ; -0.5*y + 0.25]; 
quiver(X, Y, arrayfun(@(x) f(x,0)(1), X), arrayfun(@(y) f(0,y)(2), Y)); 

Ergebnis:

enter image description here