Salut,
Quand j'essaie de compiler ce code en VBA, ça me donne l'erreur suivante "Erreur d'exécution '6' : dépassement de capacité"
En fait, ce code me sert a évaluer l'intégrale double suivante grace a Monte Carlo :
1
E(T)= ∫ (Γ(25.8+(1/m)) / ((1/m)! Γ(25.8))) * (0.11^r)((1-0.11)^(1/m)) * (1/m)*((1/m)-1)*(1/m²)
0 1
*[∫ 0.04(350² / (t^3)) ((1-exp(-0.04((350 / t) - 350))))^((1/m)-2)*exp(-2*004((350 / t) - 350)) dt] dm
0
Pour ça, j'utilise la fonction gamma, codée de la manière suivante:
Function FactGamma(ByVal X As Double)
If X > 0 Then
FactGamma = Exp(Application.WorksheetFunction.GammaLn(X))
Else
If X = Int(X) Then FactGamma = "#INFINI!": Exit Function
X = -X + 1
FactGamma = Exp(WorksheetFunction.GammaLn(X))
FactGamma = 4 * Atn(1) / (FactGamma * Sin(4 * Atn(1) * X))
End If
End Function
Voilà mon code pour le calcul de l'intégrale double; je précise que j'ai auparavant simulé deux échantillons de 100 valeurs d'une variable aléatoire suivant une loi uniforme sur [O,1] avec le générateur de nombres aléatoires d'Excel, dans les colonnes 1 et 2 de ma feuille Excel :
Sub k2()
Dim n As Double
Dim k As Double
Dim x0 As Double
Dim r As Double
Dim p As Double
Dim alpha As Double
Dim I1new As Double
Dim I2new As Double
Dim Inew As Double
Dim Enew As Double
n = 25
k = 1
alpha = 0.04
x0 = 350
p = 0.11
r = 25.8
Inew = 0
For k = 1 To n
Cells(k, 3) = (FactGamma(r + (1 / Cells(k, 2))) / ((WorksheetFunction.Fact(1 / Cells(k, 2))) * FactGamma(r))) * (p ^ r) * ((1 - p) ^ (1 / Cells(k, 2))) * (1 / Cells(k, 2)) * ((1 / Cells(k, 2)) - 1) * (1 / (Cells(k, 2) ^ 2)) * alpha * ((350 ^ 2) / (Cells(k, 1) ^ 3)) * ((1 - Exp(-alpha * ((350 / Cells(k, 1)) - 350))) ^ ((1 / Cells(k, 2)) - 2)) * Exp(-2 * alpha * ((350 / Cells(k, 1)) - 350))
Inew = Inew + Cells(k, 3)
Next k
Inew = Inew / n
Cells(11, 11) = Inew
End Sub
Quelqu'un pourrait me dire pourquoi je n'ai pas l'erreur dont j'ai parlé plus haut si je met n=25 et je l'ai si je met n supérieur a 25 svp ?