[VB.NET] Calcul probabiliste d'une approximation d'intégrale (méthode de Monte Carlo)
Republic of Computing - Forum :: Programmation :: Programmation algorithmique :: Banque d'algorithmes
Page 1 sur 1
[VB.NET] Calcul probabiliste d'une approximation d'intégrale (méthode de Monte Carlo)
Bonjour,
Il est possible de calculer une intégrale de fonction d'un ensemble donné de x grâce au calcul probabiliste. Cette méthode dite de Monte Carlo exploite la théorie des grands nombres qui dit qu'après de nombreux tirages probabilistes, les résultats deviennent déterministes. Dans le cas du calcul intégral, on tire un réel r de l'intervalle [a;b] et l'on calcul l'intégrale de la fonction f en partant du principe que celle ci est constante en f(r). Ce qui est absolument faux avec un tirage se rapproche de la véritable valeur de l'intégrale lorsque le tirage est reproduit des milliers de fois.
Algorithme en VB.NET
Notes : Il est toujours nécessaire d'introduire la fonction f dans le code, elle ne peut être passée en paramètre utilisateur puisque le framework .NET ne possède de fonction d'interprétation de formules algébriques. La fonction Rnd() revoie un nombre pseudo-aléatoire entre 0 et 1, la formule : a + Rnd() * (b - a) permet ainsi d'obtenir un nombre entre a et b. Il est nécessaire de générer un nouveau nombre aléatoire en changeant le tampon horaire (procédure Randomize()).
Il est possible de calculer une intégrale de fonction d'un ensemble donné de x grâce au calcul probabiliste. Cette méthode dite de Monte Carlo exploite la théorie des grands nombres qui dit qu'après de nombreux tirages probabilistes, les résultats deviennent déterministes. Dans le cas du calcul intégral, on tire un réel r de l'intervalle [a;b] et l'on calcul l'intégrale de la fonction f en partant du principe que celle ci est constante en f(r). Ce qui est absolument faux avec un tirage se rapproche de la véritable valeur de l'intégrale lorsque le tirage est reproduit des milliers de fois.
Algorithme en VB.NET
- Code:
Sub Main()
' Définitions et assignations
Dim nbr As UInteger, a As Decimal, b As Decimal, res As Decimal = 0
Console.Out.WriteLine("nombre de lancers=") : nbr = Console.In.ReadLine()
Console.Out.WriteLine("a=") : a = Console.In.ReadLine()
Console.Out.WriteLine("b=") : b = Console.In.ReadLine()
' Tirages
For i As UInteger = 1 To nbr
Randomize()
res += f((a + Rnd() * (b - a))) * (b - a)
Next i
res /= nbr ' obtention de la moyenne
' Affichage de l'approximation de l'intégrale
Console.Out.WriteLine("intégrale de f(x) sur [" & a & ";" & b & "]=" & res)
Console.In.ReadLine()
End Sub
Function f(ByVal x As Decimal) As Decimal
Return Sin(2 * x) + 3 * x ^ 4
End Function
Notes : Il est toujours nécessaire d'introduire la fonction f dans le code, elle ne peut être passée en paramètre utilisateur puisque le framework .NET ne possède de fonction d'interprétation de formules algébriques. La fonction Rnd() revoie un nombre pseudo-aléatoire entre 0 et 1, la formule : a + Rnd() * (b - a) permet ainsi d'obtenir un nombre entre a et b. Il est nécessaire de générer un nouveau nombre aléatoire en changeant le tampon horaire (procédure Randomize()).
Skynyrd777- Admin
- Messages : 216
Date d'inscription : 02/06/2010
Republic of Computing - Forum :: Programmation :: Programmation algorithmique :: Banque d'algorithmes
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum