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

Contenu supprimé Contenu ajouté
Page créée avec « =Méthode de Dichotomie= =Méthode de Simpson= =Méthode d'Euler= Catégorie:Informatique Catégorie:Mathématiques Catégorie:Programmation Ruby (livre) [[Cat... »
 
Aucun résumé des modifications
Ligne 1 :
=Fonction=
=Méthode de Dichotomie=
 
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:
=Méthode de Simpson=
 
<source lang="ruby">
=Méthode d'Euler=
def f(x)
return x**2-5
end
 
</source>
 
=Résolution numérique d'une équation=
 
Pour chercher à <math>10^{-14}</math> un antécédent de 0 par ''f'', on peut utiliser la [[w:Méthode de dichotomie|méthode de dichotomie]]:
 
<source lang="ruby">
def zerof(a,b)
if f(a)*f(b)>0 then
puts('Pas de solution 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))
</source>
 
Le script affiche une solution parce que f(1) est négatif et f(3) positif. Sinon on aurait un messsage d'erreur.
 
 
=Calcul approché d'un nombre dérivé=
 
On approche la tangente par une sécante. On utilise une méthode centrée:
 
<source lang="ruby">
def NDerf(x)
h=1e-10
return (f(x+h)-f(x-h))/(2*h)
end
 
puts(NDerf(2))
</source>
 
On voit que <math>f'(2)\simeq 4</math>
 
=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:
 
<source lang="ruby">
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))</source>
 
[[Catégorie:Informatique]]