x=[1;2;3]
x =
1
2
3
y=[4;5;6]
y =
4
5
6
x\y
答案=
2.2857
Matlab 是如何找到这个结果的?(我搜索了很多论坛,但我不明白他们在说什么。我想知道给出这个结果的算法。)
来自 MATLAB 文档\
:
如果 A 是具有 M 个分量的M-by-N
矩阵M < or > N
,B 是具有 M 个分量的列向量,或者是具有多个这样的列的矩阵,则X = A\B
它是方程组的欠定或超定系统的最小二乘解A*X = B
。
在这里,您的系统不是欠定/超定。因为两者都有 3 行。因此,您可以将方程式可视化为:
xM=y
M=inv(x)*y
现在,由于您的矩阵不是方形的,它将使用 SVD 计算伪逆。所以,
M=pinv(x)*y;
您将获得 M 的值为 2.2857。
另一种解释可以是:它将为您提供xM=y
最小二乘意义上的解决方案。您可以按如下方式验证这一点:
M=lsqr(x,y)
这将为您提供 M = 2.2857 的值。
您可以随时help \
在 MATLAB 命令窗口中获取更多信息。
鼓励您查看有关最小二乘和伪逆的更多详细信息。
这个文档应该解释它
http://www.mathworks.com/help/matlab/ref/mrdivide.html
这是算法的链接
http://www.maths.lth.se/na/courses/NUM115/NUM115-11/backslash.html
不过,您可以更轻松地在 matlab 中查看源代码。(我在本地没有它,所以我无法检查,但很多 matlab 函数的来源在 matlab 中可用)