CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PYTHON] [MATHS] Méthode du gradient à pas fixe

louiure
louiure
Niveau 9
19 novembre 2020 à 16:07:06

Bonjour, je dois coder une méthode du gradient à pas fixe pour un cours de maths-info. C'est un problème de minimisation et je dois trouver le minimum d'une fonction à partir de plusieurs algorithmes dont celui du gradient à pas fixe. Néanmoins je suis confronté à une erreur de divergence de mon algorithme. Je suis censé converger vers x1,x2=[1,1] et f(x1,x2)=2. Ce que je ne trouve pas. Quelles sont les erreurs que j'ai pu commettre. Merci d'avance.
ce que j'obtiens (pour 4 itérations, mais pour encore plus ça diverge bien plus)
https://image.noelshack.com/fichiers/2020/47/4/1605798304-capture-3.png
le programme:

https://image.noelshack.com/fichiers/2020/47/4/1605798047-capture.png

KaiserJoseph
KaiserJoseph
Niveau 10
19 novembre 2020 à 18:40:20

la valeur de "e" n'est pas actualisée correctement, elle ne fait que croitre au cours des itérations.

Il faut l'initialiser par exemple à 10*erreur (pour être sûr d'entrer dans la boucle while)
Une fois dans la boucle while, la mettre à jour à partir de la valeur de k par exemple ( e = np.max(np.fabs(k)) qui correspond au gradient maximal) ou alors comme la différence de deux itérés successifs ( e = np.max(np.fabs(xnew - xold)) ).

Également, le pas de l'algorithme, s'il est fixe, doit être choisi assez petit. 1/2 ne semble pas assez petit.

Message édité le 19 novembre 2020 à 18:45:12 par KaiserJoseph
Wanadoo6
Wanadoo6
Niveau 11
19 novembre 2020 à 18:48:50

En fait ici son e c'est le nombre d'itérations et erreur c'est le nombre totale d'itérations (nom très mal choisi). Donc son code fait sens avec ses conventions...

Par contre effectivement il y a quelque chose à voir au niveau du pas à mon avis.

Si on voulait faire une méthode qui met une condition d'arrêt sur l'erreur (ou la norme du gradient par exemple), il faudrait faire comme dit mon VDD.

Message édité le 19 novembre 2020 à 18:50:03 par Wanadoo6
blue-tamere
blue-tamere
Niveau 12
19 novembre 2020 à 18:52:37

Ton x=x-0.5*truc est peut être a revoir aussi, ça peut valoir le.coup d'essayer avec quelque chose de plus petit (0.1 par exemple). Parfois il faut mettre un peu de relaxation pour qu'une méthode de Newton converge

louiure
louiure
Niveau 9
19 novembre 2020 à 18:54:29

Oui, j'ai mal choisi mes noms de variable, erreur c'est le nombre d'itérations. Si je prends un pas plus faible, ça fonctionne. Merci.

Sous forums
  • Cours et Devoirs
  • Histoire
  • Métiers & Orientation
  • Environnement & Nature
  • Politique
  • Philosophie
La vidéo du moment