Et y-a-t-il un rapport avec l'interpolation avec le polynôme? As-tu essayé une interpolation 3D?
Et y-a-t-il un rapport avec l'interpolation avec le polynôme? As-tu essayé une interpolation 3D?
Un rapport ? je ne comprend pas ta question magelan...Et y-a-t-il un rapport avec l'interpolation avec le polynôme? As-tu essayé une interpolation 3D?
En fait j'ai essayé d'utiliser la fonction interp2 mais celle ci ne marche pas :/. Mais j'ai pas essayé d'interpolation 3D...
Par rapport à tes données de départ, pour chaque point tu connais son abscisse, son ordonnée, sa hauteur (épaisseur) et sa distance au cratère, c'est bien cela?
Comment est défini la distance au cratère? c'est par rapport au centre du cratère?
J'ai fait une erreur, j'aurai dû parler d'interpolation 2D. Qu'est-ce qui ne marche pas avec interp2? J'ai vu que tu avais utilisé griddata aussi, cela ne correspondait pas à tes besoins?
Déjà, merci beaucoup magelan de t’intéresser à mon problème. C'est très important pour moi de réussir ce que je cherche à faire.
Effectivement, chaque point de coordonnée X,Y possède une épaisseur mesurée. La distance au cratère a été calculée, comme tu l'as dit, par rapport au conduit éruptif du volcan à l'origine de l’éruption.
En faite la fonction griddata est pas mal mais j'aimerais que mes courbes d'isovaleurs soit lissées. Et dans la documentation de la fonction "contour" présente dans le logiciel, il est marqué qu'en utilisant la fonction interp2 selon le code suivant on pouvait lisser les isovaleurs:
Voici ici ce que j'ai fait pour utiliser la fonction interp2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 %Smoothing Contour Data %Use interp2 to smooth contour lines. Also set the contour label text BackgroundColor to a light yellow and the EdgeColor to light gray. Z = peaks; [C,h] = contour(interp2(Z,4)); text_handle = clabel(C,h); set(text_handle,'BackgroundColor',[1 1 .6],... 'Edgecolor',[.7 .7 .7])
J'obtiens l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 %figure %[X,Y]=meshgrid(x,y); %[XI,YI]=meshgrid(x,y); %ZI=interp2(X,Y,Z,XI,YI,'linear'); %mesh(x,y,z), hold, mesh(XI,YI,ZI+15) %hold off
Merci??? Error using ==> interp2 at 145 When Z is a vector, X and Y must also be vectors. Error in ==> Prog_sirs at 55 ZI=interp2(X,Y,Z,XI,YI,'linear');
Si tes coordonnées sont répartis de façon non régulière, il faut utiliser griddata pour réaliser l'interpolation. Il faut d'abord définir Xi et Yi à l'aide de meshgrid pour définir tes points d'interpolation puis utiliser griddata avec tes vecteurs x y et Z :
mais j'ai l'impression que tu l'avais testé au post #5, non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ZI = griddata(x,y,Z,XI,YI)
Si tes points ne sont pas répartis de façon régulière (ie espace constant entre les points) alors non, tu ne peux pas utiliser interp2. Mais griddata fait la même chose pour les grille non régulière.
Peux-tu nous montrer le code associé?
Voici le code associé :
Du coup as tu une idée pour lisser les contours des isovaleurs ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 [XI,YI]=meshgrid(x,y); ZI=griddata(x,y,z,XI,YI); figure %contour3(X,Y,ZI,100) [C,h] = contour(X,Y,ZI); set(h,'ShowText','on','TextStep',get(h,'LevelStep')*25) colormap cool hold on plot(x,y)
Normalement les isopaques dans ce cas devraient avoir une forme elliptiques...
Si c'est possible, peux-tu joindre un fichier contenant les données que tu traites dans ton prochain message pour que l'on puisse faire des tests?
As-tu essayé de creer des grilles x et y plus fine :
ou pasx et pasy sont les écarts entre 2 valeurs?
Code : Sélectionner tout - Visualiser dans une fenêtre à part [Xi Yi] = meshgrid(xmin:pasx:xmax,ymin:pasy:ymax)
Non je n'ai pas essayé d'affiner mes grilles...je vais tenter ça !
Je te mets mon fichier au format .txt en pièce jointe .
En affinant un peu la grille avec tes données :
Ca correspond à ce que tu souhaites?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 load Ech_sirs.txt plot3(Ech_sirs(:,1),Ech_sirs(:,2),Ech_sirs(:,3),'*') x = Ech_sirs(:,1); y = Ech_sirs(:,2); z = Ech_sirs(:,3); [XI,YI]=meshgrid(min(x):100:max(x),min(y):100:max(y)); ZI=griddata(x,y,z,XI,YI,'cubic'); figure,surf(XI,YI,ZI,'EdgeColor','none') hold on, plot3(x,y,z,'*') figure,contour(XI,YI,ZI,30) figure,contour3(XI,YI,ZI,30)
Ouai ça commence à ressembler à ce que je cherche ! C'est même ça d'ailleurs, mais peut être que je reviendrais vers toi pour d'autres conseils !
Encore merci magelan !
Bonjour,
C'est encore moi, je voudrais créer une boite de dialogue qui permettrai de demander à l'utilisateur quelle méthode d'interpolation utiliser: cubic, linear, v4 ou nearest ?
Pour l'instant j'ai fait ça mais je ne sais plus comment faire pour integrer ça dans les lignes de codes qui permettent de tracer les cartes...
En faite ce que je voudrais c'est que, quand l'utilisateur tape "cubic" dans la boite de dialogue, le programme n'execute uniquement les carte interpolées réalisées avec la méthode cubic...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 prompt={'cubic, nearest, v4 ou linear ?'}; dlg_title='Méthode d''interpolation'; num_lines=1; answer = inputdlg(prompt,dlg_title,num_lines);
Merci
Tu peux utiliser la structure switch...case :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 prompt={'cubic, nearest, v4 ou linear ?'}; dlg_title='Méthode d''interpolation'; num_lines=1; answer = inputdlg(prompt,dlg_title,num_lines); switch answer{1} case 'cubic' ... case 'nearest' ... case 'v4' ... case 'linear' ... otherwise ... end
Ça marche très bien, merci !
Sais-tu si c'est possible de faire une coupe à travers le graphe avec la surface interpolée afin de montrer la décroissance des épaisseurs avec la distance ?
Parce que j'aurais des calculs à faire dessus pour à terme remonter au débit de l'éruption...
Merci
Une coupe dans quelle direction?
tes lignes et tes colonnes de ZI sont autant de coupes sur les axes x et y déjà.
Okay donc juste avec un plot je devrais y arriver...merci !
Bonjour,
C'est encore moi, je n'arrive pas à tracer une coupe comme je le veux (pièce jointe).
En faite j'aimerais tracer une coupe avec en x la longitude, en y l'épaisseur et le tout à une latitude donnée. Comment puis-je faire ?
Merci !
Comme dit précédemment, il te suffit de selectionner les données correspondantes dans tes tableaux, par exemple :
et pour la tracer en 2D :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 figure,contour3(XI,YI,ZI,30) hold on, coupe = 300; plot3(XI(coupe,:),YI(coupe,:),ZI(coupe,:))
Code : Sélectionner tout - Visualiser dans une fenêtre à part plot(XI(coupe,:),ZI(coupe,:))
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager