Mathématiques avec Python et Ruby/Analyse numérique en Python

De testwiki
Aller à la navigation Aller à la recherche

Modèle:Mathématiques avec Python et Ruby

Fonction

Dans ce chapitre, on va effectuer des calculs sur la fonction xx25; on va appeler cette fonction f. Pour se faciliter la suite, on va créer cette fonction :

def f(x):
    return x**2-5

Résolution numérique d'une équation

Pour résoudre l'équation f(x)=0, on cherche un intervalle sur lequel on est certain que f s'annule. C'est le cas pour [1;3] parce que f(1) est négatif et f(3) est positif. La méthode de dichotomie vise à resserrer un tel intervalle. On constate ci-dessous que la fonction f est traitée comme une entrée de l'algorithme au même titre que les bornes a et b de l'intervalle :

def zero(f,a,b):
    if f(a)*f(b)>0:
        print('pas de solution entre '+str(a)+' et '+str(b)+'!')
        return 0
    while(abs(a-b)>1e-14):
        m=(a+b)/2.
        if f(m)*f(a)>0:
            a=m
        else:
            b=m
    print('la solution de f(x)=0 est '+str(m))
    return m



print(zero(f,1,3))

La résolution de l'équation x2=0 n'est pas terminée, puisque le script ci-dessus n'a donné qu'une seule des deux solutions de cette équation. Par ailleurs, la solution trouvée n'est affichée qu'à 1014 près.

Calcul numérique de nombre dérivé

Pour calculer le nombre dérivé de f en 5, on va utiliser l'approximation f(x)f(x+h)f(xh)2h :

def NDer(f,a):
    h=1e-10
    return (f(a+h)-f(a-h))/(2*h)



print(NDer(f,5))

Calcul numérique d'une intégrale

La méthode des rectangles dit que abf(t)dtk=0Nh×f(a+kh)h=baN et N est suffisamment grand pour que h soit petit (ci-dessous N=1 000 000) :

def Int(f,a,b):
    h=(b-a)/1000000.0
    somme=0
    for n in range(1000000):
        somme+=h*f(a+n*h)
    return(somme)



print(Int(f,0,2))