如何在MATLAB中使用最小二乘逼近?

5
在线性代数的一项作业中,我使用MATLAB的\运算符(这是推荐的方法)解决了以下方程:
A = [0.2 0.25; 0.4 0.5; 0.4 0.25];
y = [0.9 1.7 1.2]';
x = A \ y
它产生了以下答案:
x =
1.7000
2.0800
接下来的作业要求我使用最小二乘逼近来解决同样的方程(然后将其与之前的值进行比较以查看逼近的准确度)。
我该如何在MATLAB中找到解决方案?
之前的工作:我已经找到了函数lsqlin,它似乎能够解决上述类型的方程,但我不知道要提供哪些参数或以什么顺序提供。
2个回答

6
"mldivide"(“\”)实际上也可以执行相同的操作。根据文档,如果A是一个 m×n 的矩阵,其中 m ≠ n,B是一个具有 m 个分量的列向量或具有多个这些列的矩阵,则 X=A\B 是解决 Ax=B 下限制最小二乘法的解。换句话说,X 最小化了向量 AX-B 的长度,即 norm(A*X-B)。矩阵 A 的秩 k 是由使用列主元 QR 分解计算得出的(详见算法的详细信息)。所求解的 X 每列可能有最多 k 个非零元素。如果 k

当然,实际的任务比我们想象的要简单。你说的“\”运算符确实涉及最小二乘逼近。我们现在已经得到了正确的答案,所以谢谢! - Jakob
那应该是“反斜杠操作符”,但似乎代码格式中的重音符吞掉了整个反斜杠(或者我可能只是错过了一个按键)。 - Jakob

2

您的任务是否需要明确编写最小二乘逼近算法,还是只需要使用MATLAB中已有的另一个函数?如果可以使用其他函数,则可以选择LSQR

x = lsqr(A,y);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接