• [数学学习与代码]最小二乘法--多元线性方程求解


         最近看了一本线性代数,如下图这个样的。。。比较讨厌的是这本书的排版贼难受,定义和定理加粗基本和没加一样,排版也过于紧密,看起来一度想弃书。

     

      重点不在这里,哈哈哈哈。

    这几天看完线代后,有一个粗略的理解后,菜虽然菜,但我还是想要倒腾倒腾。想起之前学过的最小二乘法,不过是一个二阶的最小二乘法,也撸了代码。但是学过线代后总是抑制不住体内的洪荒。。。(上个厕所去)

      N阶线性方程如下:

             然后根据线性方程的最小二乘法来进行计算,首先写出损失函数,设有一个样本容量为k的样本,使用n阶函数(共有n+1个系数)去拟合,损失函数为L(xi)。

      解释下:使用样本中的数值yi减去理论数值f(xi)所获得的差的平方。这样就能获得样本与理论的差的平方,我们的目的是想让每个差值可能的最小,也就是理论函数越接近样本。

      现在需要把所有的样本都进行该处理,并将所有的L(xi)进行求和处理获得L函数。

      那么接下来讨论目标,目标是为了尽可能使L最小,那么在函数中取得最小值应该是导数为0的位置,而这里是多元函数,那么我们需要进行偏导处理。

    在此,我们先确定未知量与已知量,这里yi和xi是作为已知量,而a0, a1,a2.......an是作为未知量。

      那么开始求偏导(注意数学基础,复合函数求偏导):

             好的,相信大家已经找出了规律来了。

      那么通用公式是:

      通共有N+1(注意n从0开始)个方程,我们再修改下方程,使其符合AX=B,注意这里A,X,B为矩阵:

      不妨设:

      那么相对应的矩阵为:

      那么接下来就是求解线性方程了!

      要求解AX=B方程,首先,我们得对方程的系数矩阵进行处理,使其成为上三角或者下三角,比如化成上三角,那么我们可以通过最后一个数据Xn+1·n+1×an=yixin,解出后进行递归处理出前面的元素:

      在此,使用的是高斯消元法来进行处理的,但注意高斯消元法中,使用某行去消去其他行的该行对角线上元素不能为0。当然也可以使用其他的比如LU法,雅克比法。

      最后,代码自己使用C语言打的,放最后贴出。我们取一组数据来验证下程序:

     代码下载链接:https://files.cnblogs.com/files/inkhearts/multi_least_square_method.rar

  • 相关阅读:
    Network Flows(借助ortools)
    【转】一张图看懂IaaS, PaaS和SaaS的区别
    论文中的一些符号 O(big-Oh) Ω(big-omega) Θ(big-theta)
    最大流问题
    4 Mininet测量路径的损耗率
    3 Mininet命令延伸实验拓展
    2 Mininet可视化应用
    快速定位问题
    软中断与软中断的排查
    系统出现大量不可中断进程与僵尸进程
  • 原文地址:https://www.cnblogs.com/inkhearts/p/10963372.html
Copyright © 2020-2023  润新知