200 likes | 522 Views
曲线拟合 简介. 曲线拟合利用两个或多个变量的 离散点 ,用 平滑的曲线 来拟合它们之间的关系。 根据拟合方法的不同,有 参数拟合 和 非参数拟合 之分。 参数拟合:曲线不通过所有点,采用 最小二乘法 ; 非参数拟合:曲线通过所有点,采用插值法。. 已知离散点上的数据集 求得一解析函数 y = f ( x ) ,使 f ( x ) 在原离散点 xi 上尽可能接近给定 yi 的值,这一过程叫曲线拟合 .
E N D
曲线拟合简介 • 曲线拟合利用两个或多个变量的离散点,用平滑的曲线来拟合它们之间的关系。 • 根据拟合方法的不同,有参数拟合和非参数拟合之分。 参数拟合:曲线不通过所有点,采用最小二乘法; 非参数拟合:曲线通过所有点,采用插值法。
已知离散点上的数据集 求得一解析函数y=f(x),使f(x)在原离散点xi上尽可能接近给定yi的值,这一过程叫曲线拟合. 最常用的曲线拟合是最小二乘法曲线拟合,拟合结果可使误差的平方和最小,即找出使下式最小的f(x) : 解决此类问题的步骤: (1)首先根据已知数据作出散点图,确定函数 的类别。 如果 是多项式函数,则称为多项式拟合, 如果 为指数函数、对数函数等则称为非线性拟合.
(2)根据已知数据确定待定参数的初始值,利用Matlab软件计算最佳参数(2)根据已知数据确定待定参数的初始值,利用Matlab软件计算最佳参数 (3)根据误差平方和或可决系数,可以比较拟合效果。 计算误差平方和公式为 计算可决系数的公式为 其中 是原始数据, 是拟合数据, ,显然, 越趋近于1,表明拟合效果越好
1.多项式拟合 多项式拟合就是选择适当的多项式对数据集进行拟合,格式:p=polyfit(X,Y,n). 其中输入:X为自变量, Y为因变量,n是多项式的阶数;X必须单调. 输出:p是按降幂排列的多项式的系数. 多项式的拟合效果可以通过计算误差平方和的大小进行考察(两种方法): (1)sum((拟合数据-原始数据).^2) (2)sum((polyval(p,x)-y).^2) ) polyval(p,x) %计算以p为系数的多项式在x处的函数值.
例1.对以下数据作出散点图,然后用多项式拟合: (0.5,1.75),(1,2.75),(1.5,3.81),(2,4.8),(2.5,7),(3,8.6) 解:x = [0.5,1.0,1.5,2.0,2.5,3.0]; y = [1.75,2.45,3.81,4.80,7.00,8.60]; plot(x,y,’.’) 发现:这些点大致地位于某条直线附近,故可考虑线性拟合: p=polyfit(x,y,1) p =2.7937 -0.1540 即拟合函数为:y=2.7937x-0.154
考察拟合效果: (1)sum((2.7937*x-0.154*ones(1,6)-y).^2)=0.9136 (2)sum((polyval(p,x)-y).^2))=0.9136 如果用二次函数进行拟合,则有: p=polyfit(x,y,2) p = 0.5614 0.8287 1.1560 即拟合函数为: 此时误差平方和为: sum((polyval(p,x)-y).^2) =0.1781 根据误差平方和最小原则:二次函数优于线性函数
例2.某种合金中的主要成分为A,B两种金属,经过试验发现:这两种金属成分之和x与合金的膨胀系数y有如下关系,建立描述这种关系的数学表达式.例2.某种合金中的主要成分为A,B两种金属,经过试验发现:这两种金属成分之和x与合金的膨胀系数y有如下关系,建立描述这种关系的数学表达式. 解:首先作出散点图: x=37:0.5:43; y=[3.4,3,3,2.27,2.1,1.83,1.53,1.7,1.8,1.9,2.35,2.54,2.9]; plot(x,y,’*’) 发现:有点像抛物线,故选二次函数拟合. p=polyfit(x,y,2)
即为所求拟合曲线 输出结果:p = 0.1660 -13.3866 271.6231 误差平方和:R=sum((polyval(p,x)-y).^2)= 0.2523 在同一坐标系内作出原始数据与拟合结果的散点图; y2=0.1660*x.^2-13.3866*x+271.6234 ; figure(2); plot(x,y,'*',x,y2,'ro-'), legend('原始数据','二次函数')
2.非线性拟合 在实际问题中,有时散点图作出后未必是多项式的图形,可能像其他的曲线,这时可以猜测曲线类型,然后利用如下命令: [b,r,J] = nlinfit(x,y,fun,b0) 其中,x,y为原始数据,fun是在M文件中定义的函数,b0是函数中参数的初始值;b为参数的最优值, r是各点处的拟合残差,J为雅克比矩阵的数值. 注意1:在6.1版本中输入x是列向量,y是行向量, 而在7.0以上版本要求x,y要一致. 注意2:为了实现非线性拟合,要在M文件中定义函数,命令为:fun=inline('f(x) ', '参变量','x')
幂函数: 指数函数: S形曲线: 常见曲线与函数的对应关系
例3.已知如下数据,求拟合曲线 x=[ 0,47,93,140,186,279,372,465,558,651]; y=[18.98,27.35,34.86,38.52,38.44,37.73,38.43,43.87,42.77,46.22]; 输入数据,画散点图plot(x,y,'*') 根据右图,我们猜测曲线为: 现在利用最小二乘法确定最佳参数:b1,b2,b3 确定最佳参数前,要给出初始参数值,一般通过解方程组得到。
即拟合曲线为: b0=[43,0.6,0.1]; %初始参数值 fun=inline('b(1)*(1-b(2)*exp(-b(3)*x))','b','x'); [b,r,j]=nlinfit(x,y,fun,b0); b %最佳参数 R=sum(r.^2) %误差平方和 输出结果:b = 42.6643,0.5483,0.0099 在同一坐标系内作出原始数据与拟合结果的散点图; y1=42.6643*(1-0.5483*exp(-0.0099* x)); plot(x,y,'*', x,y1,'-or')
拟合结果如右图所示,红色为拟合曲线图形,*为原始散点图.拟合结果如右图所示,红色为拟合曲线图形,*为原始散点图.
练习:1.已知北京非典患病累计人数如下,试用函数练习:1.已知北京非典患病累计人数如下,试用函数 拟合北京非典患病累计人数,并作出图形. a1=[ 339,482,588,693,774,877,988,1114,1199,1347,1440,1553,1636; 1741,1803,1897,1960,2049,2136,2177,2227,2265,2304,2347,2370,2388 ; 2405,2420,2434,2437,2444,2444,2456,2465,2490,2499,2504,2512,2514; 2517,2520,2521,2522,2522,2522,2522,2522,2522,2523,2522,2522,2522 ; 2523,2523,2522,2522,2522,2521,2521,2521,2521,2521,2521,2521,2521];
2.实践经验可知,7月份平均气温是影响第二代棉铃虫历期(完成某一虫期发育所需天数)的主要因素.根据下面的数据,利用曲线拟合方法建立预报方程.2.实践经验可知,7月份平均气温是影响第二代棉铃虫历期(完成某一虫期发育所需天数)的主要因素.根据下面的数据,利用曲线拟合方法建立预报方程.
例4.炼钢厂出钢时所用盛钢水的钢包,由于钢水对耐火材料的侵蚀,容积不断增大,使用次数与增大容积之间的实验数据如下,分别选择函数例4.炼钢厂出钢时所用盛钢水的钢包,由于钢水对耐火材料的侵蚀,容积不断增大,使用次数与增大容积之间的实验数据如下,分别选择函数 , 拟合钢包容积与使用次数的关系
以给出分式函数程序为例。输入程序之前,要求出初始参数以给出分式函数程序为例。输入程序之前,要求出初始参数 初始参数b0的计算: 由于确定两个参数值,因此选择已知数据中的两点(2,6.42)和(16,10.76)代入方程,得到方程组:
上述方程组有两种解法:手工,Matlab,下面介绍Matlab 解方程组的方法 [x,y]=solve('6.42*(2*a+b)=2','10.76*(16*a+b)=16') 取点:(2,6.42),(8,9.93),(10,10.49)代入上述方程 [a,b,c]=solve('log(b)+c*2=log(6.42/a-1)','log(b)+c*10=log(10.49/a-1)','log(b)+c*8=log(9.93/a-1)') 注意:如果出现复数解,则只取实部
分式函数拟合程序: x1=[2:16]; y1=[6.42,8.2,9.58,9.5,9.7,10,9.93,9.99,10.49,10.59,10.6,10.8,10.6,10.9,10.76]; b01=[0.1435,0.084]; %初始参数值 fun1=inline('x./(b(1)+b(2)*x)','b','x'); % 定义函数 [b1,r1,j1]=nlinfit(x1,y1,fun1,b01); y=x1./(0.1152+0.0845*x1); %根据b1写出具体函数 plot(x1,y1,'*',x1,y,'-or');