Levmar Excel version 1.1 released

We are happy to announce that a new version of Levmar Excel has been released. This version exposes more functionalities from the original levmar package to Excel.

New in this version is the ability to pass a VBA class (i.e. object) as extra parameter to LevmarExcel. This object can contain extra information needed to evaluate the error function. This addition offers a lot of extra flexibility using the package. Complex object models can now be passed as arguments to be used for the evaluation of the error function (the error function can be only a thin wrapper for the “real” error function in the object).

The latest version of Excel Levmar is available here. The package contains the example “demo_vba_object.xlsm” which shows how to use this new functionality. The example contains a module with some code to build the LevmarExcelSolver object.


Private m_solver As Object

Private Sub Init()

   Set m_solver = CreateObject("LevmarExcelSolver")

End Sub


And a subroutine to solve a optimalization problem


Public Sub SolveWoodNoInfo()

   If m_solver Is Nothing Then Init

   Dim m As Integer, n As Integer

   m = 4

   n = 6

   Dim p() As Double, x() As Double

   ReDim p(0 To m - 1)

   ReDim x(0 To n - 1)

   p(0) = -3#

   p(1) = -1#

   p(2) = -3#

   p(3) = -1#

   Dim calc As WoodCalculator

   Set calc = BuilWoodCalculator(n, m)

   Call m_solver.SolveWithData("Wood", p, x, m, n, calc)


   Dim top As Range

   Set top = shtDemo.Range("results")

   top.Offset(0, 0) = "Result as of " & Now()

   top.Offset(1, 0) = ""

   Call PrintP(top.Offset(2, 0), p)

End Sub


And error function


Private Function Wood(p() As Double, x() As Double, m As Integer, n As Integer, _

       oWoodCalculator As Object) As Double()

   Wood = oWoodCalculator.Value(p, x)

End Function



This solves the problem in the class (or object) WoodCalculator


Option Explicit

Private m_mParameters As Integer

Private m_nObservations As Integer

Public Function Clone() As WoodCalculator

   Set Clone = New WoodCalculator

   Call Clone.Init(m_nObservations, m_mParameters)

End Function

Public Function Name() As String

   Name = "Wood with n" & m_nObservations & " and m " & m_mParameters

End Function

Public Sub Init(n As Integer, m As Integer)

   m_nObservations = n

   m_mParameters = m

End Sub

Public Function Value(p() As Double, x() As Double) As Double()

   Dim i As Integer

   For i = 0 To m_nObservations - 1 Step 6

       x(i) = 10# * (p(1) - p(0) * p(0))

       x(i + 1) = 1# - p(0)

       x(i + 2) = Sqr(90#) * (p(3) - p(2) * p(2))

       x(i + 3) = 1# - p(2)

       x(i + 4) = Sqr(10#) * (p(1) + p(3) - 2#)

       x(i + 5) = (p(1) - p(3)) / Sqr(10#)

   Next i

   Value = x

End Function

The class passed to LevmarExcel must contain a Clone function. This is needed for technical reasons by LevmarExcel. If you do not provide such a function an exception will be thrown.

Leave a Reply

Your email address will not be published. Required fields are marked *