c语言最小二乘求解超定方程,超定方程用最小二乘法求解

根据解的存在情况,线性方程可以分为:

有唯一解的恰定方程组,

解不存在的超定方程组,

有无穷多解的欠定方程组。

对于方程组Ax=b,A为n×m矩阵,如果A列满秩,且n>m。则方程组没有精确解,此时称方程组为超定方程组。

线性超定方程组经常遇到的问题是数据的曲线拟合。对于超定方程,在MATLAB 中,利用左除命令(x=A\b)来寻求它的最小二乘解;

还可以用广义逆来求,即x=pinv(A),所得的解不一定满足Ax=b,x只是最小二乘意义上的解。

左除的方法是建立在奇异值分解基础之上,由此获得的解最可靠;

广义逆法是建立在对原超定方程直接进行householder变换的基础上,其算法可靠性稍逊与奇异值求解,但速度较快;

独立方程个数大于独立的未知参数的个数的方程,称为超定方程,在matlab里面有三种方法求解,

一是用伪逆法求解,x=pinv(A)*b,二是用左除法求解,x=A\b,三是用最小二乘法求解,

x=lsqnonneg(A,b)

(3)矩阵求逆

行数和列数相等的矩阵称为方阵,只有方阵有逆矩阵。方阵的求逆函数为:

B=inv(A)

该函数返回方阵A的逆阵。如果A不是方阵或接近奇异的,则会给出警告信息。

在实际应用中,很少显式的使用矩阵的逆。在MATLAB中不是使用逆阵x=inv(A)*B来求线性方程组Ax=B的解,

而是使用矩阵除法运算x=A\B来求解。因为MATLAB设计求逆函数inv时,采用的是高斯消去法,而设计除法解线性方程组时,

并不求逆,而是直接采用高斯消去法求解,有效的减小了残差,并提高了求解的速度。

因此,MATLAB推荐尽量使用除法运算,少用求逆运算。

(4)除法运算

在线性代数中,只有矩阵的逆的定义,而没有矩阵除法的运算。而在MATLAB 中,定义了矩阵的除法运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值