Newton raphson et taux acturiel

cs_carpe_diem Messages postés 10 Date d'inscription samedi 8 avril 2006 Statut Membre Dernière intervention 16 mai 2006 - 13 avril 2006 à 17:39
delphineba Messages postés 2 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 31 juillet 2006 - 31 juil. 2006 à 10:35
salut tt le monde,
j'ai besoin de résoudre une équation pour trouver le taux de rendemnt actuariel voila le code que j 'ai utilisé sur vb6 mais l'appel de la fonction ne fonctionne pas


Fonction





Dim ValPres As Double


Dim ValPresDerivee As Double


Dim v As Double


Dim ErreurMaximale As Double





Function NewtonRaphson(CashFlow() As Double, i As Double) As Double





ErreurMaximale = 0.0000001


ValPres = 1


While Abs(ValPres) > ErreurMaximale


ValPres = 0


ValPresDerivee = 0


v = 1 / (1 + i)


For t = LBound(CashFlow(), 1) To UBound(CashFlow(), 1)


ValPres = ValPres + CashFlow(t) * v ^ t


ValPresDerivee = ValPresDerivee - t * CashFlow(t) * v ^ (t + 1)


Next t


i = i - ValPres / ValPresDerivee


Wend


NewtonRaphson = i


End Function








Appel





n = DTPicker3.Year - DTPicker1.Year


For j = 1 To n - 1


CashFlow(j) = Val(tx_facial.Text) * nominal.Text


Next j


CashFlow(n) = Val(tx_facial.Text) * nominal.Text + nominal.Text


rdt.Text = NewtonRaphson(CashFlow(j), i, prix.Text)

merci

6 réponses

rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
17 avril 2006 à 02:27
Salut 742389 carpe_diem,

n'aurais-tu pas changé de pseudo? ce n'est pas grave si oui, mais tu n'y pas obligé(e)?
Donc, il faut écrire, pour l'appel :

Dim CashFlow() As Double ' à déclarer dans la section déclarations (en dehors de la sub ou function)


Private Sub Command1_Click()
Dim i As Double ' ajoutes cette ligne
n = DTPicker3.Year - DTPicker1.Year ' ! 2 ans d'écart minimum
ReDim CashFlow(n) ' ajoutes cette ligne

For j = 1 To n - 1
CashFlow(j) = Val(tx_facial.Text) * nominal.Text
Next j

CashFlow(n) = Val(tx_facial.Text) * nominal.Text + nominal.Text
rdt.Text = NewtonRaphson(CashFlow, prix.Text)' modifies cette ligne

End Sub

essaies de progresser la prochaine fois, et écris le message d'erreur que tu obtiens, et son n° (ça nous fait moins de boulot), merci d'avance.
Notes bien que je ne sais pas si, fonctionnellement, cela fait bien ce que tu veux que cela fasse (à cause des contradictions en appel et prototype), si tu as l'algorithme spécifié littéralement (ou algébriquement), donnes-le nous.

De plus, les 4 lignes :
Dim ValPres As Double
Dim ValPresDerivee As Double
Dim v As Double
Dim ErreurMaximale As Double
devraient être écrites dans NewtonRaphson, comme suit


Function NewtonRaphson(CashFlow() As Double, i As Double) As Double
Dim ValPres As Double
Dim ValPresDerivee As Double
Dim v As Double
Dim ErreurMaximale As Double
'...
End Function

à+

rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais... mais jamais avant la page 4
</SUP>
0
cs_carpe_diem Messages postés 10 Date d'inscription samedi 8 avril 2006 Statut Membre Dernière intervention 16 mai 2006
17 avril 2006 à 19:01
salut
en fait j'ai pas changé de pseudo, on est un binome qui travaille sur le mm sujet
on va essayer avec vos instructions
on vous remercie énormément pour votre aide
0
delphineba Messages postés 2 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 31 juillet 2006
28 juil. 2006 à 09:38
salut tt le monde ,


rvblog, est ce que tu peux m'expliquer pourquoi il faut 2 ans d'écart minimum sur n?

merci
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
28 juil. 2006 à 18:37
Salut  828571 delphineba,

on soustrait les années de 2 dates, avec un résultat en année, là :
    n = DTPicker3.Year - DTPicker1.Year '                            ! 2 ans d'écart minimum
    ReDim CashFlow( n ) '                                                        ajoutes cette ligne

déjà, le plus petit résultat possible est 0 (on ne connait pas le type de n, mais la plus petite dimension pour un tableau est 0 [dans la ligne du Redim]).
ensuite, on va itérer de 1 à n-1, là :

    For j = 1 To n - 1
      CashFlow(j) = Val(tx_facial.Text) * nominal.Text
    Next j

et si n vaut zéro, on va itérer de 1 à -1!

voilà,
à+

rvblog<sup>n
Je veux ton bien....et je l'aurais....mais jamais avant la page 4 des derniers échanges</sup>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
28 juil. 2006 à 18:39
et, pardon pour l'oubli, si n vaut 1, on va itérer de 1 à 0!

à+

rvblog<sup>n
Je veux ton bien....et je l'aurais....mais jamais avant la page 4 des derniers échanges</sup>
0
delphineba Messages postés 2 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 31 juillet 2006
31 juil. 2006 à 10:35
ok, merci.


delphineba.
0
Rejoignez-nous