Page 1 sur 1

Champ de gradient

MessagePublié: 23 Juin 2022 10:22
par michal
Bonjour,

Est-ce qu'il y a quelque chose dans texgraph pour représenter un champ de gradients ?
Par exemple, on se donne la fonction f(x,y)=x^2 +y^2 et je voudrais représenter, en chaque point du plan, le gradient de f.
Merci d'avance pour votre réponse.

Michal

Re: Champ de gradient

MessagePublié: 23 Juin 2022 11:10
par P.Fradin
Bonjour Michal,

Rien de prévu par défaut, mais cela peut se programmer.
Je n'ai pas le temps aujourd'hui, mais je regarde ça ce soir au demain.

Re: Champ de gradient

MessagePublié: 23 Juin 2022 11:16
par michal
Et on peut pas attraper ça avec ce qui est prévu pour les équations différentielles ?

Re: Champ de gradient

MessagePublié: 23 Juin 2022 21:21
par P.Fradin
J'avais déjà un fichier pour les champs de vecteurs. Je l'ai adapté au champs de gradients.
Le bouton Modifier permet de changer l'expression de $f(x,y)$.
Le programme calcule le vecteur $g = (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y})$ (calcul approché par deux taux d'accroissement), et trace ce vecteur à partir du point (x,y). Si le paramètre longueur est strictement positif, les vecteurs tracés auront cette longueur, sinon ils sont tracés tels quels.
Par exemple, avec $f(x,y)=x^2+y^2$ avec longueur = 0.5 :

champGradient.png
champGradient.png (34.63 Kio) Consulté 36909 fois


champGradient.teg
(1.2 Kio) Téléchargé 1026 fois

Re: Champ de gradient

MessagePublié: 25 Juin 2022 11:14
par P.Fradin
Si on ne veut pas utiliser de fichier texgraph mais que l'on veut mettre le code directement dans un document TeX, alors on peut tout mettre en une seule commande :

Code: Tout sélectionner
[
view(-5,5,-5,5), Margin(0,0,0,0), size(8),
Axes(0,0,2+2*i),
// expression de la fonction f(x,y) sous forme de chaine
expr := "x^2+y^2",
//paramètres
h := 1E-6,
longueur := 0.5,
deltaX := 0.5,
deltaY := 0.5,
// tracé
NewMac("f",expr,x,y),
Arrows := 1, Width := 6, CurrentArrowScale := 0.5,
if longueur<=0
   then $facteur := 1 // longueur naturelle
   else facteur := longueur // longueur fixe
fi,
draw("line",[
 for $y from Ymin to Ymax step deltaY do
   for $x from Xmin to Xmax step deltaX do
            $v := (f(x+h,y)-f(x,y) +i*(f(x,y+h)-f(x,y)))/h,
       v := v/abs(v)*facteur,
       x+i*y, x+i*y+v, jump
   od
 od])
]

Re: Champ de gradient

MessagePublié: 25 Juin 2022 22:09
par michal
Merci !