最小二乘法拟合例题,最小二乘法曲线拟合公式

MATLAB最小二乘法拟合曲线

最小二乘法拟合例题,最小二乘法曲线拟合公式

文章插图
如上所述,采用polyfit来拟合,二次多项式polyfit(x,y,2)
x=[0.11 0.13 0.19 0.21 0.27 0.37 0.53 0.59 0.71 0.79 0.89 1.07];
y=[3868-1066 3733-888.3 3659-789.6 3599-710.7 3508-592.2 3463-533 3335-367.6 3257-266.5 3215-213.2 3200-193.8 3125-133.3 3131-106.6];
p=polyfit(x,y,2);
hold on;
plot(x,y,'o')
plot(x,polyval(p,x),'r');
Matlab用最小二乘法直线拟合此题(要写出完整的程序过程,急用,求高手!!!)
最小二乘法拟合例题,最小二乘法曲线拟合公式

文章插图
写在前面:
喵 。。也就我这么好心 。。。只有15分还帮你写程序 。。。。
如果你将来做技术,你就会经常要搭建数学模型,那么就会大量运用各种的最小二乘法来拟合模型参数,所以要好好学哦,亲~
希望通过这个例子,能够让你对最小二乘法入门 。。。
开始:
最小二乘法,通常用在,我们已知数学模型,但是不知道模型参数的情况下,通过实测数据,计算数学模型,例如,在题目中,数学模型就是直线方程y=ax+b,但是不知道直线方程的a和b 。
本来呢,我们只需要两组(xi,yi),就可以解得a和b,但是由于实测数据都存在误差,所以,我们很容易想到一个办法,我们测很多组数据来让我的a和b更加准确 。
“我们测很多组数据来让我的a和b更加准确”,那么我从数学角度如何体现这句话呢?
比如在此例中,已知数学模型 y=ax+b
【最小二乘法拟合例题,最小二乘法曲线拟合公式】我们有很多组数据,那么我们要找一条直线,使得我们测得的每个数据,到这条直线的偏离量的总和最小 。(这句话有点拗口,慢慢理解下 = =)
那么怎么用数学描述“偏离量总和最小”这个概念呢?
数学家运用了方差!
数学模型 y=ax+b
设F=ax+b-y
那么对于模型上的点(注意是模型上的点,也就是理论值),F=ax+b-y=0
但是对于实际值来说,F=axi+b-yi 一定不等于0 。那么我们就要找到一对a和b,使得F尽可能接近于0 。
也就是说,“偏离量总和最小”这个概念,在数学上实际上就是要求F的方差最小 。
即 Σ F^2→0 (F的平方和趋近于0)
即 Σ(axi+b-yi)^2→0
那么我们得到一个方程f(a,b)=Σ(axi+b-yi)^2,我们要找到合适的a,b使得f(a,b)最小!
也就是说,我们要找到的实际上是f(a,b)的最小值点 。(因为方差不可能小于0)
因此我们需要求f(a,b)的极值点 。我们借助数学工具偏导 。
如果有一组a,b使得
?f(a,b)/?a=0
?f(a,b)/?b=0
那么f(a,b)就是极值点,如果a,b只有一对,那么它就是最小值点 。
即 ?( Σ(axi+b-yi)^2 )/?a=0
?( Σ(axi+b-yi)^2 )/?b=0
化简得到
a*Σxi^2 + b*Σxi = Σ(xi*yi)
a*Σxi + b*N = Σyi
其中N是(xi,yi)的个数 。即我们测了多少组数据
解上面的二元方程,我们就可以得到唯一的一组a,b啦,这就是我们所需要的a和b
O(∩_∩)O~是不是蛮简单的?
Matlab最基础的程序如下 。。。= =
%原始数据
X=[163123150123141];
Y=[186126172125148];
n=5;%一共5个变量
x2=sum(X.^2);% 求Σ(xi^2)
x1=sum(X);% 求Σ(xi)
x1y1=sum(X.*Y);% 求Σ(xi*yi)
y1=sum(Y);% 求Σ(yi)
a=(n*x1y1-x1*y1)/(n*x2-x1*x1);%解出直线斜率b=(y1-a*x1)/n
b=(y1-a*x1)/n;%解出直线截距
%作图
% 先把原始数据点用蓝色十字描出来
figure
plot(X,Y,'+');
hold on
% 用红色绘制拟合出的直线
px=linspace(120,165,45);
py=a*px+b;
plot(px,py,'r');