1、1拟拟 合合2.2.拟合的基本原理拟合的基本原理1. 拟合问题引例拟合问题引例2拟拟 合合 问问 题题 引引 例例 1 1温度温度t(0C) 20.5 32.7 51.0 73.0 95.7电阻电阻R( ) 765 826 873 942 1032已知热敏电阻数据:已知热敏电阻数据:求求60600C时的电阻时的电阻R。2040608010070080090010001100 设设 R=at+ba,b为待定系数为待定系数3曲曲 线线 拟拟 合合 问问 题题 的的 提提 法法已知一组(二维)数据,即平面上已知一组(二维)数据,即平面上 n个点个点(xi,yi) i=1,n, 寻求一个函数(曲线)寻
2、求一个函数(曲线)y=f(x), 使使 f(x) 在某种准则下与所在某种准则下与所有数据点最为接近,即曲线拟合得最好。有数据点最为接近,即曲线拟合得最好。 +xyy=f(x)(xi,yi)i i 为点为点(xi,yi) 与与曲线曲线 y=f(x) 的距离的距离4拟合与插值的关系拟合与插值的关系 函数插值与曲线拟合都是要根据一组数据构造一个函数作函数插值与曲线拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上是完全不同为近似,由于近似的要求不同,二者的数学方法上是完全不同的。的。 实例:实例:下面数据是某次实验所得,希望得到X和 f之间的关系?x124791 21
3、31 51 7f1 .53 .96 .611 .71 5 .61 8 .81 9 .62 0 .62 1 .1问题:问题:给定一批数据点,需确定满足特定要求的曲线或曲面解决方案:解决方案:若不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,这就是数据拟合数据拟合,又称曲线拟合或曲面拟合。若要求所求曲线(面)通过所给所有数据点,就是插值问题插值问题;5最临近插值、线性插值、样条插值与曲线拟合结果:最临近插值、线性插值、样条插值与曲线拟合结果:0246810121416180510152025已知数据点spline三次多项式插值0246810121416180510152025已知
4、数据点linest三次多项式插值0246810121416180510152025已知数据点nearest三次多项式插值6用用MATLAB解拟合问题解拟合问题1 1、线性最小二乘拟合、线性最小二乘拟合2 2、非线性最小二乘拟合、非线性最小二乘拟合7用用MATLAB作线性最小二乘拟合作线性最小二乘拟合1. 1. 作多项式作多项式f(x)=a1xm+ +amx+am+1拟合拟合, ,可利用已有程序可利用已有程序:a=polyfit(x,y,m)2. 2. 对超定方程组对超定方程组)(11nmyaRnmmn可得最小二乘意义下的解。可得最小二乘意义下的解。,用,用yRa3.3.多项式在多项式在x x处
5、的值处的值y y可用以下命令计算:可用以下命令计算: y=polyvaly=polyval(a a,x x)输出拟合多项式系数输出拟合多项式系数a=a1, am , am+1 (数组数组) ))输入同长度输入同长度的数组的数组X,Y拟合多项拟合多项式次数式次数8即要求即要求 出二次多项式出二次多项式:3221)(axaxaxf中中 的的),(321aaaA 使得使得:最小 )(1112iiiyxf例例 对下面一组数据作二次多项式拟合对下面一组数据作二次多项式拟合xi0.10.20.40.50.60.70.80.91yi1.9783.286.167.347.669.589.489.3011.29
6、1)输入以下命令)输入以下命令:x=0:0.1:1; y=-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2; R=(x.2) x ones(11,1); A=Ry11 11211121xxxxR此时解法解法1 1用解超定方程的方法用解超定方程的方法2)计算结果)计算结果: = -9.8108 20.1293 -0.03170317.01293.208108.9)(2xxxf101)输入以下命令:)输入以下命令: x=0:0.1:1; y=-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.4
7、8 9.30 11.2; A=polyfit(x,y,2) z=polyval(A,x); plot(x,y,k+,x,z,r) %作出数据点和拟合曲线的图形作出数据点和拟合曲线的图形2)计算结果:)计算结果: = -9.8108 20.1293 -0.0317解法解法2用多项式拟合的命令用多项式拟合的命令00.20.40.60.81-20246810120317.01293.208108.9)(2xxxf111. lsqcurvefit1. lsqcurvefit已知数据点数据点: xdata=xdata=(xdata1,xdata2,xdataxdatan n),), ydata=ydat
8、a=(ydataydata1 1,ydataydata2 2,ydataydatan n) 用用MATLAB作非线性最小二乘拟合作非线性最小二乘拟合 Matlab Matlab的提供了两个求非线性最小二乘拟合的函数:的提供了两个求非线性最小二乘拟合的函数:lsqcurvefitlsqcurvefit和lsqnonlinlsqnonlin。两个命令都要先建立。两个命令都要先建立M-M-文件文件fun.mfun.m,在其中定义函数在其中定义函数f(x)f(x),但两者定义,但两者定义f(x)f(x)的方式是不同的的方式是不同的, ,可参可参考例题考例题.最小 ),(21niiiydataxdata
9、xF lsqcurvefitlsqcurvefit用以求含参量用以求含参量x x(向量)的向量值函数(向量)的向量值函数F(x,xdata)=F(x,xdata)=(F F(x x,xdataxdata1 1),),F F(x x,xdataxdatan n)T T中的参变量中的参变量x(x(向量向量),),使得使得 12 输入格式为输入格式为: : (1) x = lsqcurvefit (fun,x0,xdata,ydata); (2) x =lsqcurvefit (fun,x0,xdata,ydata,options); (3) x = lsqcurvefit (fun,x0,xdat
10、a,ydata,options,grad); (4) x, options = lsqcurvefit (fun,x0,xdata,ydata,); (5) x, options,funval = lsqcurvefit (fun,x0,xdata,ydata,); (6) x, options,funval, Jacob = lsqcurvefit (fun,x0,xdata,ydata,);fun是一个事先建立的是一个事先建立的定义函数定义函数F(x,xdata) 的的M-文件文件, 自变量为自变量为x和和xdata说明:x = lsqcurvefit (fun,x0,xdata,ydat
11、a,options);迭代初值迭代初值已知数据点已知数据点选项见无选项见无约束优化约束优化13 lsqnonlin用以求含参量用以求含参量x x(向量)的向量值函数(向量)的向量值函数 f(x)f(x)=(f=(f1 1(x),f(x),f2 2(x),(x),f,fn n(x)(x)T T 中的参量中的参量x x,使得,使得 最小。最小。 其中其中 fi(x)=f(x,xdatai,ydatai) =F(x,xdatai)-ydatai 22221)()()()()(xfxfxfxfxfnT2. lsqnonlin已知数据点:已知数据点: xdata=xdata=(xdata1,xdata2
12、,xdataxdatan n) ydata=ydata=(ydataydata1 1,ydataydata2 2,ydataydatan n)14输入格式为:输入格式为: 1) x=lsqnonlin(fun,x0); 2) x= lsqnonlin (fun,x0,options); 3) x= lsqnonlin (fun,x0,options,grad); 4) x,options= lsqnonlin (fun,x0,); 5) x,options,funval= lsqnonlin (fun,x0,);说明:x= lsqnonlinlsqnonlin (fun,x0,options)
13、;);fun是一个事先建立的是一个事先建立的定义函数定义函数f(x)的的M-文件,文件,自变量为自变量为x迭代初值迭代初值选项见无选项见无约束优化约束优化15100200 30040050060070080090010004.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59jt310jc210102. 0),(minjjktcbeakbaFj 例例2 用下面一组数据拟合用下面一组数据拟合 中的参数中的参数a,b,kktbeatc2 . 0 . 0)(该问题即解最优化问题:该问题即解最优化问题:16 1 1)编写)编写M-M-文件文件 curvefu
14、n1.mcurvefun1.m function f=curvefun1(x,tdata) f=x(1)+x(2)*exp(-0.02*x(3)*tdata) %其中其中 x(1)=a; x(2)=b;x(3)=k;2)输入命令)输入命令tdata=100:100:1000tdata=100:100:1000cdata=cdata=1e-03* *4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59;6.50,6.59; x0=0.2,0.05,0.05; x0=0.2
15、,0.05,0.05; x=lsqcurvefit (curvefun1,x0,tdata,cdata)x=lsqcurvefit (curvefun1,x0,tdata,cdata) f= f= curvefun1(x,tdata) F(x,tdata)= ,x=(a,b,k)Tktktbeabea),(10102. 002. 0解法解法1 1. 用命令用命令lsqcurvefitlsqcurvefit173 3)运算结果为)运算结果为:f =0.0043 0.0051 0.0056 0.0059 0.0061 f =0.0043 0.0051 0.0056 0.0059 0.0061 0.
16、0062 0.0062 0.0063 0.0063 0.0063 0.0062 0.0062 0.0063 0.0063 0.0063 x = 0.0063 -0.0034 0.2542 x = 0.0063 -0.0034 0.25424)结论)结论:a=0.0063, b=-0.0034, k=0.254218Tktktcbeacbea),(102. 0102. 0101 解法解法 2 用命令用命令lsqnonlin f(x)=F(x,tdata,ctada)= x=(a,b,k)1)编写编写M-M-文件文件 curvefun2.mcurvefun2.m function f=curvef
17、un2(x) tdata=100:100:1000; cdata=1e-03*4.54,4.99,5.35,5.65,5.90, 6.10,6.26,6.39,6.50,6.59; f=x(1)+x(2)*exp(-0.02*x(3)*tdata)- cdata2)输入命令)输入命令: x0=0.2,0.05,0.05;x=lsqnonlin(curvefun2,x0)f= curvefun2(x)函数函数curvefun2的自变量是的自变量是x,cdata和和tdata是已知参数,故应是已知参数,故应将将cdata tdata的值写在的值写在curvefun2.m中中193 3)运算结果为)
18、运算结果为 f =1.0e-003 f =1.0e-003 * *(0.2322 -0.1243 -0.2495 -0.2413 (0.2322 -0.1243 -0.2495 -0.2413 -0.1668 -0.0724 0.0241 0.1159 0.2030 0.2792-0.1668 -0.0724 0.0241 0.1159 0.2030 0.2792 x =0.0063 -0.0034 0.2542 x =0.0063 -0.0034 0.2542可以看出可以看出,两个命令的计算结果是相同的两个命令的计算结果是相同的.4)结论)结论:即拟合得即拟合得a=0.0063 b=-0.0
19、034 k=0.25420.0063 b=-0.0034 k=0.254220电阻问题电阻问题 温度温度t(0C) 20.5 32.7 51.0 73.0 95.7电阻电阻R( ) 765 826 873 942 1032例例. 由数据由数据拟合拟合R=a1t+a2方法方法1.1.用命令用命令 polyfit(x,y,m)得到得到 a1=3.3940, a2=702.4918方法方法2.直接用直接用yRa结果相同。结果相同。21 在实验方面在实验方面,对某人用快速静脉注射方式一次注对某人用快速静脉注射方式一次注入该药物入该药物300mg后后,在一定时刻在一定时刻t(小时小时)采集血药采集血药,
20、测测得血药浓度得血药浓度c(ug/ml)如下表如下表: t (h) 0.25 0.5 1 1.5 2 3 4 6 8c ( g/ml) 19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01 要设计给药方案要设计给药方案,必须知道给药后血药浓度随必须知道给药后血药浓度随时间变化的规律。从实验和理论两方面着手:时间变化的规律。从实验和理论两方面着手:3.3.血液容积血液容积v, t=0v, t=0注射剂量注射剂量d, d, 血药浓度立即为血药浓度立即为d/v.d/v.2.2.药物排除速率与血药浓度成正比,比例系数药物排除速率与血药浓度成正比,比例系数
21、k(0)k(0)模型假设模型假设1. 1. 机体看作一个房室,室内血药浓度均匀机体看作一个房室,室内血药浓度均匀一室模型一室模型模型建立模型建立d/c(0) 3得:由假设-kcdtdc 2得:由假设ktevdtc)( 在此,在此,d=300mg,t及及c(t)在某些点处的值见前表,)在某些点处的值见前表,需经拟合求出参数需经拟合求出参数k、v用线性最小二乘拟合用线性最小二乘拟合c(t)ktevdtc)()/ln(,ln21vdakacyktvdc)/ln(ln2/,121aedvakatay计算结果:计算结果:)(02.15),/1 (2347. 0lvhkd=300;t=0.25 0.5 1
22、 1.5 2 3 4 6 8;c=19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01;y=log(c);a=polyfit(t,y,1)k=-a(1)v=d/exp(a(2)程序:程序:用非线性最小用非线性最小二乘拟合二乘拟合c(t)给药方案给药方案 设计设计cc2c10t 设每次注射剂量D, 间隔时间 血药浓度c(t) 应c1 c(t) c2 初次剂量D0 应加大,0DD给药方案记为:给药方案记为:kecc2112ln1cck2、)( ,1220ccDcD1、计算结果:计算结果:9 . 3, 3 .225, 5 .3750DD)(4),(225
23、),(3750hmgDmgD给药方案:给药方案:c1=10,c2=25k=0.2347v=15.0225故可制定给药方案:故可制定给药方案:)(4),(225),(3750hmgDmgD即即: 首次注射首次注射375mg, 其余每次注射其余每次注射225mg, 注射的间隔时间为注射的间隔时间为4小时。小时。26练习练习1 用给定的多项式,如y=x3-6x2+5x-3,产生一组数据(xi,yi,i=1,2,n),再在yi上添加随机干扰(可用rand产生(0,1)均匀分布随机数,或用rands产生N(0,1)分布随机数),然后用xi和添加了随机干扰的yi作的3次多项式拟合,与原系数比较。 如果作2
24、或4次多项式拟合,结果如何?27 练习练习2、用电压V=10伏的电池给电容器充电,电容器上t时刻的电压为 ,其中V0是电容器的初始电压, 是充电常数。试由下面一组t,V数据确定V0, 。teVVVtv)()(0t (秒) 0.5 1 2 3 4 5 7 9V (伏)6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.6328用非线性最小二乘拟合用非线性最小二乘拟合c(t)-用用lsqcurvefit2、主程序、主程序lihe2.m如下如下cleartdata=0.25 0.5 1 1.5 2 3 4 6 8;cdata=19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01; x0=10,0.5;x=lsqcurvefit(curvefun3,x0,tdata,cdata);f=curvefun3(x,tdata) xMATLAB(lihe2)1 1、用、用M-M-文件文件curvefun3.m定义函数定义函数function f=curvefun3(x,tdata)d=300f=(x(1)d)*exp(-x(2)*tdata) % x(1)=v; x(2)=k ktevdtc)(