【发布时间】:2014-11-21 06:19:53
【问题描述】:
1.A\b 和 linsolve(A,b) 有什么区别(不同的算法?)?
2.求解A*x=b和A'*A*x=A'*b有什么区别,哪个更精确?
第二个等式来自Least squares approximation
简单的matlab测试代码:
A=[1,2,3;4,5,6;7,8,9]
b=[1;2;3]
x1= A\b
x1 =
-0.3333
0.6667
0
x2=linsolve(A,b)
x2 =
-0.3333
0.6667
0
x3=linsolve(A'*A,A'*b)
x3 =
0.2487
-0.4974
0.5820
x4=(A'*A)\(A'*b)
x4 =
-0.8182
1.6364
-0.4848
阅读 linsolve 文档我发现
[X,R] = linsolve(A,B) 求解矩阵方程 AX = B 并返回 如果 A 是方阵,则 A 的条件数的倒数, 否则为 A 的等级。
所以使用 R 我们可以测试精度(第二个问题)?
【问题讨论】:
-
A'Ax=A'b 是最小二乘近似的正规方程。你永远不会想用 A'*Ax=A'*b 来解决这个问题。使用 x1 = A\b 因为这将使用一些好的和稳定的东西,比如 QR 分解,甚至可能是 SVD。对于条件较差的矩阵,您可以在 A'*A 的计算中引入重大错误,因此不要使用这种方法
-
@mathematician1975 如果我有 A=(M,n) nAI 仅求解 (n,n) 矩阵的方程组时,它应该更快?我在哪里可以找到关于方程 Ax=b 和 A'Ax=A'*b 的信息\证明有相同的答案?另请参阅我关于条件编号/等级的更新。
-
不需要预乘A'矩阵。方程 A'Ax=A'*b 只是最小二乘系统解的显式方程。您在这里处理的是一个正方形系统,但原则是相同的 - 根本不需要预乘 A',它效率低下,即使在最好的情况下,您也只能希望不要加剧任何不适系统。
标签: matlab linear-algebra equation-solving