最小二乘法(least squares method),也称最小平方法,是一种古老而常用的数学工具,在自然科学、工程技术和人工智能等领域有着广泛地应用,其核心原理就是通过将误差平方和最小化来寻找数据的最佳匹配函数。
最小二乘法原理浅析:
在实际应用中,往往通过测量或模拟得到函数y=f(x)在某些点x1,x2,..., xn处对应的函数值y1,y2,...,yn, 且点xi互不相同,由于f(x)的解析形式并不清楚,因此需要寻求函数y=f(x)的近似表达式y=p(x)。一般情况下,p(x)由k个线性无关函数p1(x),p2(x),...,pk(x)线性组合而成,即有:
p(x)=a1*p1(x) a2*p2(x) … ak*pk(x) (k<n-1)
上式中,a1, a2, ..., ak为待定常数。线性无关函数组p1(x), p2(x), ..., pk(x)称为基函数。常用的基函数有:
1, x, x^2, ..., x^k;
sin(x), sin(2x), ..., sin(kx)等
最小二乘法就是通过计算寻找一组系数使得所有数据点p(xi)与yi之差的平方和最小,即:
下面以多项式基函数为例,来演示整个计算过程:
p(x)=a0 a1*x … ak*x^k (k<n-1);
令误差平方和函数:
D(a1, a2, ..., ak) = sum((p(xi)-yi)^2),
上式中sum为求和记号,为了求出符合条件的系数a,将上式右边依次对ai(i=0,1,2,…,k) 求偏导,将得到k 1个关于a1, a2, ..., ak线性方程组,经整理写成矩阵形式如下:
上式通过左右两边同时左乘基组系数矩阵的逆即可得到:A=X|-1|Y,此处X|-1|表示基组系数矩阵的逆。
matlab实现
代码语言:javascript复制clc;clear;close all;
x = linspace(-5,5,30);
a0 = -4; a1 = -1.8;
a2 = 1.13; a3 = -1.5;
y = a0 a1*x a2*x.^2 a3*x.^3;
% 对y加入噪声以便模拟验证
yy = a0 a1*x a2*x.^2 a3*x.^3 20*randn(1,30);
N = 3;
% 计算基组系数矩阵
X = getBGCM(x,N);
% 由模拟值yy计算Y值
Y = getY(x,yy,N);
% X*A = Y,左右两边同时左除X,即得:A = XY;
A = XY;
% 验证计算结果
yt = getMY(A,x,3);
% 绘制图像
plot(x,y,'r.-',x,yy,'bo-',x,yt,'ks-');
title('最小二乘法拟合验证测试');
xlabel('X 轴');
ylabel('Y 轴');
legend('真实值','真实值加噪声','拟合值');
~~~~~~~~~~效果图~~~~~~~~~~