插值与拟合
常用方法——最小二乘法拟合
令: f (x) a1r1(x) a2r2 (x) .... amrm (x)
其中:rk(x)为事先选定的一组关于x的函数,ak为系数,
即求解ak,使下式最小
m
2
J (a1, a2 ,...,am ) min [ f ( xi ) yi ]
i 1
即使:
J 0, k (0, k ) ak
拉格朗日插值法
已知x0、x1、x2、x3、、、xn和y0、y1、y2、y3、、、yn 则可以构造一个经过这n+1个点的次数不超过n的多 项式y=Ln(x),使其满足:
Ln(xk)=yk,k=0、1、2、、、n •这样的Ln(x)就是通过拉格朗日插值得到的函数关系 •这样的方法叫做拉格朗日插值
注: 通过上述方法可得到一个次数不超过n的多项
2
1 n1
m1 1 (1 1)m1
m2
2 (1 2 )m2
n2
2
..
mn
1
n1
(1
n 1 )mn 1
3.代入原式
用matlab解插值
基本格式:Interp1(x,y,cx,'methed')
其中:x,y为已知的坐标 cx为待插值的点的横坐标 methed为插值方法,有如下:
10
11
12
13
14
15
16
10.20 10.32 10.42 10.50 10.55 10.58 10.60
解 :数据点描绘
11
10
9
8
7
6
5
4
0
2
4
6
8
10
12
14
16
令
y t 1
, 1 ab1
at b a b / t
y
t
记
Y 1,X 1 ,
y
t
则 Y a bX 。
tj
1
2
3
4
…
插值与拟合
插值与拟合是什么? 二者又有什么区别呢?
插值
35
拟合
35
30
30
25
25
20
20
15
15
10 10
5
1
2
3
4
5
6
7
5
1
2
3
4
5
6
7
插值:过已知点求最能反映该离散的点的变化趋势的函 数 拟合:不必过已知点.......
思考:
我们为什么要进行差值拟合呢? 插值拟合过后有能得到什么有用价值呢?
函数r(x)的选取
方法一:通过先画出(xi,yi)的离散点的图观察数据的变 化趋势 方法二:通过题目中的机理分析
matlab中的拟合
对于多项式拟合有现成的函数可直接使用,而对于r(x)的其 他形式则可以通过变换使之成为多项式的形式,再求解
多项式拟合:polyfit函数
[p s]=polyfit(xdata,ydata,拟合次数)
已知:
(xk , yk ), k (1, n)
函数关 系为:
其中:
S(x)
yk 1
[
yk
yk1 hk 1
hk 1 6
(2mk 1
mk
)](x
xk 1 )
mk 1 2
(x
xk 1 ) 2
mk mk1 k xk1 xk , k 0,1,2,..., n
mk满足: 其中:
(1 k )mk1 2mk kmk1 k , k 0,1,..., n 1
k
hk hk 1 hk
,1 k
hk 1 hk 1 hk
k
6
hk 1 hk
( yk 1 yk hk
yk yk 1 ) hk 1
求解步骤:
1.计 k , k
算 2.求解mk,构造矩阵
2
1 2
1 2 2
1 n2
... r2 ( xn )
... rm ( x1 ) ... rm ( x2 ) ... ... ... rm ( xn )
A (a1, a2 , a3 ,..,am )T
Y ( y1, y2, y3 ,...,ym )T
求解系数ai
n
m
n
所以由式: rk (xi ) rk (xi )ak rk (xi ) yi
12
11
10
9
8
7
6
5
4
0
2
4
6
8
10
12
14
16
非线性拟合:lsqcurvefit与lsqnonlin拟合
fun=@(a,x) a(1)*x+a(2)*x^2+a(3)*x^3+a(4)*x^4
s=lsqcurvefit(fun,x0,xdata,ydata) y=polyval(s,xdata)
线性插值:linear 三次样条插值:spline
思考: 这里的cx有 什么要求呢?
三次插值:cubic
最近领点插值:nearest
另外,还可以推广至二维插值,其函数变为Interp2,其插 值方法不变
注:在二维插值中,x,y为散乱点时,用函数 griddata可以进行插值
各种插值方法的比较
各自都有什么优点呢?怎么选择呢?
式,并且此多项式是唯一的
线性插值——当给出的已知点数为2时
构造函数:
y y0 y1 y0 (x x0) x1 x0
化简:
L(x)
y0
x x1 x0 x1
y1
x1 x0 x x0
令:
l0 (x)
x x1 x0 x1
, l1(x)
x x0 x1 x0
则: L(x) y0l0 (x) y1l1(x) 其中: l0 (x0 ) 1, l0 (x1) 0;l1(x0 ) 0, l1(x1) 1
xj
1
2
3
4
yj = ln pj 1.945 2.398 2.833 3.296
通过matlab解得:a0 = 1.496 , a1 = 0.4488
A ea0 4.464
M a1 0.4488
所以:
p(x) = 4.464 e0.4488 x
例4、已知
tj 1
2
3
456
78
9
yj 4.00 6.40 8.00 8.80 9.22 9.50 9.70 9.86 10.00
Xj
1.00 0.50 0.33 0.25
…
yj
4.00 6.40 8.00 8.80
…
Yj
0.250 0.156 0.125 0.114
…
解得:a = 0.0801 , b = 0.1319 。
即
y
t
0.0847t 0.1319
x=1:16 y=[4.00 plot(x,y,'r*') h=1./x t=1./y p=polyfit(h,t,1) tt=polyval(p,h) ttt=1./tt plot(x,ttt,'g-') hold on plot(x,y,'*')
注:在使用lsqcurvefit函数时先要定义一个关系式fun 然后再对其拟合 fun后的函数式要通过散点图来确定要拟合为函数形式 s是拟合后的系数,x0是迭代的初始值,经过一系列
迭代后便得到s的值 lsqnonlin与lsqcurvefit类似,只是其求解a的方法不同,
格式与用法完全相同 缺点:这两种函数的最大缺点就是x0无法确定,因此
需要不断变换x0的值,所以实用性不大
y=polyval(p,xdata)
其中:
p为得到拟合函数的系数
s为拟合的精度
y是求出拟合曲线上xdata对应的函数值,
例:用形如 p(x) = AeM x 的函数拟合下列数据
xj 1 2 3 4 pj 7 11 17 27
解:由 p(x) = AeM x 得
lnp = lnA + M x
记 :y = ln p , a0 = lnA , a1 = M , 则有 y (x) a0 a1x
原图
三次插值
三次样条插值
100 80
100 80
100 80
z
z
z
60
3
2
5
y 10 x
线性插值
60
3
2
5
y 10 x
最近邻点插值
60
3
2
5
y 10 x
100 80
100 80
z
z
60
3
2
5
y 10 x
60 3 5 2
y 10 x
拟合
根据已知的离散的点,通过一定的方法,得到与 这些离散的点距离最近的函数关系式,这就是拟 合
i 1
k 1
i 1
可得: RT RA RTY
定理:当RRT可逆时上述方程存在最小二乘解, 解为A=(RTR)-1RTY
所以可以解得系数ak
r(x)的主要类型:
• 直线
y ax b
• 多项式
m
y
ai xi
i0
• 反比例函数
y
a1 x
a2
• 指数函数
y a1ea2
怎样选取合适的r(x) 的表达式呢?
同理:当给出n+1个点时:
n
函数为: Ln (x) yklk (x) k 0
其中:
lk
(
x)
(
( xk
x x0)(x x0 )(xk