Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Xcas : python, résolutions numériques.

Posté par
matheux14
30-10-22 à 18:02

Bonjour,

Merci.  
J'essaie de trouver les algorithmes en python du chapitre analyse numérique mais j'ai réussi à faire seulement quelques méthodes.

Pour la résolution d'équations non linéaire, par la dichotomie j'ai :

import math

def dichotomie(a,b,e):
    delta = 1
    while delta > e:
        m = a + (b - a) / 2
        delta = abs(b - a)
        print("{:15} , {:15} , {:15} , {:15} , {:15} , {:15} , {:15} ".format(a,b,m,f(a),f(b),f(m),delta) )
        if f(m) == 0:
            return m
        elif f(a) * f(m)  > 0:
            a = m
        else:
            b = m
    return a, b, delta
def f(x):
    return ( x** 2 * math.log(x) - 2) 
print(dichotomie(1, 2, 0.01) )


J'aimerais savoir s'il est possible d'avoir des algorithmes plus puissant sur la résolution des équations non linéaires sur

Aussi pour les interpolations de polynômes (interpolation de Newton, Lagrange, ...), les calculs d'intégrales (méthodes de trapèzes, méthode des rectangles à gauche, à droite et au milieu, méthode de Simpson) et les équations différentielles (méthode d'Euler, méthode de Runge-Kutta).

Posté par
Ulmiere
re : Xcas : python, résolutions numériques. 30-10-22 à 19:34

Ton site est inutilisable et des noms de fonctions en français, quelle horreur

Il y a des petites choses à améliorer dans ta fonction de rechercher d'un intervalle par dichotomie

1) tu calcules avec des flottants, et qui dit float dit NaN et overflows... et aussi erreurs d'arrondi. En particulier, il est possible que a + (b-a)/2.0 donne un résultat inférieur à a ou supérieur à b si les deux sont très proches de 0. D'ailleurs évite les divisions, c'est lent. Tu peux muliplier par 0.5 à la place.


2) Ca fait déjà longtemps que Python a des format strings. tu peux écrire

f"une chaine de caractères contenant {x}. Les expressions sont acceptées entre accolades"

Ce sera bien plus lisible

3) pourquoi calculer abs et s'ennuyer avec des signes alors que tu peux t'assurer une seule fois tout au début de la fonction que a < b et juste prendre delta = b-a


et surtout
4) ta fonction va produire une boucle infinie s'il n'y a pas de solution dans l'intervalle [a,b], parce que l'erreur ne sera jamais assez petite pour que la fonction s'arrête.
Tu peux par exemple mettre une limite  (un compteur) et breaker/return quand on a fait trop de tours.

Il faut aussi t'assurer que la fonction f que tu utilises est (strictement) monotone ET bien définie. Si je prends a = -50 et b = -10, bonne chance pour calculer le log!
Tu pourrais aussi demander en premier argument la fonction à annuler.



Sinon, pour la suite, je te suggère d'essayer de coder l'algorithme de Newton-Raphson. Très rapide si tu lui donnes un bon point de départ, il permet de doubler à chaque itération ton nombre de décimales correctes. Avec 15 décimales de précision, tu n'aura jamais à faire plus de 4 itérations pour trouver un excellent résultat !

Posté par
carpediem
re : Xcas : python, résolutions numériques. 30-10-22 à 19:40

salut

et le "milieu" de deux réels a et b est tout simplement (a + b)/2

Posté par
carpediem
re : Xcas : python, résolutions numériques. 30-10-22 à 19:44

il est toujours intéressant de programmer la dichotomie ...

même si ce n'est pas le plus efficace (en terme de rapidité) c'est un bon exo

j'insiste sur un point évoqué par Ulmiere : tester l'égalité f(m) = 0 est sans intérêt avec des flottants et les arrondis

Posté par
matheux14
re : Xcas : python, résolutions numériques. 30-10-22 à 19:47

J'ai exécuté mon code avec X-cas et çà marche très bien.

Xcas : python, résolutions numériques.

Posté par
Ulmiere
re : Xcas : python, résolutions numériques. 30-10-22 à 20:19

J'ai pas dit que ça marchait pas, j'ai dit que c'était pas fiable

Voici le même code que toi en Rust, à quelques petites choses près. Là aussi éxécutable dans ton navigateur directement. Ca peut toujours planter si f n'est pas définie là où tu l'exécutes ou si f n'est pas croissante évidemment, mais c'est déjà mieux.

Posté par
alb12
re : Xcas : python, résolutions numériques. 30-10-22 à 21:02

salut,
le lien que tu donnes dans ton post initial est en fait une session Xcas que je propose à des lyceens pour verifier leurs calculs à propos d'un type d'exercice standard (c'est par choix en français)
J'utilise ici Xcas web
Je te conseille d'installer Xcas PC qui est plus performant et plus convivial
Tu pourras avoir acces à l'integralite de la doc en particulier aux algorithmes utilises dans Xcas
En attendant voir quelques sessions sur le forum de Xcas



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !