Fonction newton-raphson
Bonsoir,
ci-joint une fonction que j'ai trouvé dans un livre mais qui ne me calcule pas le zero de la fonction et me retourne #valeur! systématiquement. Quelqu'un sait où se trouve l'erreur car j'ai relu plusieurs fois la fonction et je ne vois où j'ai fait une bêtise.
merci pour votre aide
Function Newton_ralphson(expression, variable, Optional initial_value)
Dim FormulaString As String, XRef As String
Dim delta_x As Double, tolerance As Double
Dim X1 As Double, X2 As Double, X3 As Double
Dim Y1 As Double, Y2 As Double
Dim m As Double
Dim I As Integer, J As Integer, NRepl As Integer
Dim temp As String, T As String, dummy As String
FormulaString = expression.Formula
If Left(FormulaString, 1) <> "=" Then Newton_ralphson = CVErr(xlErrNA): Exit Function
XRef = variable.Address
FormulaString = Application.ConvertFormula(FormulaString, xlA1, xlA1, xlAbsolute)
If IsMissing(initial_value) Then initial_value = variable
If initial_value = "" Then initial_value = variable
delta_x = 0.00001
tolerance = 0.00001
X1 = initial_value
For I = 1 To 2000
T = FormulaString
NRepl = (Len(T) - Len(Application.Substitute(T, XRef, ""))) / Len(XRef)
For J = NRepl To 1 Step -1
temp = Application.Substitute(T, XRef, X1 & " ", J)
If IsError(Evaluate(temp)) Then GoTo pt1
T = temp
pt1: Next J
Y1 = Evaluate(T)
If X1 = 0 Then X1 = delta_x
X2 = X1 + X1 * delta_x
For J = NRepl To 1 Step -1
temp = Application.Substitute(T, XRef, X2 & " ", J)
If IsError(Evaluate(temp)) Then GoTo pt2
T = temp
pt2: Next J
Y2 = Evaluate(T)
m = (Y2 - Y1) / (X1 * delta_x)
X3 = X1 - Y1 / m
If Abs(X3 - X1) < tolerance Then Newton_ralphson = X3: Exit Function
X1 = X3
Next I
Newton_ralphson = CVErr(xlErrNA)
End Function
bonjour
tu as trouvé un boulot mal fait : pas de commentaires, pas d'indentation
c'est l'ABC du programmeur
tu dois d'abord en passer par là et donc le faire toi-même, ensuite on verra.
courage