配色: 字号:
matlab拟合
2012-09-20 | 阅:  转:  |  分享 
  
用线性最小二乘拟合c(t)MATLAB(lihe1)计算结果:d=300;t=[0.250.511.523468];
c=[19.2118.1515.3614.1012.899.327.455.243.01];y=log(c);
a=polyfit(t,y,1)k=-a(1)v=d/exp(a(2))程序:用非线性最小二乘拟合c(t)给药方案设计
cc2c10?t设每次注射剂量D,间隔时间?血药浓度c(t)应c1?c(t)?c2初次剂量D0
应加大给药方案记为:2、1、计算结果:给药方案:c1=10,c2=25k=0.2347v=15.02故可制定给药
方案:即:首次注射375mg,其余每次注射225mg,注射的间隔时间为4小时。用非线性最小
二乘拟合c(t)-用lsqcurvefit2、主程序lihe2.m如下cleartdata=[0.250.511.5
23468];cdata=[19.2118.1515.3614.1012.899.327.455.243
.01];x0=[10,0.5];x=lsqcurvefit(''curvefun3'',x0,tdata,cdata);f
=curvefun3(x,tdata)xMATLAB(lihe2)1、用M-文件curvefun3.m定义函数func
tionf=curvefun3(x,tdata)d=300f=(x(1)\d)exp(-x(2)tdata)%
x(1)=v;x(2)=k练习1用给定的多项式,如y=x3-6x2+5x-3,产生一组数据(xi,yi,i=1,
2,…,n),再在yi上添加随机干扰(可用rand产生(0,1)均匀分布随机数,或用rands产生N(0,1)分布随机数),然后用
xi和添加了随机干扰的yi作的3次多项式拟合,与原系数比较。如果作2或4次多项式拟合,结果如何?练习2、用电压V=10伏的电池
给电容器充电,电容器上t时刻的电压为,其中V0是电容器的初始电压,是充电常数。试由下面一组t,V
数据确定V0,。估计水塔的流量2、解题思路3、算法设计与编程1、问题某居民区有一供居民用水的园柱形水塔,一
般可以通过测量其水位来估计水的流量,但面临的困难是,当水塔水位下降到设定的最低水位时,水泵自动启动向水塔供水,到设定的最高水位时停
止供水,这段时间无法测量水塔的水位和水泵的供水量.通常水泵每天供水一两次,每次约两小时.水塔是一个高12.2米,直径17.4米的
正园柱.按照设计,水塔水位降至约8.2米时,水泵自动启动,水位升到约10.8米时水泵停止工作.表1是某一天的水位测量记录,试估
计任何时刻(包括水泵正供水时)从水塔流出的水流量,及一天的总用水量.拟合拟合2.拟合的基本原理1.
拟合问题引例拟合问题引例1温度t(0C)20.532.751.073.095.7电阻R(
?)7658268739421032已知热敏电阻数据:求600C时的电阻R。设
R=at+ba,b为待定系数拟合问题引例2t(h)0.250.5
11.523468c(?g/m
l)19.2118.1515.3614.1012.899.327.455.243.01
已知一室模型快速静脉注射下的血药浓度数据(t=0注射300mg)求血药浓度随时间的变化规律c(t).作半对数坐标系(semi
logy)下的图形MATLAB(aa1)曲线拟合问题的提法已知一组(二维)数据,即平面上n个点(xi,yi
)i=1,…n,寻求一个函数(曲线)y=f(x),使f(x)在某种准则下与所有数据点最为接近,即曲线拟合得最好。+
++++++++xyy=f(x)(xi,yi)?i?i为点(xi,yi)与曲线y=f(x)的距
离拟合与插值的关系函数插值与曲线拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上是
完全不同的。实例:下面数据是某次实验所得,希望得到X和f之间的关系?MATLAB(cn)问题:给定一批数据点,需确定满
足特定要求的曲线或曲面解决方案:若不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,这就是数据拟合,又称曲线拟
合或曲面拟合。若要求所求曲线(面)通过所给所有数据点,就是插值问题;最临近插值、线性插值、样条插值与曲线拟合结果:曲线拟合问
题最常用的解法——线性最小二乘法的基本思路第一步:先选定一组函数r1(x),r2(x),…rm(x),mf(x)=a1r1(x)+a2r2(x)+…+amrm(x)(1)其中a1,a2,…am
为待定系数。第二步:确定a1,a2,…am的准则(最小二乘准则):使n个点(xi,yi)与曲线y=f(x)的距
离?i的平方和最小。记问题归结为,求a1,a2,…am使J(a1,a2,…am)最小。线性最小二乘法的求
解:预备知识超定方程组:方程个数大于未知量个数的方程组即Ra=y其中超定方程一般是不存在解的矛盾方程组。
如果有向量a使得
达到最小,则称a为上述超定方程的最小二乘解。线性最小二乘法的求解定理:当RTR可逆时,超定方程组(3)存在最
小二乘解,且即为方程组RTRa=RTy的解:a=(RTR)-1RTy曲线拟合的最小二乘法要解决的问题,实际上就是求以下超定
方程组的最小二乘解的问题。其中Ra=y(3)线性最小二乘拟合f(x)=a1r1(x)+…+amrm(
x)中函数{r1(x),…rm(x)}的选取1.通过机理分析建立数学模型来确定f(x);+++++++
+++++++++++++++++++++++f=a1+a2xf=a1+a2x+a
3x2f=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.对超定方程组可得最小二乘意义下的解。,用3.多项式在x处的值y可用以下命令计算:y=pol
yval(a,x)输出拟合多项式系数a=[a1,…am,am+1](数组))输入同长度的数组X,Y拟合多项式次
数即要求出二次多项式:中的使得:例对下面一组数据作二次多项式拟合最小?=-1112])
([iiiyxf1)输入以下命令:x=0:0.1:1;y=[-0.4471.9783.286.167
.087.347.669.569.489.3011.2];R=[(x.^2)''x''ones(11,1)];
A=R\y''MATLAB(zxec1)解法1.用解超定方程的方法2)计算结果:A=-9.810820.12
93-0.03171)输入以下命令:x=0:0.1:1;y=[-0.4471.9783.286.16
7.087.347.669.569.489.3011.2];A=polyfit(x,y,2)z=po
lyval(A,x);plot(x,y,''k+'',x,z,''r'')%作出数据点和拟合曲线的图形2)计算结果:A=
-9.810820.1293-0.0317解法2.用多项式拟合的命令MATLAB(zxec2)1.lsqcurv
efit已知数据点:xdata=(xdata1,xdata2,…,xdatan),ydata=
(ydata1,ydata2,…,ydatan)用MATLAB作非线性最小二乘拟合Matlab提供了两个求非
线性最小二乘拟合的函数:lsqcurvefit和lsqnonlin。两个命令都要先建立M-文件fun.m,在其中定义函数f(x),
但两者定义f(x)的方式是不同的,可参考例题.lsqcurvefit用以求含参量x(向量)的向量值函数F(x,xdata
)=(F(x,xdata1),…,F(x,xdatan))T中的参变量x(向量),使得输入格式为:(1)x=l
sqcurvefit(‘fun’,x0,xdata,ydata);(2)x=lsqcurvefit(‘fun’,x0,x
data,ydata,options);(3)x=lsqcurvefit(‘fun’,x0,xdata,ydata,opt
ions,’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)-ydatai2.
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,option
s,‘grad’);4)[x,options]=lsqnonlin(‘fun’,x0,…);5)[x,option
s,funval]=lsqnonlin(‘fun’,x0,…);说明:x=lsqnonlin(‘fun’,x0,opti
ons);fun是一个事先建立的定义函数f(x)的M-文件,自变量为x迭代初值选项见无约束优化例2用下面一组数据拟合
中的参数a,b,k该问题即解最优化问题:MATLAB(fzxec1)1)
编写M-文件curvefun1.mfunctionf=curvefun1(x,tdata)f=x(1)
+x(2)exp(-0.02x(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)
解法1.用命令lsqcurvefit3)运算结果为:f=0.00430.00510.00560.
00590.00610.00620.00620.00630.00630.00
63x=0.0063-0.00340.25424)结论:a=0.0063,b=-0.0034,k=0
.2542MATLAB(fzxec2)解法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.9
0,6.10,6.26,6.39,6.50,6.59];f=x(1)+x(2)exp
(-0.02x(3)tdata)-cdata2)输入命令:x0=[0.2,0.05,0.05];x=lsqnonli
n(''curvefun2'',x0)f=curvefun2(x)函数curvefun2的自变量是x,cdata和tdata是已
知参数,故应将cdatatdata的值写在curvefun2.m中3)运算结果为f=1.0e-003(0.23
22-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、给药方案问题3、水塔流量估计问题MATLAB(dianzu1)电阻问题温度t(0C)2
0.532.751.073.095.7电阻R(?)76582687394
21032例.由数据拟合R=a1t+a2方法1.用命令polyfit(x,y,m)得到a1=3.3940,a
2=702.4918方法2.直接用结果相同。MATLAB(dianzu2)一室模型:将整个机体看作一个房室,称中心室,室内
血药浓度是均匀的。快速静脉注射后,浓度立即上升;然后迅速下降。当浓度太低时,达不到预期的治疗效果;当浓度太高,又可能导致药物中毒或
副作用太强。临床上,每种药物有一个最小有效浓度c1和一个最大有效浓度c2。设计给药方案时,要使血药浓度保持在c1~c2之间。本
题设c1=10,c2=25(ug/ml).拟合问题实例2给药方案——一种新药用于临床之前,必须设计给药方案.
药物进入机体后血液输送到全身,在这个过程中不断地被吸收、分布、代谢,最终排出体外,药物在血液中的浓度,即单位体积血液中的药物含
量,称为血药浓度。在实验方面,对某人用快速静脉注射方式一次注入该药物300mg后,在一定时刻t(小时)采集血药,测
得血药浓度c(ug/ml)如下表:t(h)0.250.511
.523468c(?g/ml)19.2118.1515.3614.1012.899.327.455.243.01要设计给药方案,必须知道给药后血药浓度随时间变化的规律。从实验和理论两方面着手:给药方案1.在快速静脉注射的给药方式下,研究血药浓度(单位体积血液中的药物含量)的变化规律。tc2cc10?问题2.给定药物的最小有效浓度和最大治疗浓度,设计给药方案:每次注射剂量多大;间隔时间多长。分析理论:用一室模型研究血药浓度变化规律实验:对血药浓度数据作拟合,符合负指数变化规律3.血液容积v,t=0注射剂量d,血药浓度立即为d/v.2.药物排除速率与血药浓度成正比,比例系数k(>0)模型假设1.机体看作一个房室,室内血药浓度均匀—一室模型模型建立在此,d=300mg,t及c(t)在某些点处的值见前表,需经拟合求出参数k、v
献花(0)
+1
(本文系薇薇one图书...首藏)