Zoubir
Nouveau membre
Bonjour,
J'ai passé pas mal de temps à essayer de comprendre ce qui cloche dans mon programme, mais ne trouvant je me résigne à demander de l'aide à des internautes sympas qui auraient un peu de temps à y consacrer.
L'objectif de ce pg tout simple est de calculer les intérêts cumulés.
p.e : Montant de 1000 euros placé à un taux d'intérêt de 5% pendant 3 ans, cela rapporte...
Il s'agit d'un taux continu, la formule est donc = Montant*Exp(r*T)
Pour corser, un peux le problème je considère que le taux varie en fonction d'un paramètre aléatoire (calculé par : NormSInv(Rnd)). Je découpe l'évolution de cette variable afin qu'elle ne soit pas continue mais discrète selon un certain nombre de période. (Principe de Montecarlo)
Un essai = un tirage (composé d'une succession de points de durée égale à "dt" tel que : dt = T / NbPeriode)
Je lance donc "NbEssai" chacun composé de "NbPeriode"... et la moyenne de la dernière période de tous ces essaias me donne le résultat final.
Mon résultat par la fonction : Interets_R1 -> Ok, elle fonctionne.
Function Interets_R1(Montant, r, T, NbEssai, NbPeriode)
ReDim Total(NbEssai) As Double
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Total(i) = Tableau_Essais(i, NbPeriode + 1)
Next i
Interets_R1 = WorksheetFunction.Average(Total)
End Function
Par contre, je ne comprends par pourquoi je n'arrive pas à la modifier des deux façons suivantes :
A/ Je souhaite récupérer tous les résultats intermédiaires : :??:
La différence est en rouge en dessous (Worksheets("Solution") : existe bien dans mon classeur).
Auparavant, j'avais réalisé une récupération de varaible tableau par procédure et cela fonctionnait très bien ?!?!
Function Interets_R3(Montant, r, T, NbEssai, NbPeriode)
ReDim Total(NbEssai) As Double
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Total(i) = Tableau_Essais(i, NbPeriode + 1)
Next i
Interets_R3 = WorksheetFunction.Average(Total)
Worksheets("Solution").Activate
For i = 1 To NbEssai
For j = 1 To NbPeriode + 1
Cells(i, j).Value = Tableau_Essais(i, j)
Next j
Next i
End Function
B/ Je souhaitais simplifier le code en enlevant une variable : :??:
J'ai enlevé cette variable, mais cela ne fonctionne pas "ReDim Total(NbEssai) As Double"
Je voulais récupérer le résultat de la fonction tel qu'indiqué ci-dessous en rouge
Function Interets_R2(Montant, r, T, NbEssai, NbPeriode)
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Next i
Interets_R2 = WorksheetFunction.Average(Tableau_Essais(NbPeriode + 1))
End Function
Voilà merci à tous d'avance pour votre aide !!!
J'ai passé pas mal de temps à essayer de comprendre ce qui cloche dans mon programme, mais ne trouvant je me résigne à demander de l'aide à des internautes sympas qui auraient un peu de temps à y consacrer.
L'objectif de ce pg tout simple est de calculer les intérêts cumulés.
p.e : Montant de 1000 euros placé à un taux d'intérêt de 5% pendant 3 ans, cela rapporte...
Il s'agit d'un taux continu, la formule est donc = Montant*Exp(r*T)
Pour corser, un peux le problème je considère que le taux varie en fonction d'un paramètre aléatoire (calculé par : NormSInv(Rnd)). Je découpe l'évolution de cette variable afin qu'elle ne soit pas continue mais discrète selon un certain nombre de période. (Principe de Montecarlo)
Un essai = un tirage (composé d'une succession de points de durée égale à "dt" tel que : dt = T / NbPeriode)
Je lance donc "NbEssai" chacun composé de "NbPeriode"... et la moyenne de la dernière période de tous ces essaias me donne le résultat final.
Mon résultat par la fonction : Interets_R1 -> Ok, elle fonctionne.
Function Interets_R1(Montant, r, T, NbEssai, NbPeriode)
ReDim Total(NbEssai) As Double
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Total(i) = Tableau_Essais(i, NbPeriode + 1)
Next i
Interets_R1 = WorksheetFunction.Average(Total)
End Function
Par contre, je ne comprends par pourquoi je n'arrive pas à la modifier des deux façons suivantes :
A/ Je souhaite récupérer tous les résultats intermédiaires : :??:
La différence est en rouge en dessous (Worksheets("Solution") : existe bien dans mon classeur).
Auparavant, j'avais réalisé une récupération de varaible tableau par procédure et cela fonctionnait très bien ?!?!
Function Interets_R3(Montant, r, T, NbEssai, NbPeriode)
ReDim Total(NbEssai) As Double
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Total(i) = Tableau_Essais(i, NbPeriode + 1)
Next i
Interets_R3 = WorksheetFunction.Average(Total)
Worksheets("Solution").Activate
For i = 1 To NbEssai
For j = 1 To NbPeriode + 1
Cells(i, j).Value = Tableau_Essais(i, j)
Next j
Next i
End Function
B/ Je souhaitais simplifier le code en enlevant une variable : :??:
J'ai enlevé cette variable, mais cela ne fonctionne pas "ReDim Total(NbEssai) As Double"
Je voulais récupérer le résultat de la fonction tel qu'indiqué ci-dessous en rouge
Function Interets_R2(Montant, r, T, NbEssai, NbPeriode)
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Next i
Interets_R2 = WorksheetFunction.Average(Tableau_Essais(NbPeriode + 1))
End Function
Voilà merci à tous d'avance pour votre aide !!!