mirror of
https://github.com/gonum/gonum.git
synced 2025-10-06 15:47:01 +08:00
41 lines
830 B
Go
41 lines
830 B
Go
// Copyright ©2022 The Gonum Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package mat_test
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"gonum.org/v1/gonum/mat"
|
|
)
|
|
|
|
func ExampleQR_solveTo() {
|
|
// QR factorization can be used for solving linear inverse problems,
|
|
// as this is a more numerically stable technique than direct
|
|
// matrix inversion.
|
|
//
|
|
// Here, we want to solve:
|
|
// Ax = b
|
|
|
|
var (
|
|
a = mat.NewDense(4, 2, []float64{0, 1, 1, 1, 1, 1, 2, 1})
|
|
b = mat.NewDense(4, 1, []float64{1, 0, 2, 1})
|
|
x = mat.NewDense(2, 1, nil)
|
|
)
|
|
|
|
var qr mat.QR
|
|
qr.Factorize(a)
|
|
|
|
err := qr.SolveTo(x, false, b)
|
|
if err != nil {
|
|
log.Fatalf("could not solve QR: %+v", err)
|
|
}
|
|
fmt.Printf("%.3f\n", mat.Formatted(x))
|
|
|
|
// Output:
|
|
// ⎡0.000⎤
|
|
// ⎣1.000⎦
|
|
}
|