# Least Squares in IronPython QuickStart Sample

Illustrates how to solve least squares problems using classes in the Numerics.NET.LinearAlgebra namespace in IronPython.

View this sample in: C# Visual Basic F#

```Python import numerics # The DenseMatrix and LeastSquaresSolver classes reside in the # Extreme.Mathematics.LinearAlgebra namespace. from Extreme.Mathematics import * from Extreme.Mathematics.LinearAlgebra import * # Illustrates solving least squares problems using the # LeastSquaresSolver class in the Extreme.Mathematics.LinearAlgebra # namespace of Numerics.NET. # 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: a = Matrix([[1,1,1,1], [1,2,4,2],[1,3,9,1],[1,4,16,2],[1,5,25,1],[1,6,36,2]]) # Here is the right hand side: b = Vector([1, 3, 6, 11, 15, 21]) b2 = Matrix([[1,1],[3,2],[6,3],[11,4],[15,5],[21,7]]) print "a = {0:.4f}".format(a) print "b = {0:.4f}".format(b) # # The LeastSquaresSolver class # # The following creates an instance of the # LeastSquaresSolver class for our problem: solver = 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: x = solver.Solve() print "x = {0:.4f}".format(x) # The Solution property also returns the solution: print "x = {0:.4f}".format(solver.Solution) # More detailed information is available from # additional methods. # The values of the right hand side predicted # by the solution: print "Predictions = {0:.4f}".format(solver.GetPredictions()) # The residuals (errors) of the solution: print "Residuals = {0:.4f}".format(solver.GetResiduals()) # The total sum of squares of the residues: print "Residual square error =", 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: aTa = SymmetricMatrix.FromOuterProduct(a) aTb = b * a # a.Transpose() * b # We find the solution by solving the normal equations # directly: x = aTa.Solve(aTb) print "x = {0:.4f}".format(x) # However, properties of the least squares solution, such as # error estimates and residuals are not available. ```