2010-09-24 5 views
2

J'ai une fonction personnalisée qui renvoie soit 0 ou 1 en fonction de deux entrées données:Comment puis-je tracer un contour d'une fonction personnalisée?

function val = myFunction(val1, val2) 

    % logic to determine if val=1 or val=0 

end 

Comment puis-je créer un tracé de contour de la fonction sur la x,y des coordonnées générées par les meshgrid suivantes?

meshgrid(0:.5:3, 0:.5:3); 

Cette parcelle affichera tout simplement où la fonction est 0 ou 1 sur la carte du contour.

+0

Remarque - vous devriez probablement utiliser une meilleure résolution de 0,5, à moins que la fonction est extrêmement lente. – Reinderien

Répondre

4

Si votre fonction myFunction n'a pas été conçu pour gérer les entrées de la matrice, vous pouvez utiliser la fonction ARRAYFUN pour l'appliquer à toutes les entrées correspondantes de x et y:

[x,y] = meshgrid(0:0.5:3);  %# Create a mesh of x and y points 
z = arrayfun(@myFunction,x,y); %# Compute z (same size as x and y) 

Ensuite, vous pouvez utiliser la fonction CONTOUR pour générer un tracé de contour pour les données ci-dessus. Étant donné que vos données z ont seulement deux valeurs différentes, il serait probablement logique que vous ne traciez qu'un niveau de contour (qui serait à une valeur de 0,5, à mi-chemin entre vos deux valeurs). Vous pouvez également utiliser plutôt la fonction CONTOURF, qui produit des contours rempli de couleur qui montrent clairement où les zéros et les uns sont:

contourf(x,y,z,1); %# Plots 1 contour level, filling the area on either 
        %# side with different color 


REMARQUE: Puisque vous complotez des données qui a seulement les et les zéros, le tracé des contours n'est peut-être pas la meilleure façon de le visualiser. Je plutôt utiliser quelque chose comme la fonction IMAGESC, comme ceci:

imagesc(x(1,:),y(:,1),z); 

Gardez à l'esprit l'axe y dans cette parcelle sera inversée par rapport à l'intrigue générée par CONTOURF.

2

Ce qui suit fera:

function bincontour 
    clear; clc; 

    xrange = 0:.5:3; 
    yrange = 1:.5:5; 
    [xmesh, ymesh] = meshgrid(xrange, yrange); 
    z = arrayfun(@myFunction, xmesh, ymesh); 

    contourf(xrange, yrange, z, 5) 
end 

function val = myFunction(val1, val2) 
    val = rand() > 0.5; 
end 
Questions connexes