最小二乘法
最小二乘法(也称为最小二乘法)是一种数学优化技术。 它通过最小化误差平方和来找到最适合数据的函数。
利用最小二乘法可以很容易地得到未知数据,并且可以使得到的数据与实际数据的误差平方和最小。 最小二乘法也可用于曲线拟合。 其他一些优化问题也可以通过最小化能量或最大化熵的最小二乘法来表述。
线性函数模型
一类典型的函数模型是线性函数模型。最简单的线性形式是
写成矩阵形式为:
直接给出该方程的参数解:
在
,它是 x 的算术平均值,也可以用以下形式求解:
一般线性情况
如果不相关的模型变量较多,可以构成一个线性函数:
即线性方程组:
通常人们记xij为数据矩阵A,参数bj记为参数向量b,观测值yi记为Y,则线性方程组可写为:
上式是用最小二乘法推导出线性平方差为: 。
最终最优解为: 。
例子
实验得到4个数据(x, y): (1, 6), (2, 5), (3, 7), (4, 10)。 希望找到最符合这四点的直线: 。
最小二乘法所用的方法是尽量使等号两边的方差最小:
通过取 β1、β2 求偏导数:
得β1=3.5,β2=1.4。 所以:最好。
MATLAB 实现
例1:时间与小车位移的关系
% 乘车时间(xi)与位移关系(yi)的关系
x = [0 1 2 3 4 5 6 7 8 9];
y = [0 2 4 7 8 9 12 14 15 18];
%{
subplot(m,n,p) 其中前两个参数m,n表示将你的图划分为m*n个网格,
每个格子用p编号,编号按行(横)编号matlab拟合曲线并得到方程,所以当m=2,n=2时,编号规则为
1 | 2个
——
3 | 4个
所以subplot(2,2,[1 3]),就是说你的subplot占据了1和3的两个格子,
而subplot(2,2,2)表示subplot只占第二个格子。
%}
子图(1,2,1);
情节(x,y,'o');
% 图形的一些设置
xlabel('时间(秒)');
ylabel('位移(米)');
title('原始数据离散点')
%{
grid on:就是打开网格
grid off:就是关闭电网
网格是在两种状态之间切换。 如果在grid off状态下进入grid,相当于grid on
反之,如果在grid on状态下进入gridmatlab拟合曲线并得到方程,则相当于grid off
%}
网格上
%{
polyfit函数是matlab中用于曲线拟合的函数。 其数学基础是最小二乘曲线拟合原理。
曲线拟合:在已知离散点上的数据集,即点集上的已知函数值,构造解析函数(其图形为曲线),使原始离散点尽可能接近给定值。
调用方法:polyfit(x,y,n)。 使用多项式求已知点的表达式,
其中x为源数据点对应的横坐标,可以是行向量或矩阵;
y为源数据点对应的纵坐标,可以是行向量或矩阵;
n是你要拟合的阶数,一阶直线拟合,二阶抛物线拟合,不是阶数越高越好,要看拟合情况。
可以使用以下程序计算 x 处多项式的值 y:y=polyval(a,x,m)
%}
p = polyfit(x,y,1)
% 0:0.01:9 开始为0,结束为9,步长为0.01
x1 = 0:0.01:9;
y1 = polyval(p,x1);
x2 = 0:0.01:9;
%{
MATLAB中的插值函数为interp1,其调用格式为:yi= interp1(x,y,xi,'method')
其中x、y为插值点,yi为插值点xi处的插值结果; x, y 是向量,
'method' 表示使用的插值方法。 MATLAB提供了几种插值方法:
'nearest'为最近邻插值,'linear'为线性插值; 'spline' 三次样条插值; 'pchip' 三次插值。默认表示线性插值
注意:所有的插值方法都要求x是单调的,xi不能超过x的范围。
%}
y2 = interp1(x,y,x2,'样条');
子图(1,2,2);
情节(x1,y1,'k',x2,y2,'r')
xlabel('时间(秒)');
ylabel('位移(米)');
title('黑线为最小二乘法拟合,红线为插值法拟合')
网格上
例2:温度与时间的关系
%{
例如:某天每两小时测一次体温。 设时间为ti,温度为Ci,i = 0, 2, 4, …, 24。数据如下:
表2 温度(Ci)与时间(ti)的关系
———————————————- ———-
钛 02 46 810 1214 1618 2022 24
———————————————- ———-
ci 15 14 14 16 20 23 28 27 26 25 22 18 16
———————————————- ———-
%}
x = [0 2 4 6 8 10 12 14 16 18 20 22 24]
y = [15 14 14 16 20 23 26 27 26 25 22 18 16]
情节(x,y,'o')
网格上
%{
hold on 和 hold off 比较常用
前者是指你在当前图片的轴(坐标系)上画一张图,当你再画一张图的时候,原来的图还在,和新图共存,可以看到
后者表示你在当前图片的轴(坐标系)上画图。 这个时候状态是hold off,再画一张的时候,
原图不再可见,轴上绘制新图,替换原图
%}
坚持,稍等
% p = -0.0061 0.1474 -0.0246 13.7390 三阶拟合得到的是多项式系数
% 即拟合曲线y = -0.0061*x3 + 0.1474*x2 – 0.0246*x + 13.7390(其中x3表示x的三次方,x2相同)
p = polyfit(x,y,3)
x1 = 0:0.01:24
y1 = 多元 (p,x1)
情节(x1,y1,'r')
%轴 坐标轴范围设置
轴([0 24 12 28])
xlabel('温度(度)');
ylabel('时间(点)');
title('温度变化图','位置', [18,10])
也欢迎加入2021年数学建模大赛筹备群:513094786
模友们可能已经发现,公众号推送文章的顺序不再按照时间顺序排列了。 这个改动可能会让你错过我们的每日推送。
所以,如果你还想一如既往地关注数模天堂,就需要把“数模天堂”标记为明星公众号,看完文章别忘了给个“围观”。