文档介绍:MATLAB插值与拟合
 
§1曲线拟合
1.         多项式曲线拟合函数:polyfit( )
调用格式: p=polyfit(x,y,n)
[p,s]= polyfit(x,y,n)
说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。矩阵s用于生成预测值的误差估计。(见下一函数polyval)
例:由离散数据
x
0
.1
.2
.3
.4
.5
.6
.7
.8
.9
1
y
.3
.5
1
.6
.4
.8
2
拟合出多项式。
程序:
x=0:.1:1;
y=[.3 .5 1 .6 .4 .8 2]
n=3;
p=polyfit(x,y,n)
xi=linspace(0,1,100);
z=polyval(p,xi); %多项式求值
plot(x,y,’o’,xi,z,’k:’,x,y,’b’)
legend(‘原始数据’,’3阶曲线’)
结果:
p =
- -
多项式为:-+-
曲线拟合图形:
也可由函数给出数据。
例3:x=1:20,y=x+3*sin(x)
程序:
x=1:20;
y=x+3*sin(x);
p=polyfit(x,y,6)
xi=1inspace(1,20,100);
z=poyval(p,xi); %多项式求值函数
plot(x,y,’o’,xi,z,’k:’,x,y,’b’)
legend(‘原始数据’,’6阶曲线’)
结果:
p =
- - -
再用10阶多项式拟合
程序:x=1:20;
y=x+3*sin(x);
p=polyfit(x,y,10)
xi=linspace(1,20,100);
z=polyval(p,xi);
plot(x,y,'o',xi,z,'k:',x,y,'b')
legend('原始数据','10阶多项式')
结果:p =
Columns 1 through 7
- - -
Columns 8 through 11
- -
可用不同阶的多项式来拟合数据,但也不是阶数越高拟合的越好。
1、2    多项式曲线求值函数:polyval( )
调用格式: y=polyval(p,x)
说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。
1、3   向自定义函数拟合
对于给定的数据,根据经验拟合为带有待定常数的自定义函数。
所用函数:nlinfit( )
调用格式: [beta,r,J]=nlinfit(X,y,’fun’,betao)
说明:beta返回函数’fun’中的待定常数;r表示残差;J表示雅可比矩阵。X,y为数据;‘fun’自定义函数;beta0待定常数初值。
例:在化工生产中获得的氯气的级分y随生产时间x下降,假定在x≥8时,y与x之间有如下形式的非线性模型:
现收集了44组数据,利用该数据通过拟合确定非线性模型中的待定常数。
x y x y x y
8 16 28
8 18 28
10 18 30
10 20 30
10 20 30
10 20 32
12 20 32
12 22 34
12 22 36
12 24 36
14 24 38
14 24 38
14 26 40
16 26 42
16 26
首先定义非线性函数的m文件:
function yy=model(beta0,x)
a=beta0(1);
b=beta0(2);
yy=a+(