Tracer des surfaces avec Matlab

Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
Patrickkk
Membre Naturel
Messages: 45
Enregistré le: 01 Nov 2009, 14:44

Tracer des surfaces avec Matlab

par Patrickkk » 22 Nov 2009, 12:41

Bonjour à tous,
Est ce que quelqu'un sait comment on fait pour tracer des surfaces en 3D avec matlab à partir d'équation entre x, y et z?
Comme par exemple x²+y²+z²=1, ou (-x²z-z+2xy)/(x²+1)=0
Merci d'avance pour vos réponses.



bombastus
Membre Complexe
Messages: 2295
Enregistré le: 29 Nov 2007, 21:35

par bombastus » 22 Nov 2009, 13:55

Salut,

Le forum informatique aurait été plus approprié à ta demande...

Il existe de nombreuse façon de représenter une surface sous matlab. Je vais t'en donner une : créer un maillage de la zone que tu veux représenter, et chercher les isosurfaces pour les représenter avec la fonction patch :

Code: Tout sélectionner
figure,
axis equal
[x y z] = meshgrid(-2:0.1:2,-2:0.1:2,-2:0.1:2);
equation = x.^2+y.^2+z.^2;
p = patch(isosurface(x,y,z,equation,1));
isonormals(x,y,z,equation, p);
set(p, 'FaceColor', [1 0 0]);

Tu peux modifier la résolution en jouant sur les paramètres dans meshgrid.

Tu peux améliorer le rendu en jouant sur les options de ta figure, par exemple enlever les segments, ajouter une lumière et homogénéiser le rendu :
Code: Tout sélectionner
set(p, 'FaceColor', [1 0 0],'EdgeColor', 'none');
camlight,lighting gouraud


Si tu as des questions, n'hésites pas.

Patrickkk
Membre Naturel
Messages: 45
Enregistré le: 01 Nov 2009, 14:44

par Patrickkk » 22 Nov 2009, 17:09

Salut, et merci d'avoir répondu.
Il y a des choses que je n'ai pas compris:
A quoi sert la commande
Code: Tout sélectionner
axis equal

Et puis, si je mets
Code: Tout sélectionner
equation = (2*x.*y)/(x.^2+1)-z;

il ne veut pas comprendre, et ce message est affiché
??? Error using ==> mrdivide
Input arguments must be 2-D.


Si je mets quelque chose (...)^(quelquechose) ou autre j'ai des messages du même type.

Je ne comprend pas tres bien ce qu'il fait avec les parenthèses...
Et puis, quand faut t'il mettre un point pares les vriables?

Désolé, sa fait beaucoup de questions, mais je ne fait que débuter donc je ne sais pas trop comment fonctionne Matlab.

Ps: j'ai cherché des tutoriaux pour Matlab, mais je ne trouve rien qui explique bien, si quelqu'un en connait un bien, je suis intéressé

bombastus
Membre Complexe
Messages: 2295
Enregistré le: 29 Nov 2007, 21:35

par bombastus » 22 Nov 2009, 17:41

Sur le site developpez.com, il y a quelques ressources pour matlab :
une faq et quelques tutoriaux

après le net regorge d'explications sur matlab.

Enfin, la doc de matlab est très complète, ne pas hésiter à fouiller dedans.

Si tu cherches des infos spécifiques, tu peux faire une recherche en faisant :
help nom_de_la_fonction
ou pour avoir des infos plus complètes :
doc nom_de_la_fonction

Par exemple :
Patrickkk a écrit:A quoi sert la commande
Code: Tout sélectionner
axis equal

fais :
help axis
En l'occurence, mettre axis à equal permet d'homogénéiser l'affichage des axes, par exemple comme tu affiches une sphère, c'était pour éviter que la sphère ait un aspect aplati.

Patrickkk a écrit:Et puis, si je mets
Code: Tout sélectionner
equation = (2*x.*y)/(x.^2+1)-z;

il ne veut pas comprendre, et ce message est affiché

Si je mets quelque chose (...)^(quelquechose) ou autre j'ai des messages du même type.

Je ne comprend pas tres bien ce qu'il fait avec les parenthèses...
Et puis, quand faut t'il mettre un point pares les variables?

Si tu regardes les dimensions de x, y, et z, tu verras que c'est 3 matrices en 3D qui définissent chaque point de la grille.
Si tu écris x*y, matlab essaie de faire la multiplication des 2 matrices, or cette multiplication n'est possible qu'avec des matrices en 2 dimensions et qui remplisse certaines conditions (la multiplication matricielle utilisée en math).
Par contre si tu fais : x.*y, la multiplication se fait uniquement terme à terme, et c'est ce que l'on veut dans ton cas : à chaque point de la grille on veut connaitre la valeur de la fonction x²+y²+z².
C'est la même chose avec les opérateurs "^" et "/". Voilà pourquoi il faut mettre ".^" et "./".

Pour illustrer la différence entre * et .* :
si
Code: Tout sélectionner
a =   r   p
   q   s


et
Code: Tout sélectionner
b =   f   g
   d    m


alors
Code: Tout sélectionner
a*b = rf+pd   rg+pm
      qf+sd   qg+sm


et
Code: Tout sélectionner
a.*b= rf   pg
      qd   ms



En espérant avoir été suffisamment clair...

Patrickkk
Membre Naturel
Messages: 45
Enregistré le: 01 Nov 2009, 14:44

par Patrickkk » 23 Nov 2009, 21:56

Merci beaucoup.
Sinon, pour changer la couleur, je fais comment?

bombastus
Membre Complexe
Messages: 2295
Enregistré le: 29 Nov 2007, 21:35

par bombastus » 23 Nov 2009, 22:54

set(p, 'FaceColor', [1 0 0]);
là c'est en rouge (codé en RGB, ça donne 1 0 0)

Patrickkk
Membre Naturel
Messages: 45
Enregistré le: 01 Nov 2009, 14:44

par Patrickkk » 25 Nov 2009, 14:12

Ok, merci encore.

 

Retourner vers ✎✎ Lycée

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 21 invités

cron

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite