-
-
Couldn't load subscription status.
- Fork 75
Description
Describe the bug 🐞
A \ b works when A is of dimension LinearSolve, the code
using LinearSolve
lin_prob = LinearProblem(A, b)
solution = LinearSolve.solve(lin_prob)returns the error
ERROR: DimensionMismatch: matrix is not square: ...In the documentation of LinearSolve.jl, I also did not find examples of non-square matrices, yet it is advertised that LinearSolve.jl is supposed to replace the \ - Operator, which works fine in my example.
This discussion on julia discourse revealed that " A \ b , for a “tall” matrix, automatically switches to finding the least-square solution (by pivoted QR), while for a “wide” matrix, it switches to finding the minimum-norm solution."
I found out, that least square and least norm solutions are at least available with the following Krylov methods:
using LinearSolve
lin_prob = LinearProblem(A, b)
x_least_squares = LinearSolve.solve(lin_prob,LinearSolve.KrylovJL_LSMR())
x_least_norm = LinearSolve.solve(lin_prob,LinearSolve.KrylovJL_CRAIGMR())but there is no method that does, what \ seems to do in this case (first check whether A is tall or wide, then act accordingly) and maybe there is an even more optimal behavior, or better heuristics?
Expected behavior
The solver should check automatically if A is a square matrix, or not, and if not, should apply appropriate methods, that follow appropriate heuristics. For example, one could follow the strategy, that A \ b implements for non-square matrices. In the end,
using LinearSolve
lin_prob = LinearProblem(A, b)
solution = LinearSolve.solve(lin_prob)should just work for non-square matrices (possibly with a note on the chosen solver-strategy, or a remark that A is not square, if desired).
Minimal Reproducible Example 👇
See above.
Error & Stacktrace
ERROR: DimensionMismatch: matrix is not square: ...Environment (please complete the following information):
- Output of
using Pkg; Pkg.status()
LinearSolve v2.35.0
LinearAlgebra v1.11.0- Output of
versioninfo()
Julia Version 1.11.0
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: Intel(R) Xeon(R) CPU @ 3.50GHz
WORD_SIZE: 64
LLVM: libLLVM-16.0.6 (ORCJIT, skylake-avx512)