2009-12-02 115 views
5

对于线性代数家庭作业,我已经解决了使用MATLAB的\操作(这是做它的推荐方式)以下公式:产生如下回答如何在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,似乎能够解决上述类型的方程,但我不明白哪些参数供应它,也不知道按什么顺序。

回答

6

mldivide,(“\”)实际上也是这样做的。根据documentation

如果A是一个m乘n矩阵,其中m〜= n和B是一个列向量,其具有M个分量,或者具有若干这样的列,则X = A \ B的矩阵是方程AX = B的欠方程或超定方程的最小二乘意义上的解。换句话说,X最小化范数(A * X-B),即矢量AX-B的长度。A是通过列旋转的QR分解确定的(详见算法)。计算的解决方案X每列至多有k个非零元素。如果k < n,这通常与x = pinv(A)* B不同,它返回最小二乘解。

所以,你在第一项任务中所做的就是用LSE求解方程。

+0

当然,实际的分配结果并不像我们那样复杂。你是对的,因为'\'算子确实涉及最小二乘逼近。我们现在得到了正确的答案,谢谢! – Jakob 2009-12-02 15:43:44

+0

这应该是“\运算符”,但它似乎代码格式反引号吞噬整个反斜杠(或者我可能错过了一次击键)。 – Jakob 2009-12-02 15:45:38

2

你的任务涉及到明确编码最小二乘逼近,还是仅仅使用MATLAB中提供的另一个函数?如果您可以使用其他功能,则可以使用其中一个选项:LSQR

x = lsqr(A,y);