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

Rechercher des sujets similaires à "fonction newton raphson"