插值与拟合 您所在的位置:网站首页 双线性插值法公式是什么时候学的 插值与拟合

插值与拟合

2024-04-17 00:44| 来源: 网络整理| 查看: 265

一、一维插值

拉格朗日插值(高次多项式插值):其插值函数在整个区间上是一个解析表达式,便于再次开发利用;曲线光滑;误差估计有表达式;收敛性不能保证(振荡现象)。用于理论分析,实际意义不大。

分段线性和三次样条插值(低次多项式插值):曲线不光滑(三次样条插值已大有改进);误差估计较难(对三次样条插值); 收敛性有保证。简单实用,应用广泛。

节点可视为由y = g( x)产生,函数g表达式复杂,或无解析表达式,或未知。

构造一个(相对简单的)函数y=f(x),通过全部节点, 即f (xj) =yj ( j =0,1,....,n)

再用f(x)计算插值,即y∗=f(x∗)

(1) 拉格朗日(Lagrange)插值

已知函数f(x)在n+1个点x0,x1,…,xn处的函数值为 y0,y1,…,yn 。求一n次多项式函数Pn(x),使其满足:Pn(xi)=yi,i=0,1,…,n.

解决此问题的拉格朗日插值多项式公式如下

其中Li(x) 为n次多项式:

称为拉格朗日插值基函数。

特别地: 两点一次(线性)插值多项式:

三点二次(抛物)插值多项式:

直接验证可知,Ln( x) )满足插值条件Ln(xi)=yi,i=0,1,…,n.

N越大,误差不一定越小。

通过考察g(x)=

,-5≤x≤5

采用拉格朗日多项式插值:选取不同插值节点个数n+1, 其中n为插值多项式 的次数,当n分别取2, 4,6,8,10时,绘出插值结果如上图.

这种振荡现象叫Runge现象。

(2)分段线性插值

计算量与n无关;n越大,误差越小.

(3)三次样条插值

分段线性插值在区间端点不光滑。

在数学上,光滑程度的定量描述是:函数(曲线)的k阶导数存在且连续,则称该曲线具有k阶光滑性。

光滑性的阶次越高,曲线则越光滑。是否存在较低次的分段多项式达到较高阶光滑性的方法?

三次样条函数 S(x), x∈[a, b] , 满足:

1)S(x) 在每一个小区间[xi-1,xi]上是一个三次多项式函数 ;

2)在整个区间[a,b]上,其二阶导数存在且连续。

问题:给定n+1个节点(x0, y0 ),(x1, y1 ) ,…, (xn, yn),

求一个三次样条函数S(x),使其满足:S(xi)=yi,i=0,1,…,n.

如何确定三次样条函数在每一个小区间上的三次多项式函数的系数?

•待定系数和方程个数

参数:每个小段上4个参数,n个小段共计4n个方程:

1)每个小段上由给定函数值得到2个,n个小段共计2n个;

光滑性要求每一个内部节点的一阶二阶导数连续,得出其左右导数相等,因此,每个节点产生2个方程,共计2(n-1) 个 。现在得到了4n-2个方程。为了求解4n个方程,常用的方法是对边界节点除函数值外附加要求,这就是所谓的边界条件。需要两个,正好左右两个端点各一个。

用三次样条插值选取11个基点计算插值(ych)

(4) 一维插值的Matlab实现

一维插值函数:

插值方法:

nearest:最邻近插值; next:下一个邻点插值 ;previous:前一个邻点插值;linear:线性插值; spline:三次样条插值;pchip:保形分段三次插值; cubic :立方插值;v5cubic:在MATLAB5中使用的三次卷积。

缺省时:分段线性插值。

例:在1-12的11小时内,每隔1小时测量一次温度,测得的温度依次为:5,8,9,15,25,29,31,30,22,25,27,24。试估计每隔1/10小时的温度值。

