资源预览内容
第1页 / 共60页
第2页 / 共60页
第3页 / 共60页
第4页 / 共60页
第5页 / 共60页
第6页 / 共60页
第7页 / 共60页
第8页 / 共60页
第9页 / 共60页
第10页 / 共60页
亲,该文档总共60页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1数 学 建 模拟 合 篇 2目的内容2、学习用Matlab软件求解拟合问题;1、了解数据拟合的基本内容;1、拟合问题引例及基本理论;4、实验作业;2、用数学软件求解拟合问题; 3、应用实例;3拟 合2.拟合的基本原理1. 拟合问题引例4拟 合 问 题 引 例 1温度t(0C) 20.5 32.7 51.0 73.0 95.7电阻R() 765 826 873 942 1032已知热敏电阻数据 :求600C时的电阻R。因此可以设R=at+ba,b为待定系数5拟 合 问 题 引 例 2t (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已知一室模型快速静脉注射下的血药浓度数据(t=0注射300mg)求血药浓度随时间的变化规律c(t).MATLAB(aa1)6曲 线 拟 合 问 题 的 提 法已知一组(二维)数据,即平面上 n个点(xi,yi) i=1,n, 寻求一个函数(曲线)y=f(x), 使 f(x) 在某种准则下与所有 数据点最为接近,即曲线拟合得最好。 + + + +xyy=f(x)(xi,yi)i其中 i =yi -f(xi ) 尽可能小!误差平方和:7拟合与插值的关系总之, 函数插值与曲线拟合都是要根据一组数据构造一个函 数作为近似,由于近似的要求不同,二者的数学方法上是完全 不同的。实例:下面数据是某次实验所得,希望得到x和 f之间的关系。MATLAB(cn)问题:给定一批数据点,需确定满足特定要求的曲线或曲面 解决方案:若不要求曲线(面)通过所有数据点,而是要求它反映对象整 体的变化趋势,这就是数据拟合,又称曲线拟合或曲面拟合。若要求所求曲线(面)通过所给所有数据点,就是插值问题;下面我们看一下插值和拟合的异同:8曲线拟合与最临近插值进行比较9曲线拟合与线性插值进行比较10曲线拟合与样条插值进行比较11线性拟合问题的解法最小二乘法的基本思路,第一步:先选定一组函数 r1(x), r2(x), ,rm(x), m0f=a1+a2x+a3x2a30f=ae-bx a,b015非线性最小二乘拟合的线性化如下非线性拟合函数可以线性化:16用MATLAB解拟合问题1、线性最小二乘拟合2、非线性最小二乘拟合17用MATLAB作线性最小二乘拟合1. 作多项式f(x)=a1xm+ +amx+am+1拟合,可利用已有 程序:a=polyfit(x,y,m)2. 对超定方程组可得最小二乘意义下的解。,用n 多项式在x处的值y可用以下命令计算:y = polyval(a, x)输出拟合多项式系数a=a1,am,am+1 (数组)输入同长度的数组x, y拟合多项式次数,特别m=n-1时,所得多项式为插值多项式!18即要求 出二次多项式:中 的使得:例1 对下面一组数据作二次多项式拟合,191)输入以下命令: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=RyMATLAB(zxec1)解法1用解超定方程的方法2)计算结果: a = -9.8108 20.1293 -0.0317201)输入以下命令: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;a=polyfit(x,y,2)z=polyval(a,x);plot(x,y,k+,x,z,r) %作出数据点和拟合曲线的图形2)计算结果: a = -9.8108 20.1293 -0.0317解法2用多项式拟合的命令MATLAB(zxec2)211. lsqcurvefit(重点掌握!) 已知数据点: xdata=(xdata1,xdata2,xdatan)ydata=(ydata1,ydata2,ydatan)用MATLAB作非线性最小二乘拟合Matlab的提供了三个求非线性最小二乘拟合的函数: lsqcurvefit,nlinfit和lsqnonlinlsqcurvefit 用以求由被拟合的非线性函数F(x,xdata) 所确定的含参量x(向量)的向量值函数F(x,xdata)=(F(x,xdata1),F(x,xdatan)T中的参变量x(向量),使得 22调用格式为: x = lsqcurvefit (fun,x0,xdata,ydata); fun是一个事先 建立的定义函 数F(x,xdata) 的M-文件, 自变量 为x和xdata说明:x = lsqcurvefit (fun,x0,xdata,ydata);初值已知数据点待求的非 线性参数232. nlinfit(了解)nlinfit()实际上是非线性回归函数,因此可以方便的求解最 小二乘问题,其应用格式为x = nlinfit (xdata, ydata,fun,x0);和函数lsqcurvefit()相类似,只是参数的调用顺序不同。24lsqnonlin用以求含参量x(向量)的向量值函数f(x)=(f1(x), f2(x), , fn(x)T 中的参量x,使得最小。其中 fi(x)= f(x, xdatai, ydatai)= F(x, xdatai)- ydatai 3. lsqnonlin(了解)已知数据点:xdata=(xdata1, xdata2, , xdatan)ydata=(ydata1, ydata2, , ydatan)注意其中f(x)的定义!25调用格式为:x=lsqnonlin(fun,x0);说明:x= lsqnonlin (fun,x0);fun是一个事 先建立的定 义函数 f(x)的 M-文件,自 变量为x迭代初值待求的非 线性参数注意其中fun的定义和前两个函数不同!26例2 已知数据表 x0.020.020.060.060.110.110.220.220.560.561.11.1 y764797107123139159152191201207200该数据满足Michaelis-Menten方程 其中 为参数,求相应的非线性最小二乘拟合 。 散点图27解:输入xdata=0.02,0.02,0.06,0.06,0.11,0.11,0.22,0.22,0.56,0.56,1.1,1.1;ydata=76,47,97,107,123,139,159,152,191,201,207,200;f=inline(p(1)*xdata./(p(2)+xdata),p,xdata);%也可编写函数文件p=lsqcurvefit(f,200,0.1,xdata,ydata);%注意其中第一个参数!%也可以用nlinfit 来求解! p=212.6836 0.0641拟合曲线注:用nlinfit 来求解格式为 p=nlinfit(xdata,ydata,f,200,0.1 )因此非线性最小二乘拟 合函数为:28下面用lsqnonlin来进行求解,首先编写目标函数(fun.m)function y=fun(p)xdata=0.02,0.02,0.06,0.06,0.11,0.11,0.22,0.22,0.56,0.56,1.1,1.1;ydata=76,47,97,107,123,139,159,152,191,201,207,200;y= p(1)*xdata./(p(2)+xdata)-ydata;然后用lsqnonlin()函数求解,输入p=lsqnonlin(fun,200,0.1) %或者lsqnonlin(fun,200,0.1)得到如下结果p=212.6836 0.0641(和前面结果完全相同!)29例3 用下面一组数据拟合中的参数a,b,k该问题即解最优化问题:30MATLAB(fzxec1)2)输入命令 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; %续行符为 “”x0=0.2,0.05,0.05;x=lsqcurvefit (curvefun1,x0,tdata,cdata)%或者 x=nlinfit(tdata,cdata,myfun,x0)f= curvefun1(x,tdata) %拟合函数在观测点的值F(x,tdata)= ,x=(a,b,k)解法1. 用命令lsqcurvefit1)编写M-文件 curvefun1.mfunction f=curvefun1(x,tdata)f=x(1)+x(2)*exp(-0.02*x(3)*tdata); %其中 x(1)=a; x(2)=b;x(3)=k;313)运算结果为:x = 0.0063 -0.0034 0.2542 f =0.0043 0.0051 0.0056 0.0059 0.0061 0.0062 0.0062 0.0063 0.0063 0.00634)结论:a=0.0063, b=-0.0034, k=0.254232MATLAB(fzxec2)解法 2 用命令lsqnonlinf(x)=F(x,tdata,ctada)=x=(a,b,k)1)编写M-文件 curvefun2.mfunction f=curvefun2(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中333)运算结果为x =0.0063 -0.0034 0.2542 f =1.0e-003 *(0.2322 -0.1243 -0.2495 -0.2413 -0.1668 -0.0724 0.0241 0.1159 0.2030 0.2792可以看出,两个命令的计算结果是相同的.4)结论:即拟合得a=0.0063 b=-0.0034 k=0.254234MATLAB解应用问题实例1、电阻问题2、给药方案问题3、估计水塔的水流量35MATLAB(dianzu1)电阻问题 温度t(0C) 20.5 32.7 51.0 73.0 95.7电阻R() 765 826 873 942 1032例. 由数据拟合R=a1t+a2方法1.用命令polyfit(x,y,m)得到 a1=3.3940, a2=702.4918方法2.直接用结果相同。MATLAB(dianzu2)36一室模型:将整个机体看作一个房室,称中心室,室内血药 浓度是均匀的。快速静脉注射后,浓度立即上升;然后迅速 下降。当浓度太低时,达不到预期的
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号