第七讲 MATLAB在插值与逼近中的应用Word文档下载推荐.docx
《第七讲 MATLAB在插值与逼近中的应用Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第七讲 MATLAB在插值与逼近中的应用Word文档下载推荐.docx(22页珍藏版)》请在冰点文库上搜索。
主要算法有Lagrange插值、Newton插值、分段线性插值、Hermite插值及三次样条插值等。
1.5Lagrange插值
1.5.1线性插值
过函数y=f(x)上的两点(x0,y0)(x1,y1)作一直线p1(x)近似地替代f(x)
即:
p1(x0)=y0p1(x1)=y1
由点斜式
1.5.2抛物插值
过函数y=f(x)上的三点(x0,y0),(x1,y1),(x2,y2)作一抛物线p2(x)近似地替代f(x)
p2(x0)=y0p2(x1)=y1p2(x2)=y2
作二次式l0(x),使其满足
l0(x0)=1,l0(x1)=0,l0(x2)=0,
易推出:
同理
则
1.5.3Lagrange插值
设函数y=f(x)在给定的两两互异的节点x0,x1,…,xn上的函数值为y0,y1,…,yn,求作一个次数≤n的多项式
使它满足
这就是Lagrange插值多项式
1.5.4Lagrange插值的流程图
1.5.5Lagrange编程
functiony=lagrange(x0,y0,x)
%lagrangeinsert
n=length(x0);
p=0;
fori=1:
n
l=1.0;
forj=1:
ifj~=i
l=l*(x-x0(j))/(x0(i)-x0(j));
end
p=p+l*y0(i);
end
y=p;
例
例给出f(x)=e-x的数值表,用lagrange插值计算e-0.2的近似值
x
0.10
0.15
0.25
0.30
ln(x)
0.
x0=[0.100.150.250.3];
y0=[0.0.0.0.];
y=lagrange(x0,y0,0.2)
y=
0.6667
例给出f(x)=lnx的数值表,用lagrange插值计算ln0.54的近似值
0.4
0.5
0.6
0.7
0.8
-0.
x0=[0.4:
0.1:
0.8];
y0=[-0.-0.-0.-0.-0.];
y=lagrange(x0,y0,0.54)
y=-0.
y=log(0.54)
y=-0.3817
1.6分段插值(将插值区间划分小区间[xi,xi+1],在每个小区间构造插值多项式pi(x),将每个小区间插值多项式pi(x)拼接)
1.6.1高次插值的Runge现象
对于函数
x=[-5:
1:
5];
y=1./(1+x.^2);
x0=[-5:
y0=1./(1+x0.^2);
y1=lagrange(x,y,x0);
plot(x0,y1,'
--or'
)
holdon
plot(x0,y0,'
-b'
clf
x1=[-5:
0];
y1=1./(1+x1.^2);
x2=[0:
y2=1./(1+x2.^2);
x3=[-5:
x4=[0:
y3=lagrange(x1,y1,x3);
y4=lagrange(x2,y2,x4);
plot(x3,y3,'
or'
x4,y4,'
+r'
)
1.7MATLAB插值函数
插值函数及其功能
函数
功能描述
interp1
一维插值
interp2
二维插值
interp3
三维插值
interpft
一维快速傅立叶插值
interpn
N-D维插值
spline
三次样条数据插值
pchip
保形分段三次插值(分段三次Hermit插值多项式)
yi=interp1(x,y,xi,method)
methodsare:
'
nearest'
-nearestneighborinterpolation
linear'
-linearinterpolation
spline'
-piecewisecubicsplineinterpolation(SPLINE)
pchip'
-shape-preservingpiecewisecubicinterpolation
cubic'
-sameas'
v5cubic'
-thecubicinterpolationfromMATLAB5,whichdoesnot
extrapolateanduses'
ifXisnotequallyspaced.
x=0:
8;
y=sin(x);
xi=0:
ni=interp1(x,y,xi,'
);
li=interp1(x,y,xi,'
si=interp1(x,y,xi,'
ci=interp1(x,y,xi,'
cublic'
plot(x,y,'
o'
xi,ni,'
ms'
xi,li,'
b*'
xi,ci,'
k+'
xi,si,'
r-'
legend('
原数据'
'
)
1.8样条曲线的MATLAB实现
1.8.1样条曲线在工程实践与科学中的应用
●样条曲线拟合问题:
由试验或观测得到了一批数据点,要求用一个函数近似地表明数据点间的函数关系,并画出函数的样条曲线。
●样条曲线插值问题:
由试验、观测或计算得到了若干离散点组成的点列,要求用光滑的样条把这些离散点联结起来。
●样条曲线逼近问题:
在样条曲线形状设计中,给定了折线轮廓,要求用样条曲线逼近这个折线轮廓。
MATLAB专门提供了样条工具箱,以便能够方便地处理各种数据,生成样条曲线。
1.8.2Splinetool的使用
功能:
用一系列方法生成各种样条曲线
语法:
splinetool(x,y)(回车)根据数组x,y在图形用户界面下生成样条曲线。
splinetool(回车)启动图形用户界面
选择数据输入的方式(如选第一项Provideyouowndata)
x=linspace(0,2*pi,31)y=cos(x)
选择各种生成样条曲线的方法:
三次样条插值法,可选择各种约束条件
平滑样条法,可选择函数的阶数(4或6),可改变精度的允许值
最小二乘法,可选择函数的阶数(1到14)
样条插值法,可选择函数的阶数(1到14)
选择方法的辅助图形(通过View菜单)
显示样条函数的一阶导数曲线图
显示样条函数的二阶导数曲线图
显示误差曲线图
第一个点的三次导数和第二点的三次导数一样;
最后一个点的三次导数和倒数第二个点一样
complete'
or'
clamped'
第一类边界条件(缺省边界条件)
第二类边界条件
周期(第三类)边界条件
使最后一个点的二阶导数等于零
自然边界条件
用所给定四个点通过Lagrange插值法生成三次样条曲线
第一类边界条件:
给定函数在x0,xn端点处的一阶导数,
第二类边界条件:
给定函数在x0,xn端点处的二阶导数,
当函数在x0,xn端点处的二阶导数等于0时,称为自然边界条件,此时的样条函数称为自然样条函数
第三类边界条件:
设f(x)是周期函数,并设x0,xn是一个周期,给定函数在x0,xn端点处的一阶导数和二阶导数相等
通过菜单中各项选择,得到所需样条曲线。
1.9最小二乘拟合
对于有限区间[a,b]上的连续函数f(x),找到一个多项式p(x),使得f(x)-p(x)的欧几里德模
小于某一误差限ε
1.9.1利用polyfit功能函数进行多项式拟合
例用最小二乘法拟合如下数据
1.0
1.5
2.0
2.5
3.0
y
1.75
2.45
3.81
4.80
7.00
8.60
假设拟合多项式为f=a0+a1*x+a2x2
x=[0.51.01.52.02.53.0];
y=[1.752.453.814.807.008.60];
a=polyfit(x,y,2)
f=poly2str(a,'
x'
x1=[0.5:
0.05:
3.0];
y1=a(3)+a
(2)*x1+a
(1)*x1.^2;
plot(x,y,'
*'
holdon
plot(x1,y1,'
-r'
a=
0.56140.82871.1560
f=
0.56143x^2+0.82871x+1.156
1.9.2利用矩阵的除法求系数,解决复杂型函数的拟合
例用最小二乘法求一个形如y=a+bx2的经验公式,使它与如下数据拟合
xi
19
25
31
38
44
yi
19.0
32.3
49.0
73.3
97.8
x=[1925313844];
y=[19.032.349.073.397.8];
x1=x.^2
x1=[ones(5,1),x1'
]
ab=x1\y'
x0=[19:
0.2:
44];
y0=ab
(1)+ab
(2)*x0.^2;
clf
plot(x0,y0,'
x1=36162596114441936
x1=1361
1625
1961
11444
11936
ab=0.9726
0.0500
1.9.3利用MATLAB优化工具箱中lsqcurvefit函数进行非线性曲线拟合
[a,resnorm]=lsqcurvefit(,a0,x,y)
a---返回待定系数向量
resnorm---返回a处残差的平方和范数值:
sum{(fun((a,x)-y).^2}
fun---拟合函数
a0---待定系数向量初始值
x,y---原始输入输出数据向量
例x=0:
10;
y=0.12*exp(-0.213*x)+0.54*exp(-0.17*x).*sin(1.23*x);
%设数据满足原型为
%y(x)=a1e-a2x+a3e-a4xsin(a5x)
%其中ai为待定系数
aaa=inline('
a
(1)*exp(-a
(2)*x)+a(3)*exp(-a(4)*x).*sin(a(5)*x)'
a'
a0=[1,1,1,1,1];
[a,resnorm]=lsqcurvefit(aaa,a0,x,y)
Optimizationterminatedsuccessfully:
RelativefunctionvaluechangingbylessthanOPTIONS.TolFun
0.11970.21250.54040.17021.2300
resnorm=
7.1637e-007
1.9.4利用MATLAB优化工具箱中CurveFittingToolbox进行曲线拟合
主要包括数据预处理、数据拟合和数据后处理。
曲线拟合工具箱在拟合数据时使用最小二乘法。
进行拟合需要一个能表示实验数据与理论数据之间关系的模型,模型中有一些需要确定的系数。
拟合的目的就是要获得对这些未知系数的估计。
最小二乘法通过最小化残差的平方和来获得待定系数的估计。
式中(m+1)个为参与拟合的数据点的个数,
支持的最小二乘拟合类型包括:
*线性最小二乘;
*加权线性最小二乘;
Wi为权重因子
*稳健最小二乘:
最小二乘法的主要缺点是对异常值太敏感。
异常值对拟合结果具有很大的影响,因为对残差取平方会将异常值的影响放大。
要使异常值的影响最小,可以用稳健最小二乘拟合数据。
工具箱提供了下面2个稳键回归方案:
最小绝对残差(LAR):
LAR方案要求残差的绝对差,而不是平方差最小的曲线。
所以,极值对拟合的影响更小。
双二次加权:
本方案使加权平方和最小,其中每个数据点的权重与该点到拟合线的距离有关。
离拟合线更近的点权重更大,离拟合线更远的点权重更小,超出预期范围的点的权重为0。
对于大多数情况,双二次加权方案比LAR方案的效果更好,因为它不仅用一般最小二乘法找到了拟合数据的曲线,还使异常值的影响最小。
*非线性最小二乘。
工具箱提供的非线性选代算法包括:
置信域法:
默认算法,如果指定系数约束,必须使用该方法。
该方法求解复杂非线性问题的效率比其他几种算法高得多,并且它是普通Levenberg-Marquardt法的改进版本。
Levenberg-Marquardt法:
老牌的非线性迭代算法,经过了很多年的考验。
如果置信域法得到的结果不理想,并且没有系数约束,试用本法。
Gauss-Newton法本算法比其他算法快得多,但是它假设数据残差接近0。
把该算法
放到工具箱中,主要出于教学的目的,解决实际问题时,应该把它作为最后的选择。
评价拟合的优度:
用一个或多个模型拟合数据以后,应该评价拟合的优度,即拟合的好坏情况。
评价拟合优度,第一个办法是将拟合曲线显示出来,从图上直接察看。
此外,工具箱还用下面几种指标来评价拟合的优度:
SSE:
误差平方和,误差平方和越接近0。
说明拟合越好。
R-square:
R的平方可以取0到1之间的所有值,值超接近1,拟合效果越好。
AdjustedR-square:
调整的R平方统计量可以可以是任何小于等于1的值,值超接近1表示拟合效果更好。
RMSE:
均方误差的模,RMSE的值接近O表示拟合效果很好。
例子:
已知铜的热容实验数据,求铜的焓、熵和吉布斯自由能。
T
CP
10
0.0544
15
0.1842
20
0.4605
0.9630
30
1.6957
50
6.1546
70
10.8857
100
15.9936
150
20.5153
200
22.6506
250
23.7810
298
24.4509
400
25.4557
500
26.1675
600
26.7537
700
27.2979
800
27.7166
1000
28.5540
1200
29.3076