Bonjour à tous,

Je possède un fichier texte (x,y,z,f) donnant la valeur d'une fonction f au point de coordonnées (x,y,z). Cette fonction représente la température au point (x,y,z) dans un domaine à trois dimensions en forme de tore. Mon but est de déterminer l'intégrale de f suivant x seulement afin d'obtenir une fonction y et z.

Un sujet similaire a déjà été traité mais malheureusement ne permet pas de résoudre mon problème. Ce qui avait été proposé est assez simple
- créer un maillage régulier à trois dimensions à partir du fichier texte
- interpoler les données du fichier texte aux points de ce nouveau maillage
- utiliser la méthode des trapèzes pour calculer l'intégrale /x :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
load file.txt 
x=file(:,1); 
y=file(:,2); 
z=file(:,3);
f=file(:,4);
 
xlin=linspace(min(x),max(x),10); 
ylin=linspace(min(y),max(y),10);
zlin=linspace(min(z),max(z),10);
[X,Y,Z]=meshgrid(xlin,ylin,zlin);
F=griddata(x,y,z,f,X,Y,Z);
Petit problème : le maillage à trois dimensions crée par meshgrid est un parallélépipède...alors que tous les points que j'avais au départ (ceux du fichier texte) étaient tous délimités par la frontière de mon domaine qui n'avait rien à voir avec ce parallélépipède...puisqu'il s'agissait d'un domaine trois dimensions en forme de tore.

1) Comment fait-t-on pour créer un ensemble de points du type meshgrid (avec la même façon d'ordonner les données X, Y et Z) régulièrement espacés mais seulement dans mon domaine initial (i.e dans mon domaine en forme de tore et pas dans un parallélépipède ou un cube) ?

2) Comment interpoler les données dans ce cas ?

Une façon de résoudre le problème serait d'écrire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
load file.txt 
x=file(:,1); 
y=file(:,2); 
z=file(:3);
f=file(:,4);
 
[X,Y,Z]=meshgrid(x,y,z);
pour le maillage et dans ce cas l'interpolation n'est pas nécessaire...Cependant (ce qui est bien) les valeurs de x, y et z sont encore rangées sous forme de matrice (X(:,:1),X(:,:2)...).

Dans ce cas comment modifier l'ordonnancement des valeurs de f afin que ces valeurs soient rangées comme si on avait utilisé griddata (en correspondance avec X et Y) ?

Si quelqu'un pouvait me donner une piste pour répondre à ces questions !

Je vous remercie

Alin