[Matlab] convhulln

Tout ce qui concerne les logiciels mathématiques (Matlab, Maxima, Scilab, R, ...) ou les calculatrices scientifiques.
[forum modéré par les modérateurs globaux du site]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
minnolina

[Matlab] convhulln

Message par minnolina »

Bonjour,
je commence par vous demander pardon si le topic n'est pas totalment pertinent.
Mon probleme est le suivant :

J'ai une fonction z=f(x,y) de deux variables (x,y). In Matlab par exemple j'ecrit :

x=[ 1 :.1 : 10 ]'; % column vector, length 11
y=[10 : 1 : 100]'; % column vector, length 11
z=min(-log(x.*y^2),-log(x.*y^3)); % matrix, size 11*11

Maintenant je dois calculer l'enveloppe convexe de ces points i.e. les points (x_i,y_j,z_ij).
Maleureusement on peut pas passer à la function de matlab les points comme ca mais elle veut la liste de tous les points donc je fait comme ca :

X1=x;
for i=2:length(y)
X1=[X1;x];
end

X2=y;
for i=2:length(x)
X2=[X2;y];
end

X3=z(:,1);
for i=2:length(y)
X3=[X3;z(:,i)];
end

X=[X1;X2;X3];
k=convhulln(X);

Bien, en théorie j'ai mon enveloppe convexe mais maintenant j'ai besoin de connaitre les points qui appartient a l'enveloppe et les points qui sont plus en haut. Et de plus j'ai besoin de les connaitre dans la formulation original (i.e. avec 2 vectors et 1 matrix), et je ne m'en sort pas :(

Merci pour n'importe quelle suggestion,
Gloria
nirosis
Administrateur
Administrateur
Messages : 1803
Inscription : samedi 28 mai 2005, 14:48
Localisation : Orsay, France

Message par nirosis »

Sous quelle forme est retournée l'enveloppe convexe ?
Comme je n'ai jamais utilisé la fonction...
minnolina

Message par minnolina »

En fait, j'ai pas vraiment compris ce qu'il me renvoit. Il parle d'indices des points, avec trisurf on les dessin bien mais quand je les affiches je ne comprends pas comment il travail avec ses indices, je crois qu'il ne sont pas vraiment des points mais peut etre des triplettes de points pour les triangules avec lesquels il construit la surface du convex hull. Bref, je n'y comprends rien :(
Si quelqu'un a jamais utilisee cette fonction ou comprend comment sortir ces points je lui serai immensament "grata".
Merci
Gloria

PS Ici l'unique reference dans l'help:
http://www.mathworks.com/access/helpdes ... ulln.shtml
MB
Administrateur
Administrateur
Messages : 7298
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Message par MB »

J'ai pas matlab sous l main pour tester, mais en regardant la documentation :
K = convhulln(X) returns the indices K of the points in X that comprise the facets of the convex hull of X. X is an m-by-n array representing m points in N-dimensional space. If the convex hull has p facets then K is p-by-n.
Il semble que K est contient bien les p coordonnées des points de l'enveloppe convexe non ? (par contre, c'est vrai qu'ils parlent d'indices, ...)
MB. (rejoignez pCloud afin d'obtenir 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
minnolina

Message par minnolina »

Je n'ai pas encore resolu tous mes problemes mais j'ai trouvée cete description:
Convex Hulls

The convex hull of a data set in n-dimensional space is defined as the smallest convex region that contains the data set.

Computing a Convex Hull. The convhulln function returns the indices of the points in a data set that comprise the facets of the convex hull for the set. For example, suppose X is an 8-by-3 matrix that consists of the 8 vertices of a cube. The convex hull of X then consists of 12 facets.

d = [-1 1];
[x,y,z] = meshgrid(d,d,d);
X = [x(:),y(:),z(:)]; % 8 corner points of a cube
C = convhulln(X)

C =
3 1 5
1 2 5
2 1 3
7 3 5
8 7 5
7 8 3
6 8 5
2 6 5
6 2 8
8 4 3
4 2 3
2 4 8

Because the data is three-dimensional, the facets that make up the convex hull are triangles. The 12 rows of C represent 12 triangles. The elements of C are indices of points in X. For example, the first row, 3 1 5, means that the first triangle has X(3,:), X(1,:), and X(5,:) as its vertices.

For three-dimensional convex hulls, you can use trisurf to plot the output. However, using patch to plot the output gives you more control over the color of the facets. Note that you cannot plot convhulln output for n > 3.
Donc si j'ai bien compris il suffit de considerer une seule column de C pour avoir les indices des points qui appartient au convex hull.
MB
Administrateur
Administrateur
Messages : 7298
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Message par MB »

minnolina a écrit :Donc si j'ai bien compris il suffit de considerer une seule column de C pour avoir les indices des points qui appartient au convex hull.
C'est quoi l'indice d'un point ?

Sinon, il semble que la fonction renvoie les 12 faces du cube dans cet exemple (et pas les sommets). Il semble que chaque ligne corresponde aux trois sommets permettant de décrire une face ... chaque nombre serait ainsi l'indice du point permettant de désigner le sommet (de 1 à 8 donc) ! Les points sont peut-être numérotés dans l'ordre d'apparition dans X. Ainsi pour retrouver leurs coordonnées il faut reparcourir X. C'est juste une idée ...
MB. (rejoignez pCloud afin d'obtenir 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.