Hello! I've been debugging this VBA program that computes the root of an equation using Newton Raphson method and with the use of the UserForm. The user will type the equation, the initial guess and the number of iterations. I was able to search on automatically differentiating the equation unlike when the user still has to type in the derivation of the equation.
The next problem I encountered was the exponential function. I would like the program to evaluate the equation whether it is simple polynomial or exponential function. I'd like my program to be flexible in either of the two functions.
Here is the code for the computation part. All of these are contained in a module:
Function FxdPt(ByVal ig As Double, ByVal Equation As String, ByVal Iteration As Double) As Variant
Dim xi As Double
Dim iter As Integer
Dim ea As Double
Range("c20:c22").ClearContents
Range("g9:k50").ClearContents
On Error GoTo Handler
iter = 1
Do
Sheets("Bracketing").Cells(21, 3) = iter
Sheets("Bracketing").Cells(8 + iter, 7) = iter
xi = ig - (f(Equation, ig) / diff(Equation, ig))
Sheets("Bracketing").Cells(8 + iter, 9) = ig
Sheets("Bracketing").Cells(8 + iter, 10) = xi
iter = iter + 1
ea = Abs((xi - ig) / xi)
Sheets("Bracketing").Cells(7 + iter, 11) = ea
If iter = Iteration + 1 Then
Exit Do
End If
ig = xi
DoEvents
Loop
FxdPt = xi
Sheets("Bracketing").Cells(22, 3) = xi
Sheets("Bracketing").Cells(20, 3) = ea
Exit Function
Handler:
FxdPt = "* Error / Overflow / Etcetera *"
End Function
Function diff(expression As String, variable As Double)
'Newton-Raphson Worksheet - Derivative calculation
deltah = 0.01
ex = Application.WorksheetFunction.Substitute(expression, "e", e)
diff = (Evaluate(Application.WorksheetFunction.Substitute(ex, "x", variable + deltah)) - _
Evaluate(Application.WorksheetFunction.Substitute(ex, "x", variable))) / _
(deltah)
End Function
Function f(expression As String, variable As Double)
Dim eqx As String
eqx = Application.WorksheetFunction.Substitute(expression, "e", e)
f = Application.WorksheetFunction.Substitute(eqx, "x", variable)
End Function
Tips/solutions would be a very great great help! I'm still new to VBA with not much introduction discussed in our course (Numerical Methods) so I hope you could help me. Thank you!