Mathématiques avec Python et Ruby/Analyse numérique en Ruby
Fonction
modifierLes 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
modifierPour 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é
modifierOn 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
modifierLa 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))