Méthode des points fixes

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,
En génie mathématiques, on me demande d’implémenter la méthode des points fixes en Python et de la tester avec différentes fonctions. Pour chaque fonction, on me demande de tester également 3 $x_0$ de départ. Voici le code que j’ai produit :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# coding: utf-8

from math import *

def point_fixe(g, x0, epsilon, n_itermax):
  """
    Retourne un tableau avec tous les points calculés ou une erreur 
  """
  itr = 0
  xp = {}
  x = 0

  while (itr < n_itermax):
    try:
      x = g(x0)
    except OverflowError:
      break

    xp[itr] = x0
    if abs(x - x0) <= epsilon:
      return xp

    x0 = x
    itr += 1

  return "Aucun point fixe"

def print_table(xp):
  """
    Affiche un tableau avec toutes les valeurs ou l'erreur
  """
  s = ""
  if isinstance(xp, str):
    s = xp
  else:
    for key, value in xp.items():
      s += "n = {}\t\tx = {}\n".format(key, value)
  print(s)

Ce qui me pose problème c’est le test de la fonction $1-x^2$ avec $x_0 = 4$.

1
print_table(point_fixe(lambda x: 1 - x**2, 4, 10e-10, 100))

En effet, vers l’itération 20, le calcul du $x_{n+1}$ sera vraiment lent. J’ai regardé la tête de la valeur de $x$ et c’est vraiment un nombre énorme donc la fonction est clairement divergente. Comment faire en sorte que Python s’arrête plus tôt ?

Merci à vous. :)

+0 -0

Cette réponse a aidé l'auteur du sujet

Vu que python a des entiers à précision arbitraire et que ta fonction est franchement divergente (la 20ème itération donne un chiffre de l’ordre de $10^{308053}$), ce n’est pas plus étonnant que ça que le calcul soit de plus en plus long. Tu as peut-être moyen de résoudre le problème en forçant le résultat de g(x0) à être un nombre flottant, ce qui forcera le calcul à être en temps constant (en supposant que ta fonction ne fait pas de truc bizarre).

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte