您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 药学 > 数值计算插值与拟合(给药方案估计水塔的水流量)
插值与拟合一、插值1、插值问题:不知道某一函数f(x)在待定范围[a,b]上的具体表达式,而只能通过实验测量得到该函数在一系列点a≤x1,x2,...,xn≤b上的值y0,y1,y2,...,yn,需要找一个简单的函数P(x)来近似地代替f(x),要求满足:P(xi)=yi(i=1,2,...,n),此问题称为插值问题。P(x)称为f(x)的插值函数,x1,x2,...,xn称为插值节点,f(xi)称为插值条件。几种常用的插值方法1、多项式插值2、样条插值1、多项式插值方法设y=f(x)在n+1个互异点上的x0,x1,x2,...,xn上的值y0,y1,y2,...,yn,要求一个次数不超过n次的代数多项式Pn(x)=a0+a1x+a2x2+…anxn使之在节点上满足Pn(xi)=f(xi)几种常用的多项式插值拉格朗日插值:00()[()]nninjjijiijxxpxyxx牛顿插值Hermite插值2、样条插值方法设给定区间[a,b]的一个分化:a=x0x1…xn=b,如果函数s(x)满足条件:在每个子区间[xi-1,xi]上是k次多项式,且具有直到k-1阶的连续导数,则称s(x)为一个k次多项式样条。广泛使用的样条函数(1)二次样条(2)三次样条(3)B样条。二次样条的定义设[a,b]的一个划分:a=x0x1,x2,...,xn=b,函数f(x)各节点的值分别为:f(xi)=yi(i=1,2,...,n)如果二次样条函数:满足:S(xi)=yi(i=1,2,...,n)三次样条函数的定义设[a,b]的一个划分:a=x0x1,x2,...,xn=b,函数f(x)各节点的值分别为:f(xi)=yi(i=1,2,...,n)如果三次样条函数:3满足:S(xi)=yi(i=1,2,...,n)数据的拟合2.拟合的基本原理1.拟合问题引例3.用MATLAB求解拟合问题4.应用举例5.插值与拟合的比较拟合问题引例一电阻问题温度t(0C)20.532.751.073.095.7电阻R()7658268739421032已知热敏电阻电阻值与温度的数据:求600C时的电阻R。2040608010070080090010001100设R=at+ba,b为待定系数解答拟合问题引例二给药问题t(h)0.250.511.523468c(g/ml)19.2118.1515.3614.1012.899.327.455.243.01已知一室模型快速静脉注射下的血药浓度数据(t=0注射300mg)求血药浓度随时间的变化规律c(t).作半对数坐标系(semilogy)下的图形为待定系数kcectckt,)(002468100101102MATLAB(aa1)解答曲线拟合问题的提法已知一组(二维)数据,即平面上n个点(xi,yi)i=1,…n,寻求一个函数(曲线)y=f(x),使f(x)在某种准则下与所有数据点最为接近,即曲线拟合得最好。+++++++++xyy=f(x)(xi,yi)ii为点(xi,yi)与曲线y=f(x)的距离曲线拟合问题最常用的解法——线性最小二乘法的基本思路第一步:先选定一组函数r1(x),r2(x),…rm(x),mn,令f(x)=a1r1(x)+a2r2(x)+…+amrm(x)(1)其中a1,a2,…am为待定系数。第二步:确定a1,a2,…am的准则(最小二乘准则):使n个点(xi,yi)与曲线y=f(x)的距离i的平方和最小。记)2(])([])([),,(211211221iiknimkkininiiimyxrayxfaaaJ问题归结为,求a1,a2,…am使J(a1,a2,…am)最小。线性最小二乘法的求解定理:当RTR可逆时,超定方程组存在最小二乘解,且其解可表示为下列形式:a=(RTR)-1RTya=R\y曲线拟合的最小二乘法要解决的问题,实际上就是求以下超定方程组的最小二乘解的问题。Ra=ynmnmnnmyyyaaarrrrrrR112111211,,其中Ra=y线性最小二乘拟合f(x)=a1r1(x)+…+amrm(x)中函数{r1(x),…rm(x)}的选取1.通过机理分析建立数学模型来确定f(x);++++++++++++++++++++++++++++++f=a1+a2xf=a1+a2x+a3x2f=a1+a2x+a3x2f=a1+a2/xf=aebxf=ae-bx2.将数据(xi,yi)i=1,…n作图,通过直观判断确定f(x):用MATLAB解拟合问题1、线性最小二乘拟合2、非线性最小二乘拟合用MATLAB作线性最小二乘拟合1.作多项式f(x)=a1xm+…+amx+am+1拟合,可利用已有程序:a=polyfit(x,y,m)2.对超定方程组)(11nmyaRnmmn可得最小二乘意义下的解。,用yRa\3.多项式在x处的值y可用以下命令计算:y=polyval(a,x)输出拟合多项式系数a=[a1,…am,am+1](数组)输入同长度的数组X,Y拟合多项式次数1.lsqcurvefit已知数据点:xdata=(xdata1,xdata2,…,xdatan),ydata=(ydata1,ydata2,…,ydatan)用MATLAB作非线性最小二乘拟合Matlab的提供了两个求非线性最小二乘拟合的函数:lsqcurvefit和lsqnonlin。两个命令都要先建立M-文件fun.m,在其中定义函数f(x),但两者定义f(x)的方式是不同的,可参考例题.最小)),((21niiiydataxdataxFlsqcurvefit用以求含参量x(向量)的向量值函数F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T中的参变量x(向量),使得输入格式为:(1)x=lsqcurvefit(‘fun’,x0,xdata,ydata);(2)x=lsqcurvefit(‘fun’,x0,xdata,ydata,options);(3)x=lsqcurvefit(‘fun’,x0,xdata,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,ydata,options);迭代初值已知数据点选项见无约束优化lsqnonlin用以求含参量x(向量)的向量值函数f(x)=(f1(x),f2(x),…,fn(x))T中的参量x,使得最小。其中fi(x)=f(x,xdatai,ydatai)=F(x,xdatai)-ydatai22212()()()()()Tnfxfxfxfxfx2.lsqnonlin已知数据点:xdata=(xdata1,xdata2,…,xdatan)ydata=(ydata1,ydata2,…,ydatan)输入格式为: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=lsqnonlin(‘fun’,x0,options);fun是一个事先建立的定义函数f(x)的M-文件,自变量为x迭代初值选项见无约束优化10020030040050060070080090010004.544.995.355.655.906.106.266.396.506.59jt310jc100.0221min(,,)[]jktjjFabkabec例2用下面一组数据拟合中的参数a,b,k0.0.2()ktctabe该问题即解最优化问题:MATLAB(fzxec1)1)编写M-文件curvefun1.mfunctionf=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:1000cdata=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)f=curvefun1(x,tdata)F(x,tdata)=,x=(a,b,k)1010.020.02(,,)ktktTabeabe解法1.用命令lsqcurvefit3)运算结果为:f=0.00430.00510.00560.00590.00610.00620.00620.00630.00630.0063x=0.0063-0.00340.25424)结论:a=0.0063,b=-0.0034,k=0.2542MATLAB(fzxec2)1010.020.0211(,,)ktktTabecabec解法2用命令lsqnonlinf(x)=F(x,tdata,ctada)=x=(a,b,k)1)编写M-文件curvefun2.mfunctionf=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是已知参数,故应将cdatatdata的值写在curvefun2.m中3)运算结果为f=1.0e-003*(0.2322-0.1243-0.2495-0.2413-0.1668-0.07240.02410.11590.20300.2792x=0.0063-0.00340.2542可以看出,两个命令的计算结果是相同的.4)结论:即拟合得a=0.0063b=-0.0034k=0.2542MATLAB解拟合问题应用实例1、电阻问题2、给药方案问题MATLAB(dianzu1)引例一电阻问题解答温度t(0C)20.532.751.073.095.7电阻R()7658268739421032例1.由数据拟合R=a1t+a2方法1.用命令polyfit(x,y,m)得到a1=3.3940,a2=702.4918方法2.直接用\aRy结果相同。MATLAB(dianzu2)一室模型:将整个机体看作一个房室,称中心室,室内血药浓度是均匀的。快速静脉注射后,浓度立即上升;然后迅速下降。当浓度太低时,达不到预期的治疗效果;当浓度太高,又可能导致药物中毒或副作用太强。临床上,每种药物有一个最小有效浓度c1和一个最大有效浓度c2。设计给药方案时,要使血药浓度保持在c1~c2之间。本题设c1=10,c2=25(ug/ml).引例二给药方案解答一种新药用于临床之前,必须设计给药方案.药物进入机体后血液输送到全身,在这个过程中不断地被吸收、分布、代谢,最终排出体外,药物在血液中的浓
本文标题:数值计算插值与拟合(给药方案估计水塔的水流量)
链接地址:https://www.777doc.com/doc-364346 .html