2017-07-07 1 views
0

ai besoin pour tracer chaque composante d'une fonction f sur une Q carré = [0,1] x [0,1]tracé 3D chaque composante d'une fonction donnée (dans Matlab/Octave)

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

Si j'ai une fonction scalaire (avec un composant) g:

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

terrain est facile avec les éléments suivants:

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

Mais, comment puis-je tracer chaque composant d'un vecteur de fu nction f sur le même jeu Q?

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

comment envisagez-vous la sortie? f_x représenté comme la hauteur de l'axe z et f_y représenté comme une palette de couleurs? ou en tant que tracé de champ vectoriel 2D avec des vecteurs à chaque position x, y définie par f_x, f_y? –

Répondre

0

Si vous êtes satisfait de visualiser les résultats comme un champ vectoriel, alors vous pouvez le faire comme ceci:

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)); 

Si vos composants f_x et f_y ne sont pas nécessairement identiques, vous pouvez diviser les (étape meshgrid implicite):

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)); 

Si vous avez vraiment, vraiment besoin de les avoir à la fois comme une seule fonction non vectorisable, alors vous pouvez vous déplacer cela en utilisant 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)); 

Résultat:

enter image description here