#最小二乘法定位算法之非线性方程线性化(由于作者能力有限,如有不对之处,望广大同行指出)

  好久不见,前段时间放寒假,在家里和老友聚聚,再就是一篇课程论文需要提交,是关于基于最小二乘法的运用,根据兴趣方向选择了最小二乘法定位的算法研究,现阶段大概完成了整体的思路构造。接下来主要介绍算法本身,这一篇主要讲在最小二乘法中,遇到的二次方程转化为一次方程再有效利用最小二乘法这样一个过程。
 非线性方程的线性化有很多种方法,它主要利用的就是一个函数近视逼近的一个效果。本文主要介绍两种方法,一种是最常见的方法“泰勒展开法”和另一种在定位节点中的方法“前项减后项法”:

  1. 泰勒公式展开法(常见方法)
     对于一次方程:形如 y=ax+b 很容易确定它的线性性,但是比如三角函数或者x的幂次较高,我们如何去近视得到线性性呢?接下来我们就要用到泰勒公式,首先复习熟悉一下泰勒展开式:
  2. java使用非线性最小二乘法算法 非线性方程最小二乘法_github

  3. 光列出公式可能不是很容易理解,为什么会用到泰勒公式,接下来我画一张图可能你就懂了!
  4. java使用非线性最小二乘法算法 非线性方程最小二乘法_github_02

  5. 在这里以y=sinx为例,sinx为非线性函数,y=x为线性函数,但是在一定小的区间内y=x和y=sinx的误差很小,所以在一定区间内我们就把y=x近视为y=sinx(比如sin(pi/6)=0.5而pi/6约等于0.52,然而x越大当然误差越大,越靠近原点,误差越小)。补充一点y=sinx用泰勒公式在原点展开去掉高次幂就是y=x,这个自己运用公式计算。
  6. 节点定位用到的前项减后项法(仿真用到方法)
     前面方法在实际节点定位的过程中也可以用到。但是线性方程辉略有不同,前项减后项的方法主要是前n-1项减去第n项得到的结果。
     在仿真中计算出节点与未知节点的距离方程:
  7. java使用非线性最小二乘法算法 非线性方程最小二乘法_github_03

  8. 很明显这是几个非线性方程,但是要用到最小二乘法,必须转化为线性方程。所以将前n-1项减去第n个方程得到的结果为:AX=b形式
  9. java使用非线性最小二乘法算法 非线性方程最小二乘法_非线性方程线性化_04


  10. java使用非线性最小二乘法算法 非线性方程最小二乘法_最小二乘法_05

  11. 对于AX=b则直接利用最小二乘法求解即可!其中X为两行一列的矩阵,也就是二维坐标:
  12. java使用非线性最小二乘法算法 非线性方程最小二乘法_非线性方程线性化_06

  13. 部分参考:(https://github.com/megagao/IndoorPos)