Extreme Optimization >
QuickStart Samples >
Least Squares QuickStart Sample (VB.NET)
Extreme Optimization QuickStart Samples
Least Squares QuickStart Sample (VB.NET)
Illustrates solving least squares problems using the
LeastSquaresSolver class (Extreme.Mathematics.Calculus namespace) in
Visual Basic .NET.
C# code Back
to QuickStart Samples
' The GeneralMatrix and DoubleVector classes resides in the
' Extreme.Mathematics.LinearAlgebra namespace.
Imports Extreme.Mathematics.LinearAlgebra
Namespace Extreme.Mathematics.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
'/ Mathematics Library 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 As GeneralMatrix = New GeneralMatrix(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 _
})
' Here is the right hand side:
Dim b As Vector = New GeneralVector(1, 3, 6, 11, 15, 21)
Dim b2 As Matrix = New GeneralMatrix(6, 2, New Double() _
{ _
1, 3, 6, 11, 15, 21, _
1, 2, 3, 4, 5, 7 _
})
Console.WriteLine("a = {0}", a)
Console.WriteLine("b = {0}", b)
'
' The LeastSquaresSolver class
'
' The following creates an instance of the
' LeastSquaresSolver class for our problem:
Dim solver As LeastSquaresSolver = New LeastSquaresSolver(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 As Vector = solver.Solve()
Console.WriteLine("x = {0}", x.ToString("F4"))
' The Solution property also returns the solution:
Console.WriteLine("x = {0}", solver.Solution.ToString("F4"))
' More detailed information is available from
' additional methods.
' The values of the right hand side predicted
' by the solution:
Console.WriteLine("Predictions = {0}", solver.GetPredictions().ToString("F4"))
' The residues (errors) of the solution:
Console.WriteLine("Residuals = {0}", solver.GetResidues().ToString("F4"))
' The total sum of squares of the residues:
Console.WriteLine("Residual square error = {0}", _
solver.GetResidualSumOfSquares().ToString("F4"))
'
' 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 As SymmetricMatrix = SymmetricMatrix.FromOuterProduct(a)
Dim aTb As Vector = GeneralMatrix.Multiply(b, a)
' We find the solution by solving the normal equations
' directly:
x = aTa.Solve(aTb)
Console.WriteLine("x = {0}", x.ToString("F4"))
' 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
Copyright 2004-2007,
Extreme Optimization. All rights reserved.
Extreme Optimization, Complexity made simple, M#, and M
Sharp are trademarks of ExoAnalytics Inc.
Microsoft, Visual C#, Visual Basic, Visual Studio, and Visual
Studio.NET are registered trademarks of Microsoft Corporation