Republic of Computing - Forum
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -55%
Friteuse sans huile – PHILIPS – Airfryer ...
Voir le deal
49.99 €

[VB.NET] Calcul probabiliste d'une approximation d'intégrale (méthode de Monte Carlo)

Aller en bas

[VB.NET] Calcul probabiliste d'une approximation d'intégrale (méthode de Monte Carlo) Empty [VB.NET] Calcul probabiliste d'une approximation d'intégrale (méthode de Monte Carlo)

Message par Skynyrd777 Mar 3 Aoû 2010 - 21:55

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
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
Skynyrd777
Admin

Messages : 216
Date d'inscription : 02/06/2010

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum