« Mathématiques avec Python et Ruby/Analyse numérique en Ruby » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
<noinclude>{{Mathématiques avec Python et Ruby}}</noinclude>
<noinclude>{{Mathématiques avec Python et Ruby}}</noinclude>


=Fonction=
==Fonction==


Les algorithmes ci-dessous seront appliqués à la fonction ''f'' : <math>x\mapsto x^2-5</math>. On va donc commencer par créer une ''méthode'' pour cela:
Les algorithmes ci-dessous seront appliqués à la fonction ''f'' : <math>x\mapsto x^2-5</math>. On va donc commencer par créer une ''méthode'' pour cela:
Ligne 12 : Ligne 12 :
</source>
</source>


=Résolution numérique d'une équation=
==Résolution numérique d'une équation==


Pour chercher à <math>10^{-14}</math> près un antécédent de 0 par ''f'', on peut utiliser la [[w:Méthode de dichotomie|méthode de dichotomie]]:
Pour chercher à <math>10^{-14}</math> près un antécédent de 0 par ''f'', on peut utiliser la [[w:Méthode de dichotomie|méthode de dichotomie]]:
Ligne 39 : Ligne 39 :
Le script affiche une solution parce que f(1) est négatif et f(3) positif. Sinon on aurait un message d'erreur.
Le script affiche une solution parce que f(1) est négatif et f(3) positif. Sinon on aurait un message d'erreur.


=Calcul approché d'un nombre dérivé=
==Calcul approché d'un nombre dérivé==


On approche la tangente par une sécante. On utilise une méthode centrée:
On approche la tangente par une sécante. On utilise une méthode centrée:
Ligne 54 : Ligne 54 :
On voit que <math>f'(2)\simeq 4</math>
On voit que <math>f'(2)\simeq 4</math>


=Calcul approché d'une intégrale=
==Calcul approché d'une intégrale==


La méthode des rectangles consiste à approcher <math>\int_a ^b f(t) \, dt</math> par la somme des aires des rectangles de largeur ''h'' et de hauteur ''f(a+nh)'' pour ''a+nh'' allant de ''a'' à ''b''. On choisit ''N'' assez grand (ici 1 000 000) pour que ''h'' soit petit et l'approximation bonne:
La méthode des rectangles consiste à approcher <math>\int_a ^b f(t) \, dt</math> par la somme des aires des rectangles de largeur ''h'' et de hauteur ''f(a+nh)'' pour ''a+nh'' allant de ''a'' à ''b''. On choisit ''N'' assez grand (ici 1 000 000) pour que ''h'' soit petit et l'approximation bonne:

Version du 14 juillet 2015 à 00:08

Fonction

Les algorithmes ci-dessous seront appliqués à la fonction f : . On va donc commencer par créer une méthode pour cela:

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

Résolution numérique d'une équation

Pour chercher à près un antécédent de 0 par f, on peut utiliser la méthode de dichotomie:

def zerof(a,b)
    if f(a)*f(b)>0 then
        puts('Pas de solution unique entre '+a.to_s+' et '+b.to_s+'.')
    else
        while ((a-b).abs>1e-14)
            m=(a+b)/2.0
            if f(m)*f(a)>0 then
                a=m
            else
                b=m
            end
        end
    end
    return m
end


puts(zerof(1,3))

Le script affiche une solution parce que f(1) est négatif et f(3) positif. Sinon on aurait un message d'erreur.

Calcul approché d'un nombre dérivé

On approche la tangente par une sécante. On utilise une méthode centrée:

def NDerf(x)
    h=1e-10
    return (f(x+h)-f(x-h))/(2*h)
end

puts(NDerf(2))

On voit que

Calcul approché d'une intégrale

La méthode des rectangles consiste à approcher par la somme des aires des rectangles de largeur h et de hauteur f(a+nh) pour a+nh allant de a à b. On choisit N assez grand (ici 1 000 000) pour que h soit petit et l'approximation bonne:

def Nintf(a,b)
    h=(b-a).to_f/1e6
    return (1..1000000).inject{|s,i| s+=h*f(a+h*i)}
end

puts(Nintf(0,2))