Gradient méthode numérique

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
utawalpa
Messages: 6
Enregistré le: 02 Aoû 2007, 22:32

gradient méthode numérique

par utawalpa » 18 Jan 2010, 22:57

Bonjour,

j'ai 4 vecteurs : un contenant des scalaires et les trois autres représentent les coordonnées 3D associées à chaque scalaire.



J'aimerai connaître vos stratégies pour calculer numériquement le gradient de ce champ scalaire. Pour l'instant je pensais écrire une fonction qui me ferait faire une boucle sur le champ scalaire. A chaque fois j'identifierai le point le plus proche du ième point ma boucle et calculerait le gradient entre les deux points :



Mes interrogations :

1- Je ne sais pas si c'est la bonne méthode à employer
2- Je préférerai passer à une solution matricielle. Mais là j'ai deux soucis
2a - Mes points dans l'espace ne forme pas un maillage structuré (pas de maillage issu de Meshgrid pour les utilisateurs de Matlab ou Octave)
2b - Même dans ce cas, je sais calculer un gradient seulement en 2D avec des matrices de type :
, , mais ?

Voilà, si vous avez des pistes, je suis preneur !

Merci



SlowBrain
Membre Naturel
Messages: 42
Enregistré le: 16 Déc 2009, 23:58

par SlowBrain » 18 Jan 2010, 23:30

Pardon, pourrais-tu être un peu plus précis s'il te plait?
Quels sont tes vecteurs? Tes scalaires? A quels espaces appartiennent-ils? Que représente F? x,y,z sont-ils des réels ou bien 3 vecteurs de (ma première formule en TeX! youpi!) par exemple? k a l'air de jouer le rôle de paramètre, non?

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 20442
Enregistré le: 11 Nov 2009, 23:53

par Ben314 » 19 Jan 2010, 00:15

Bonsoir,
Pour en rajouter une couche, je vois vraiment pas ce que peut signifier
"les coordonnées 3D associées à chaque scalaire" ???

Un scalaire, c'est un élément du corps de base de l'espace vectoriel, mais on lui "associe" comment un vecteur ????
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

utawalpa
Messages: 6
Enregistré le: 02 Aoû 2007, 22:32

par utawalpa » 19 Jan 2010, 09:06

Bon, j'avoue que je suis un peu embetté car on ne parle pas la même langue...
J'ai quand même choisi ce forum car je pense que c'est plus un problème mathématique que physique.

J'ai des très bonnes notions de programmation mais une culture mathématiques très précaire. je vais essayer de faire au plus simple.

j'ai fait une modélisation numérique d'un calcul thermique. Il en résulte un champ scalaire, le champ de température. Je désire calculer le champ de vecteur "flux thermique" associé au champ de température.

En imaginant que j'ai un cube discrétisé en un ensemble de petits cubes. J'ai à chaque sommet une température et les coordonnées du sommet. Ces informations sont chacune enregistrées dans un vecteur colonne.

Bon, dans ce cas bien précis je sais calculer le vecteur "flux thermique" à partir de calculs matriciels. J'ai d'ailleurs comparé avec la fonction "gradient" de matlab et çà marche.

Là je suis dans le cas d'un calcul numérique d'un gradient pour une forme
3D quelconque. La fonction "gradient" de matlab ne marche pas pour un tel cas. Et je n'ai pas vraiment de stratégie bien déterminée.

Qu'en pensez vous ?

Clise
Membre Relatif
Messages: 221
Enregistré le: 16 Mai 2008, 22:59

par Clise » 19 Jan 2010, 12:37

Bonjour,

La première des questions c'est est ce que tu es dans un matériau homogène ? Dans ce cas, le calcul est "relativement" simple dans le cas contraire, ça risque de se corsé.

Bon alors si j'ai bien compris tu dispose d'un champ de température représentent les points (les indices de ta matrice en matlab) de ta discrétisation spatiale et tu veux obtenir le champ de flux 3D.

D'après la loi de Fourier tu as
Comme je l'ai dit précédemment je suppose que tu es dans un matériau homogène et donc que le lambda est le même partout, sinon ça se complique. Je vais faire une discrétisation spatiale à droite (tu peux également en faire une centrée) en utilisant la méthode des différences finies. Donc,

représente tes pas de discrétisations spatiales (en considérant bien sur que ton maillage est uniforme).

Voila, j'espère que j'ai répondu à ta question, sinon n'hésite pas a demander plus de précision.

PS : regarde la méthode diff de matlab qui te calcule la différence entre une composante et la suivante d'un vecteur pouvant être utile ici.

utawalpa
Messages: 6
Enregistré le: 02 Aoû 2007, 22:32

par utawalpa » 19 Jan 2010, 13:26

Merci pour ta réponse tu as bien résumé la situation, mais, car il y a toujours un mais, le maillage n'est pas uniforme. Dans le cas uniforme je m'en sors plutôt bien.

C'est de plus un assemblage de deux matériaux. Mais j'ai programmé quelques fonctions qui me permettent de palier à ce problème. J'ai donc bien un et un qui trainent mais ce qui m'embête c'est plus le coté "maillage non uniforme".

J'ai l'impression de devoir programmer des boucles et matlab ou octave n'aime pas trop çà les boucles. Je pourrai passer en "C" me direz vous mais c'est quand même dommage d'avoir une solution matricielle très pratique sur un maillage uniforme et de peiner sur un maillage non uniforme.

De plus le maillage est effectué avec un logiciel de pré-traitement. Il est difficile de respecter ma géométrie en plaçant un maillage uniforme donc on oublie...
J'ai trouvé une parade en utilisant "paraview", un logiciel (gratuit) qui me permet de visualiser mes données calculées. Cependant, c'est une boite noire et je n'ai pas bien le contrôle dessus...d'où ma volonté d'utiliser ma propre programmation.

Existe-il un moyen de trouver une matrice qui me fasse pour un maillage non uniforme ?

utawalpa
Messages: 6
Enregistré le: 02 Aoû 2007, 22:32

par utawalpa » 19 Jan 2010, 13:28

J'avais oublié, concernant le diff de matlab, çà marche bien pour une trajectoire. seulement mes données représentent un nuage de point et non un tracé dans l'espace.

Dommage !

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

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

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