一.相关基础理论知识
最近在学习这方面的知识,本文为网上资料的总结和自己的一些代码验证。
我们根据平面上的一些离散点绘制出一条近似曲线。如果曲线通过所有点,称为插值;如果曲线不一定通过点,而是以某种方式逼近这些点,称为拟合。
构造拟合曲线,通常有以下几种方法:
(1)最小二乘法;
(2)分段拟合法;
(3)…
1. 最小二乘法
根据解的存在情况,线性方程可以分为:
- 有唯一解的恰定方程组;
- 解不存在的超定方程组;
(Ax=b,A为n×m矩阵,如果A列满秩,且n>m,方程组没有精确解,常用于数据拟合); - 有无穷多解的欠定方程组;
(Ax=b,A为n×m矩阵,如果A行满秩,且n<m);
在MATLAB中求解超定方程,有以下几种方法:
- 左除是建立在奇异值分解基础之上得到最小二乘法的解,因此最可靠;
x=A\b;
- 最小二乘法求解;
x=lsqnonneg(A,b);
- 广义逆,解不一定满足Ax=b,x只是最小二乘意义上的解;
x=pinv(A);
2. 广义逆(伪逆矩阵)
广义逆法(伪逆矩阵)是建立在对原超定方程直接进行 householder变换的基础上,其算法可靠性稍逊与(SVD)奇异值求解,但速度较快;以B=pinv(A)为例,函数返回矩阵A的伪逆矩阵。如果矩阵A是可逆(非奇异)的,那么pinv(A)与inv(A)的结果是一样的,而且pinv比inv效率低。但如果矩阵A是非方阵或奇异矩阵,则inv(A)不存在,但pinv(A)仍然存在,并表现出一些与逆矩阵类似的性质。
【定义】
令A是任意m x n矩阵,若G满足下述条件(Moore-penrose条件),称矩阵G是A的广义逆矩阵:
(1)GAG = G;
(2)AGA = A;
(3)AG为hermitian矩阵,即(AG)^H=AG;
(4)GA为hermitian矩阵,即(GA)^H=GA;
【测试】
在Matlab中,用以下几种方式求逆:
(1)直接求解:InvA = inv(A’*A)*A’; %求导,令导数为0,结果如下: InvA=(ATA)-1AT
(2)SVD分解:[U,Λ,V]=svd(A)
(3)QR分解:[Q,R]=qr(A)
(4)LU分解:[L,U]=lu(A)
a=[1 2 3; 4 5 6; 23 3 6];
b=inv(a);
c=pinv(a);
[U,D