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我们可以测试精度(第二个问题)?
答案 0 :(得分:2)
关于您的第一个问题:可以将mldivde
(x = A\B
)视为linsolve
函数的包装。函数linsolve
允许用户指定有关矩阵A
的信息,这可以帮助Matlab选择更合适(更快)的算法来解决系统问题。然而,通过使用linsolve,它很容易搞砸。引自Matlab的documentation:
如果A没有您在opts中指定的属性,则linsolve返回不正确的结果,并且不会返回错误消息。如果您不确定A是否具有指定的属性,请改用mldivide。
如果您在执行算法时可以100%确定地评估矩阵A
的类型,那么请转到linsolve
。否则使用mldivide
。