hours=1:12; temps=[5 8 9 15 25 29 31 30 22 25 27 24]; h=1:0.1:12; t=interp1(hours,temps,h,'spline'); (直接输出数据将是很多的) plot(hours,temps,'+',h,t,hours,temps,'r:') %作图xlabel('Hour'),ylabel('Degrees Celsius’)二、二维插值1. 两类节点

第一种(网格节点)

已知m×n个节点(xi, xj, zij) ( i=1, 2, …,m; j=1, 2, …, n )其中xi, yj互不相同,

不妨设 a=x1

插值函数为:

第二片(上三角形区域):

插值函数为:

双线性插值

双线性插值是有两个变量的插值函数的线性插值扩展, 其核心思想是在两个方向分别进行一次线性插值。

双线性插值的结果与插值的顺序无关。首先进行y方向的插值,然后进行x方向的插值,所得到的结果是一样的。

双线性插值的一个显然的三维空间延伸是三线性插值,三线性插值的方法可参看matlab中的interp3.

3.matlab实现

网格节点数据的插值

Method可取:‘nearest’ 最邻近插值;‘linear’ 双线性插值;

‘cubic’双三次插值;‘spline’ 样条插值;

注意:x0,y0为向量,但z0是矩阵,其列数等于x0的长度,行数等于y0的长度。 width=1:5; depth=1:3; temps=[82 81 80 82 84;79 63 61…65 81;84 84 82 85 86]; M文件wenduqm.m mesh(width,depth,temps);pause di=1:.1:3;di=di'; 加密数据点 wi=1:.1:5; zlin=interp2(width,depth,temps,… wi,di,'linear'); figure(2); mesh(wi,di,zlin); xlabel('Width of Plate'), ylabel('Depth of Plate') zlabel('Degrees Celsius'), axis('ij'),grid, pause; zlin=interp2(width,depth,temps,wi,di,… 'cubic'); figure(3); mesh(wi,di,zlin) xlabel('Width of Plate'), ylabel('Depth of Plate') zlabel('Degrees Celsius'), axis('ij'),grid

散点数据的插值计算

注意:x0,y0,z0均为向量,长度相等。

Method方法:可取‘nearest’,’linear’,’cubic’,’v4’,‘natural’。‘linear’是缺省值。

船在该海域会搁浅吗?

假设:海底平滑

1.作出测量点的分布图;

2.求出矩形区域(75,200)*(-50,150)的细分网格节点之横、纵坐标向量;

3.利用MATLAB中的散点插值函数求网格节点的水深;

4.作出海底曲面图形和等高线图;

5.作出水深小于5的海域范围。

1.作出测量点的分布图

clear; x=[129 140 103.5 88 185.5 195 105.5 157.5 107.5 77 81 162 162 117.5]; y=[7.5 141.5 23 147 22.5 137.5 85.5…-6.5 -81 3 56.5 -66.5 84 -33.5]; z=[-4 -8 -6 -8 -6 -8 -8 -9 -9 -8 -8 … -9 -4 -9]; plot(x,y,'+'); pause nx=100; px=linspace(75,200,nx); ny=200; py=linspace(-50,150,ny); %求出测量范围内的细网格的节点的x,y坐标数组 pf=griddata(x,y,z,px,py’,’v4’); figure(2),meshz(px,py,pf), rotate3d,pause figure(3),surf(px,py,pf), rotate3d,pause contour(px,py,pf,16) Colorbar %用插值方法求出网格节点处的z坐标矩阵, 并作出三维图 figure(4),contour(px,py,pf,[-5 -5]); grid,pause [i1,j1]=find(pf

由于街区距离和棋盘距离含有绝对值符号在后期运算过程中不方便求导运算,所以我们常采用欧氏距离作为我们的距离准则。

拟合函数选择:

1.将数据(xi , yi ), (i= 1, 2,..., n)作图,通过直观判断确定f (x);

2.通过机理分析、数学推导建立数学模型来确定f(x);

3.通过经验公式获得函数f (x)的形式;

数据拟合求解的基本步骤:

•1 根据具体问题,确定拟合多项式的次数n和待求参数;

•2 根据实际需要对问题进行适当的数学变换;

•3 运用相关的Matlab方法进行计算,求出相应的参数;

•4 写出拟合多项式f (x)

四、非线性拟合1. 多项式拟合

1)选取拟合函数 R= a1t+a2

2)用命令polyfit(x,y,m)作最小二乘拟合

3)编写MATLAB程序dianzu.m,如下:

作多项式f (x) = a xm + a xm-1 +...+amx + am+1 函数拟合,可利用已有程序polyfit(),其调用格式为:

2. 非线性拟合:

Matlab的提供了两个求非线性最小二乘拟合的函数:lsqcurvefit和lsqnonlin。两个命令都要先建立M-文件fun.m,在其中定义函数f (x),但两者定义f(x)的方式是不同的,具体用法可参考例题.

lsqcurvefit

已知数据点:xdata=(xdata1,xdata2,…,xdatan),

ydata=(ydata1,ydata2,…,ydatan)

lsqcurvefit用以求含参量x(向量)的向量值函数

F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T中的参变量x(向量),使得

lsqcurvefit

输入格式说明:

Lsqnonlin

已知数据点: xdata=(xdata1,xdata2,…,xdatan)

ydata=(ydata1,ydata2,…,ydatan)

lsqnonlin用以求含参量x(向量)的向量值函数

f(x)=(f1(x),f2(x),…,fn(x))T 中的参量x,使得



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有