前言
在地球物理野外观测数据资料和实际反演过程中的未知数个数是不一致的!反演过程中最常出现的线性方程组情况是:方程个数 > 未知数个数!也就是"超定"线性方程组!方程个数比未知数个数多,可以想象不同方程之间会出现"冲突"的现象,也就是说导致整个方程组没有精确解。没有精确解不可怕,我们只要设定一个误差标准,找到一个让这个误差标准值最小的近似解也是完全可以接收的!这就是本文的目标:针对超定不相容线性方程组,利用最小二乘误差标准求解近似值。
相关概念
超定方程组:方程组中,方程个数比未知数个数多!即:有限参数要满足比它们更多的条件。
线性方程组:
的系数矩阵A与增广矩阵[A,b]之间"秩"的关系:
- 超定方程组解的判定,设方程组有m个方程n个未知数(m>n):
本文解决的就是:不相容问题,即方程没有精确解!只能寻找近似解。
最小二乘近似求解
首先说明:最小二乘是一种误差的衡量标准,不是什么专门的方法。最小二乘近似求解就是让误差的平方和达到最小的一组解。其实很非常简单!下面给出详细推导:
现有这样一组m个方程n个未知数(m>n)的超定线性方程组:
设每个方程的误差为:
设定误差平方和衡量标准:
最小二乘就是让误差的平方和最下,故令Q对每一个未知数x求偏导为0:
上面偏导为0方程组具体内容为,注意蓝色是一个整体(求和在一起):
把上面式子稍微改写,带b的移到等号右边:
用矩阵表示即为:
所以超定不相容线性方程组的最小二乘近似解为:
至此,最小二乘近似解推导过程结束。其实,直接记住最后的结论用就可以了。下面给出一个具体的算例并matlab编程来实操作一下:
数值例子
有这样一个超定线性方程组:
根据增广矩阵与系数矩阵秩的判断,该方程就是超定不相容的,下面是matlab程序:
clear ; clc;
% 每次修改这里的方程相关参数:
A = [1 2 4;2 1 1;1 1 2;1 -1 -2];
b = [-1;4;2;1];
zg = [A,b]; % 增广矩阵: 就是判断用的
if rank(zg) > rank(A)
fprintf('超定不相容!\n');
else
return ;
end
fprintf('最小二乘近似求解开始:\n');
% 方程求解 + 总体误差求解:
x = inv(A'*A)*A'*b;
error = (b(1) - sum(A(1,:).*x'))^2 + (b(2) - sum(A(2,:).*x'))^2 + (b(3) - sum(A(3,:).*x'))^2;
fprintf('方程近似解为: x1 = %.4f x2 = %.4f x3 = %.4f\n', x(1),x(2),x(3));
fprintf('方程总体(最小)误差为: error = %.4f\n',error);
最后结果为:
图1:超定不相容线性方程组近似结果