Difference between mldivide and lsqr

12 次查看(过去 30 天)
Hi, I am curious about the difference between mldivide and lsqr.
Both seem to be used for calculating x where A*x=b.
Thank you in advance.

采纳的回答

Bruno Luong
Bruno Luong 2023-7-21
编辑:Bruno Luong 2023-7-21
The difference manifests obviously when you try to solve underdetermined linear system A*x = b.
A=rand(3,5)
A = 3×5
0.1391 0.7822 0.5816 0.3031 0.3500 0.4841 0.6309 0.9509 0.7327 0.0768 0.7137 0.8771 0.4724 0.4694 0.4100
b=rand(3,1)
b = 3×1
0.9778 0.2986 0.9737
The backslash returns a solution with most 0s and lsqr returns solution with minimum l2-norm.
xbackslash=A\b
xbackslash = 5×1
-0.4389 1.8328 -0.6786 0 0
xlsqr=lsqr(A,b)
lsqr converged at iteration 3 to a solution with relative residual 8.3e-14.
xlsqr = 5×1
-0.1969 1.1213 -0.1120 -0.3746 0.8767
xminnorm=lsqminnorm(A,b)
xminnorm = 5×1
-0.1969 1.1213 -0.1120 -0.3746 0.8767
Both minimize norm(A*x-b,2), in case not overdetermined system A*x match b (as withe example here)
A*xbackslash
ans = 3×1
0.9778 0.2986 0.9737
A*xlsqr
ans = 3×1
0.9778 0.2986 0.9737
norm(xbackslash)
ans = 2.0031
norm(xlsqr) % smaller even xlsqr has no O
ans = 1.4891
On the runtime the backslash is usualy faster, at least for dense matrix.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Mathematics 的更多信息

标签

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by