« 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 : | 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]] |
[[Catégorie:Informatique]] |
Version du 26 décembre 2010 à 19:50
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 à 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 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 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:
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))