代码之家  ›  专栏  ›  技术社区  ›  Jakob

如何在matlab中使用最小二乘近似?

  •  5
  • Jakob  · 技术社区  · 15 年前

    对于线性代数中的家庭作业,我用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 回复  |  直到 15 年前
        1
  •  6
  •   Hannes Ovrén    15 年前

    分水岭 ,( \ “)实际上也是这样。根据 documentation 以下内容:

    如果a是m~=n的m乘n矩阵,b是m分量的列向量,或者是具有多个这样的列的矩阵,那么x=a\b是对公式a x=b的欠定或超定系统的最小二乘意义上的解。换句话说,x最小化范数(a*x-b),向量a x-b的长度。a的秩k由利用柱旋转进行二维分解(详见算法)。计算出的解x每列最多有k个非零元素。如果k<n,这通常与x=pinv(a)*b的解不同,后者返回最小二乘解。

    所以,实际上,你在第一个作业中所做的就是用LSE解方程。

        2
  •  2
  •   gnovice    15 年前

    你的作业是否涉及到显式编码最小二乘近似,或只是使用Matlab中的另一个函数?如果您可以使用另一个函数,一个选项是 LSQR :

    x = lsqr(A,y);