10.拟合
原创
©著作权归作者所有:来自51CTO博客作者小怪兽会微笑的原创作品,请联系作者获取转载授权,否则将追究法律责任
拟合
一.拟合问题
拟合与插值的区别例题
二.求解办法-线性最小二乘法
例题
matab代码:
x=0.1:0.1: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=R\y'
matab代码:
=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')
三.非线性函数拟合问题
例题
使用lsqcurvefit命令求解
先编写M文件 curvefun1.m定义函数,代码为
function f=curvefun1(x,tdata)
f=x(1)+x(2)*exp(-0.02*x(3)*tdata)
再在命令窗口输入下面的matlab代码:
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)
f= curvefun1(x,tdata)
使用lsqnonlin命令求解
先编写M文件 curvefun2.m定义函数,代码为
curvefun2.m
function 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)- cdata
再在命令窗口输入下面的matlab代码:
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)
f= curvefun1(x,tdata)
四.拟合问题实例-给药方案
1.题目
2.模型假设
3.模型建立
4.求解
用线性最小二乘法拟合求解
d=300;
t=[0.25 0.5 1 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)-用lsqcurvefit
1)先新建curvefun3.m定义函数
function f=curvefun3(x,tdata)
d=300
f=(x(1)\d)*exp(-x(2)*tdata)
2)命令窗口输入
tdata=[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',x,tdata,cdata);
f=curvefun3(x,tdata)
5.给药方案设计