New Version 7.0!

Try it for free with our fully functional 60-day trial version.

Download now!

Get from Nuget

QuickStart Samples

Least Squares QuickStart Sample (Visual Basic)

Illustrates how to solve least squares problems using classes in the Extreme.Mathematics.LinearAlgebra namespace in Visual Basic.

C# code F# code IronPython code Back to QuickStart Samples

Option Infer On

' The DenseMatrix and DoubleVector classes resides in the 
' Extreme.Mathematics.LinearAlgebra namespace.
Imports Extreme.Mathematics
Imports Extreme.Mathematics.LinearAlgebra

Namespace Extreme.Numerics.QuickStart.VB
    ' Illustrates the use of matrix decompositions for solving systems of
    ' simultaneous linear equations and related operations using the 
    ' Decomposition class and its derived classes from the
    ' Extreme.Mathematics.LinearAlgebra namespace of the Extreme Optimization
    ' Numerical Libraries for .NET.
    Module LeastSquares

        Sub Main()
            ' A least squares problem consists in finding
            ' the solution to an overdetermined system of
            ' simultaneous linear equations so that the
            ' sum of the squares of the error is minimal.
            '
            ' A common application is fitting data to a
            ' curve. See the CurveFitting sample application
            ' for a complete example.

            ' Let's start with a general matrix. This will be
            ' the matrix a in the left hand side ax=b:
            Dim a = Matrix.Create(6, 4, New Double() _
             { _
              1, 1, 1, 1, 1, 1, _
              1, 2, 3, 4, 5, 6, _
              1, 4, 9, 16, 25, 36, _
              1, 2, 1, 2, 1, 2 _
             }, MatrixElementOrder.ColumnMajor)
            ' Here is the right hand side:
            Dim b = Vector.Create(New Double() {1, 3, 6, 11, 15, 21})
            Dim b2 = Matrix.Create(6, 2, New Double() _
             { _
              1, 3, 6, 11, 15, 21, _
              1, 2, 3, 4, 5, 7 _
             }, MatrixElementOrder.ColumnMajor)
            Console.WriteLine("a = {0:F0}", a)
            Console.WriteLine("b = {0:F0}", b)

            '
            ' The LeastSquaresSolver class
            '

            ' The following creates an instance of the
            ' LeastSquaresSolver class for our problem:
            Dim solver = New LeastSquaresSolver(Of Double)(a, b)
            ' We can specify the solution method: normal
            ' equations or QR decomposition. In most cases,
            ' a QR decomposition is the most desirable:
            solver.SolutionMethod = LeastSquaresSolutionMethod.QRDecomposition
            ' The Solve method calculates the solution:
            Dim x = solver.Solve()
            Console.WriteLine("x = {0:F4}", x)
            ' The Solution property also returns the solution:
            Console.WriteLine("x = {0:F4}", solver.Solution)
            ' More detailed information is available from
            ' additional methods.
            ' The values of the right hand side predicted 
            ' by the solution:
            Console.WriteLine("Predictions = {0:F4}", solver.GetPredictions())
            ' The residuals (errors) of the solution:
            Console.WriteLine("Residuals = {0:F4}", solver.GetResiduals())
            ' The total sum of squares of the residues:
            Console.WriteLine("Residual square error = {0:F4}", _
                solver.GetResidualSumOfSquares())

            '
            ' Direct normal equations
            '

            ' Alternatively, you can create a least squares
            ' solution by providing the normal equations
            ' directly. This may be useful when it is easy
            ' to calculate the normal equations directly.
            ' 
            ' Here, we'll just calculate the normal equation:
            Dim aTa = SymmetricMatrix(Of Double).FromOuterProduct(a)
            Dim aTb = Matrix.Multiply(a, TransposeOperation.Transpose, b)
            ' We find the solution by solving the normal equations
            ' directly:
            x = aTa.Solve(aTb)
            Console.WriteLine("x = {0:F4}", x)
            ' However, properties of the least squares solution, such as
            ' error estimates and residuals are not available.

            Console.Write("Press Enter key to exit...")
            Console.ReadLine()
        End Sub

    End Module

End Namespace