New Version 6.0! |
---|

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

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

Copyright Â© 2003-2015, 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*, *Visual Studio.NET*, and the *Optimized for Visual Studio* logo

are registered trademarks of Microsoft Corporation.