精华内容
下载资源
问答
  • 离散数据插值

    千次阅读 2017-03-01 09:28:43
    上一篇讨论了离散点如何生成等值线的思路,其需求基本上是根据特定的数值计算坐标,即计算插值线的位置。而也有需求是根据坐标求数值,即将离散点的空白处全部插值生成平滑过流的栅格矩阵。   离散插值的算法...

    上一篇讨论了离散点如何生成等值线的思路,其需求基本上是根据特定的数值计算坐标,即计算插值线的位置。而也有需求是根据坐标求数值,即将离散点的空白处全部插值生成平滑过流的栅格矩阵。

     

    离散点插值的算法非常多,最经典的如克里金插值,它是最合理的区域地理空间离散点插值算法,而这里介绍的是最常用最直观最简单的距离倒数加权平方插值算法。算法名字很难理解,其实说白了就是根据所求点坐标与所有(或指定区域范围内)离散点的距离作为权重影响数值来计算,离采样点越远的点,受采样点的影响越小,也就是一个倒数关系,倒数上可以有次方来约束权重递减的强弱。至于有远到什么程度就递减为0了,可以在你自己的算法里来约束。另外,根据地理特征的分形特性,通常2次方到3次方的效果比较接近真实地理特征。

     

    以下是公式

     

    以下是插值效果,左边是本文插值效果,右边是ArcMap中的Kriging 插值效果,比较接近吧?常用够用了。

     

    展开全文
  • 根据离散数据插值到矩形网格点的几种方法,着重阐述了矩形网格化的距离加权最小二乘插值方法
  • 项目应用中,有时候需要通过Java组件中的插值分析将点数据生成栅格数据,本范例介绍怎样将点数据通过三种不同的差值方法(Kriging、IDW和RBF)生成栅格数据,方便后续的栅格运算等操作。
  • 行业分类-物理装置-离散数据集的插值数据计算与读取方法、系统及存储介质.zip
  • 神级EXCEL离散数据插值模块,提供1D,2D,3D,4D,5D五个模板,C,C++编写
  • 该文件中详细的列举了matlab进行数据回归,拟合,插值的各种函数和方法。通过该文件包中的代码,基本上可以完成几乎所有的回归,拟合与插值问题。
  • 分配给表面像元的值可以表示为离散数据或连续数据。ArcGIS 中的要素和表面可以表示为离散数据或连续数据
  • -3787- 0引言 数字图像处理的特点之一是处理的数据量大[1],对存储空间和处理速度提出了很高的要求,尤其在实时性要求很高的场合,如TMS320C6201实时图像处理系统[2]实时图像处理系统的综合性能取决于算法复杂度硬件和...
  • MATLAB 三维离散插值为曲面 data = load('H:\模型\Para.txt');%参数路径 %格式 x1,y1,z1 % x2,y2.z2 % x3,... x1 = data(:, 1);%获取第1列 y1 = data(:, 2);%获取第2列 z1 = data(:, 3); %获取第3列 count = 1; ...

    MATLAB 三维离散点插值为曲面

    data = load('H:\模型\Para.txt');%参数路径
    %格式 x1,y1,z1
    %     x2,y2.z2 
    %     x3,...
    x1 = data(:, 1);%获取第1列
    y1 = data(:, 2);%获取第2列
    z1 = data(:, 3); %获取第3列
    count    = 1;  
    interval = 1; 
    for i = 1 : interval : length(x1)
        x(count, 1) = x1(i, 1);
        y(count, 1) = y1(i, 1);
        z(count, 1) = z1(i, 1);
        count = count + 1;
    end
     
    %确定网格坐标(x和y方向的步长均取0.01[X,Y]=meshgrid(min(x):0.01:max(x),min(y):0.01:max(y)); 
    %在网格点位置插值求Z,注意:不同的插值方法得到的曲线光滑度不同
    Z=griddata(x,y,z,X,Y,'v4');
    
    %设置曲面颜色 (蓝红)
    colormap(jet); 
    figure(1);
    surf(X,Y,Z);
    shading interp;
    %白色背景
    set(0,'defaultfigurecolor','w')
    %设置坐标轴及范围
    xlabel('β1');
    ylabel('β2');
    
    set(gca,'XLim',[0.2 1.4]);
    set(gca,'YLim',[0.2 1.4]);
    
    %设置字体
    set(gca,'FontName','Times New Roman');
    set(gca,'FontSize',20);
    

    效果图,仅供参考:
    在这里插入图片描述

    参考文章:
    https://blog.csdn.net/weixin_30825581/article/details/95696457

    展开全文
  • matlab_离散数据处理_插值拟合积分

    千次阅读 2016-05-09 10:57:04
    matlab_离散数据处理_插值拟合积分 1.插值:根据已知的数据点,得到你想获取的坐标位置处的值的方法。比如,已知直角坐标网格处的点,想获取极坐标网格处的点。 一元:interp1 二元:interp2 2.拟合:利用离散数据...

    matlab_离散数据处理_插值拟合积分

    1.插值:根据已知的数据点,得到你想获取的坐标位置处的值的方法。比如,已知直角坐标网格处的点,想获取极坐标网格处的点。

    一元:interp1

    二元:interp2

    2.拟合:利用离散的数据点拟合曲线或者曲面,注意区分线性拟合与非线性拟合,拟合之后还要看误差,否则没有意义。特别注意,线性拟合与函数是线性的不一样。拟合的线性与非线性的区别不是在于将被拟合的函数是线性还是非线性的,而是在于,是否满足一般表达式:

    展开全文
  • Interpolations.jl:Julia中离散数据集的快速连续插值
  • 数值分析:数据插值方法

    万次阅读 多人点赞 2017-03-15 16:53:22
    http://blog.csdn.net/pipisorry/article/details/62227459插值、拟合和逼近的区别据维基百科,科学和工程问题可以通过诸如采样、实验等方法获得若干离散数据,根据这些数据,我们往往希望得到一个连续的函数(也...

    http://blog.csdn.net/pipisorry/article/details/62227459

    插值、拟合和逼近的区别

    据维基百科,科学和工程问题可以通过诸如采样、实验等方法获得若干离散的数据,根据这些数据,我们往往希望得到一个连续的函数(也就是曲线)或者更加密集的离散方程与已知数据相吻合,这过程就叫做拟合。通过拟合得到的函数获得未知点的数据的方法,叫做插值。其中,拟合函数经过所有已知点的插值方法,叫做内插。
    拟合是已知点列,从整体上靠近它们;插值是已知点列并且完全经过点列;逼近是已知曲线,或者点列,通过逼近使得构造的函数无限靠近它们。
    最小二乘意义下的拟合,是要求拟合函数与原始数据的均方误差达到极小,是一种整体意义的逼近,对局部性质没有要求。而所谓“插值”,就是要在原有离散数据之间“插入”一些值,这就要求插值函数必须通过所有的离散点,插值函数在离散点之外的那些点都相当于“插入”的值。插值有全局插值,也有局部插值(比如分段线性插值),插值误差通常考虑的是逐点误差或最大模误差,插值的好坏往往通过某些局部的性质来体现,比如龙格现象或吉布斯振荡。

    [知乎 拟合与插值的区别?]

    皮皮blog



    插值方法

    多项式插值

            对于大部分多项式插值函数,插值点的高度值可以视为所有(或某些)节点高度值的线性组合,而线性组合的系数一般是x坐标的多项式函数,称作基函数。对于一个节点的基函数,它在x等于该节点的x时等于1,在x等于其他节点的x时等于0。这就保证曲线必定经过所有节点,所以属于内插方法。

            在本小节,均以一组随机数作为已知的高度值,使它们对应于间隔固定的x坐标,使用不同的插值函数获得各已知点(称为插值函数的节点)之外其它x坐标所对应的高度值,画出这些点所对应的曲线。再把所有高度值转换成灰度值,以颜色的变化比较各插值函数。

            原点列如图:(假定横向为x,纵向为y。各点x坐标的间隔是固定的,但y坐标是随机的)



    线性插值

    File:Linear interpolation.png

            线性插值是用一系列首尾相连的线段依次连接相邻各点,每条线段内的点的高度作为插值获得的高度值。

            以(xi,yi)表示某条线段的前一个端点,(x(i+1),y(i+1))表示该线段的后一个端点,则对于在[xi,x(i+1)]范围内的横坐标为x的点,其高度y为:

    p(x) = f(x_0) + \frac{f(x_1)-f(x_0)}{x_1-x_0}(x-x_0). \,\!

           为便于与后面各函数比较,写成比较对称的形式:


            其中,yi和y(i+1)的两个参数称为基函数,二者之和为1,分别代表yi和y(i+1)对插值点高度的权值。

    [wikipedia线性插值]

            插值图像如下:


            将高度转化为灰度,得到如下条带:


            线性插值的特点是计算简便,但光滑性很差。如果用线性插值拟合一条光滑曲线,对每一段线段,原曲线在该段内二阶导数绝对值的最大值越大,拟合的误差越大。

    二次插值

           如果按照线性插值的形式,以每3个相邻点做插值,就得到了二次插值:


    OpenGL实现代码如下:

    1. void quadratic(float p[20][2])  
    2. {  
    3.     float x,y;  
    4.     int i;  
    5.     float x01,x02,x12;  
    6.   
    7.     glColor3f(0.0,0.0,1.0);  
    8.     glBegin(GL_LINE_STRIP);  
    9.     for(i=0;i<20;i+=2)  
    10.     {  
    11.         x01=p[i][0]-p[i+1][0];  
    12.         x02=p[i][0]-p[i+2][0];  
    13.         x12=p[i+1][0]-p[i+2][0];  
    14.           
    15.         for(x=p[i][0];x<=p[i+2][0];x+=1.0)  
    16.         {  
    17.             y=(x-p[i+1][0])*(x-p[i+2][0])/x01/x02*p[i][1]-(x-p[i][0])*(x-p[i+2][0])/x01/x12*p[i+1][1]+(x-p[i][0])*(x-p[i+1][0])/x02/x12*p[i+2][1];  
    18.             glVertex2f(x,y);  
    19.         }  
    20.     }  
    21.     glEnd();  
    22. }  

            二次(分段)插值图像如下:


            转换成灰度值如图:


            二次插值在每段二次曲线内是光滑的,但在每条曲线的连接处其光滑性可能甚至比线性插值还差。二次插值只适合3个节点的情形,当节点数超过3个时,就需要分段插值了。

    Cubic插值

           如果想要保证各段曲线连接处光滑(一阶导数相同),并且不想使用除法运算,可以考虑Cubic插值函数:


            其中,v代表插值点,v0、v1、v2、v3代表4个连续的节点。t取值为[0,1],将会产生一段连接v1和v2的曲线。也就是说,如果有n个节点,Cubic插值函数将会产生(n-2)段曲线,位于首尾两端的节点不会纳入曲线。

            实现代码如下:

    1. float cubic(float v0,float v1,float v2,float v3,float x)  
    2. {  
    3.     float v32=v3-v2;  
    4.     float v01=v0-v1;  
    5.     float v20=v2-v0;  
    6.     float temp=(v32-v01)*x;  
    7.     temp=(temp+v01+v01-v32)*x;  
    8.     temp=(temp+v20)*x+v1;  
    9.     return temp;  
    10. }  
    11.   
    12. void drawCubic(float p[20])  
    13. {  
    14.     float x,y;  
    15.     int step;  
    16.     float delta;  
    17.   
    18.     glColor3f(0.0,0.0,1.0);  
    19.     glBegin(GL_LINE_STRIP);  
    20.     for(step=0;step<17;step++)  
    21.     {  
    22.         for(delta=0.0;delta<=1.0;delta+=0.05)  
    23.         {  
    24.             x=delta*(p[step+1][0]-p[step][0])+p[step][0];  
    25.             y=cubic(p[step],p[step+1],p[step+2],p[step+3],delta);  
    26.             glVertex2f(x,y);  
    27.         }  
    28.     }  
    29.     glEnd();  
    30. }  

            Cuibc插值图像如下:


            转化成灰度如图:


            Cubic插值可以产生整体上光滑的曲线,但容易产生较剧烈的波动,使得曲线的最高点比最高的节点还高、曲线的最低点比最低的节点还低。所以对颜色等取值有严格的上下界的数据进行插值时,会造成曲线的截取,破坏其光滑性。比如颜色(RGB三个分量取值范围都是[0,255]),如果最高的节点是255,最低的节点是0,那么插值后负数会被截取成0,大于255的数会被截取成255。

    拉格朗日多项式插值

    解决插值函数的直接构造问题以及插值误差的估计问题,但是同时也使得插值函数值的计算变得复杂。

            依照线性插值和二次插值的思路,可以增加基函数分子和分母的阶数,构造拉格朗日插值多项式:


            一个n次的拉格朗日插值函数可以绘制经过(n+1)个节点的曲线,但运算量非常大。而且在次数比较高时,容易产生剧烈的震荡(龙格现象)。所以要选择位置特殊的节点(比如切比雪夫多项式的零点)进行插值,或使用多个次数较低的拉格朗日函数分段插值。(关于拉格朗日多项式龙格现象,详见维基百科链接)

            分段插值实现代码如下:

    1. //n为次数,nmax为节点的总数。n不大于nmax  
    2. void lagrange(float p[][2],int n,int nmax)  
    3. {  
    4.     float x,y;  
    5.     int i,j,t;  
    6.     float temp;  
    7.   
    8.     glColor3f(0.0,0.0,1.0);  
    9.     for(i=0;i<=(nmax-1);i+=(n-1))  
    10.     {  
    11.         glBegin(GL_LINE_STRIP);  
    12.         for(x=p[i][0];x<=p[i+n-1][0];x+=1.0)  
    13.         {  
    14.             y=0.0;  
    15.             for(j=0;j<n;j++)  
    16.             {  
    17.                 temp=1.0;  
    18.                 for(t=0;t<n;t++)  
    19.                 {  
    20.                     if(t==j)  
    21.                         continue;  
    22.                     temp*=(x-p[i+t][0])/(p[i+j][0]-p[i+t][0]);  
    23.                 }  
    24.                 y+=temp*p[i+j][1];  
    25.             }  
    26.             glVertex2f(x,y);  
    27.         }  
    28.         glEnd();  
    29.     }  
    30. }  

            使用4次拉格朗日多项式分段插值:


            转化为灰度:


            拉格朗日多项式插值也存在连接处不光滑的问题。

            如果直接使用20次的拉格朗日插值,得到的图像如下:


     这样的插值曲线显然是不能容忍的~

    牛顿插值

    从算法角度考虑,提出便于计算的插值方法,也就是牛顿插值公式。        拉格朗日插值每增加一个节点,整个函数要重新计算,计算量巨大。而牛顿插值每增加一个点只需要在多项式的最后增加一项,而且各基函数的系数可以递归计算,减少了很多计算量。

    均差(Divided differences)

    是递归除法过程。在数值分析中,也称差商(Difference quotient),可用于计算牛顿多项式形式的多项式插值的系数。

    定义

    [数值分析 钟尔杰 电子科大]

    差商表(高阶差商是两个低一阶差商的差商)
     {\displaystyle 0}阶差商1阶差商2阶差商3阶差商\ldots k-1阶差商
    x_{0}f[x_{​{0}}]     
    x_{​{1}}f[x_{​{1}}]f[x_{​{0}},x_{​{1}}]    
    x_{​{2}}f[x_{​{2}}]f[x_{​{1}},x_{​{2}}]f[x_{​{0}},x_{​{1}},x_{​{2}}]   
    x_{​{3}}f[x_{​{3}}]f[x_{​{2}},x_{​{3}}]f[x_{​{1}},x_{​{2}},x_{​{3}}]f[x_{​{0}},x_{​{1}},x_{​{2}},x_{​{3}}]  
    \ldots \ldots \ldots \ldots \ldots \ldots  
    x_{​{k}}f[x_{​{k}}]f[x_{​{k-1}},x_{​{k}}]f[x_{​{k-2}},x_{​{k-1}},x_{​{k}}]f[x_{​{k-3}},x_{​{k-2}},x_{​{k-1}},x_{​{k}}]\ldots f[x_{​{0}},\ldots ,x_{​{k}}]

    由函数表出发,从上往下从左往右依次计算出一阶,二阶, 。。。,各阶均差。

    [wikipedia均差]

    牛顿多项式

    将n次插值多项式写作如下形式:

    N(x)=[y_{0}]+[y_{0},y_{1}](x-x_{0})+\cdots +[y_{0},\ldots ,y_{k}](x-x_{0})(x-x_{1})\cdots (x-x_{​{k-1}})

    也就是牛顿插值公式中的各项系数就是均差表中计算出的各阶均差的第一个数据!

    即牛顿插值公式为:

    [wikipedia牛顿多项式]

    [wikipedia均差小节:牛顿插值法]

            实现代码如下:

    1. void newton(float p[][2],int n,int nmax)    
    2. {    
    3.     float x,y;    
    4.     int i,j,t;    
    5.     float temp;    
    6.     float f[20][20];    
    7.     
    8.     glColor3f(0.0,0.0,1.0);    
    9.     for(i=0;i<=(nmax-1);i+=(n-1))    
    10.     {    
    11.         for(t=0;t<n;t++)    
    12.         {    
    13.             f[t][0]=(p[i+t][1]-p[i+t+1][1])/(p[i+t][0]-p[i+t+1][0]);    
    14.             for(j=1;j<=t;j++)    
    15.                 f[t][j]=(f[t-1][j-1]-f[t][j-1])/(p[i+t-j][0]-p[i+t+1][0]);    
    16.         }    
    17.     
    18.         glBegin(GL_LINE_STRIP);    
    19.         for(x=p[i][0];x<=p[i+n-1][0];x+=1.0)    
    20.         {    
    21.             y=p[i][1];    
    22.             temp=1.0;    
    23.             for(j=0;j<n;j++)    
    24.             {    
    25.                 temp*=x-p[i+j][0];    
    26.                 y+=temp*f[j][j];    
    27.             }    
    28.             glVertex2f(x,y);    
    29.         }    
    30.         glEnd();    
    31.     }    
    32. }   

            可能由于计算精度的原因,牛顿插值绘制的曲线与拉格朗日插值的曲线略有不同。但次数较高时,牛顿插值也会产生剧烈的震荡。分段4次牛顿插值图像如下:


            转化成灰度如下:


            牛顿插值也存在连接处不光滑的缺陷

    皮皮blog


    埃尔米特插值

            以上各多项式插值方法的插值条件都是各节点的坐标,在以低阶函数分段插值时虽然可以保持曲线的稳定(比较平缓),但在各分段曲线的连接处无法保持光滑(一阶导数相等)。埃尔米特插值方法不但规定了各节点的坐标值,还规定了曲线在每个节点的各阶导数,这样就可以既保持曲线的稳定,又保证在连接处足够光滑。

            以3次二重("m重"就是规定坐标和曲线在所有节点处1到m-1阶导数的值)埃尔米特插值为例:


            4个基函数满足分别只在y0,y1,y0的导数,y1的导数处等于1,而在其他3个条件下等于0。可以把埃尔米特插值看作对坐标和导数的插值的组合。

            曲线在每个节点的导数可以根据相邻节点和它的相对位置确定,也可以完全随机生成。只要位置比较高和比较低的节点的导数绝对值不是很大,就可以使整条曲线落在最高与最低节点定义的带状区域内,这样就可以避免对插值的截取。

            对于本节的示例节点,一种可能的导数值如下:grad[20]={-4.0,4.0,0.5,-2.0,1.0,-2.0,-2.0,2.0,1.0,1.0,0.0,-1.0,-4.0,3.0,0.0,-3.0,3.0,0.0,-4.0,-4.0};  

            实现代码如下:

    1. //p[i][0],p[i][1]为点i的坐标,p[i][2]为曲线在点i的导数  
    2. //nmax为节点的总数  
    3. void hermite(float p[][3],int nmax)  
    4. {  
    5.     float x,y;  
    6.     float a1,a0,b1,b0;  
    7.     float x00,x11;  
    8.     int i;  
    9.     float temp;  
    10.   
    11.     glColor3f(0.0,0.0,1.0);  
    12.     for(i=0;i<nmax;i++)  
    13.     {  
    14.         glBegin(GL_LINE_STRIP);  
    15.         x00=p[i][0];  
    16.         x11=p[i+1][0];  
    17.         for(x=p[i][0];x<=p[i+1][0];x+=1.0)  
    18.         {  
    19.             temp=(x11-x00)*(x11-x00);  
    20.             a0=(x11-3*x00+2*x)*(x11-x)*(x11-x)/temp/(x11-x00);  
    21.             a1=(-x00+3*x11-2*x)*(x-x00)*(x-x00)/temp/(x11-x00);  
    22.             b0=(x-x00)*(x-x11)*(x-x11)/temp;  
    23.             b1=(x-x00)*(x-x00)*(x-x11)/temp;  
    24.             y=a0*p[i][1]+a1*p[i+1][1]+b0*p[i][2]+b1*p[i+1][2];  
    25.             glVertex2f(x,y);  
    26.         }  
    27.         glEnd();  
    28.     }  
    29. }  
           分段3次埃尔米特插值图像如下:


            转化为灰度如下:


            可见虽然n节点的埃尔米特插值是由(n-1)段曲线构成,但在每一个连接处都是光滑的

    样条插值

    B-样条

            B-样条是Bezier样条的一般化,也可推广为NURBS样条。先来介绍一下B-样条:


            该式定义了一个n次的B-样条,它有(m+1)个控制点(样条曲线的“节点”称作控制点,因为这些点控制曲线的弯曲方向和程度,但曲线不一定经过这些点),也就有(m+1)个基函数。一般绘制的是完整的曲线,u(min)取0,u(max)取1。当u取值均匀时,该样条称作均匀B-样条。当m=n时,B-样条退化为Bezier样条。

            函数绘制的曲线始终落在其控制点的凸包(包含一个点集所有点的凸多边形,而且该凸多边形所有顶点都来自这个点集)中。对于一个n次的B-样条,改变一个控制点的位置,只改变它所在的n段曲线(由n+1个控制点定义,且以该点起始)的形状,而不对其余的(m-n)段曲线产生影响。

    Bezier样条

         Bezier(贝塞尔)样条是法国工程师皮埃尔·贝塞尔(Pierre Bézier)在1962年为了设计汽车主体外形曲线而提出的。其一般式表达式为:


            其中,u取值为[0,1],pk(k=0,...,n)为(n+1)个节点,n称为阶数。

            Bezier样条还可以递归定义为:


            含义是n阶Bezier样条是两条(n-1)阶Bezier样条的插值。

            当阶数降为1时,Bezier插值退化成线性插值。改变任意一个控制点的位置,整条曲线的形状都会发生变化。

            比较常用的Bezier样条是3次Bezier:


            Beizer样条在首尾端的切线是前两个点和最后两个点的连线。除了第一个点和最后一个点,其他控制点一般都不在曲线上。

            3阶(4控制点)的Bezier函数图像如下:(黑色曲线为Bezier曲线,蓝色折线为控制点的连线)


            Bezier样条可以实现非常快速的运算。为了方便说明,将3次Bezier样条表示成如下形式:


            对于任意给定的u,可以通过合并的方式将原来的7次乘法、4次加法减少为3次乘法、3次加法:


            一般情况下,应用Bezier样条绘制曲线时,都是先给定一个很小的步长t(步长足够小才能保证Bezier曲线的精确),让t从0取到1,从头到尾绘制整条曲线。在t不变的条件下,可以使用更快速的差分方法,利用前一个点计算出下一个点的值,将每步的计算量减小到只有3次加法:


            只需要在绘制曲线之前计算4个常数,就可以很快地计算出曲线上的所有点:


            采用这种方式,Bezier样条的运算量只随阶数线性增长。

            实现代码如下:

    1. void bezier3(float xx0,float yy0,float xx1,float yy1,float xx2,float yy2,float xx3,float yy3)  
    2. {  
    3.     GLint i;  
    4.     GLfloat x,y;  
    5.     GLdouble ax,bx,cx,ay,by,cy;  
    6.     GLdouble t;  
    7.     GLdouble dx,d2x,dy,d2y,delta;  
    8.     GLdouble d3x,d3y;  
    9.   
    10.     ax=-xx0+3.0*xx1-3.0*xx2+xx3;  
    11.     bx=3.0*xx0-6.0*xx1+3.0*xx2;  
    12.     cx=-3.0*xx0+3.0*xx1;  
    13.     ay=-yy0+3.0*yy1-3.0*yy2+yy3;  
    14.     by=3.0*yy0-6.0*yy1+3.0*yy2;  
    15.     cy=-3.0*yy0+3.0*yy1;  
    16.   
    17.     delta=0.0005;  
    18.     d3x=6.0*ax*delta*delta*delta;  
    19.     d3y=6.0*ay*delta*delta*delta;  
    20.     x=xx0;  
    21.     y=yy0;  
    22.   
    23.     glBegin(GL_LINE_STRIP);  
    24.     glVertex2f(x,y+200);  
    25.     d2x=6.0*ax*delta*delta*delta+2.0*bx*delta*delta;  
    26.     dx=ax*delta*delta*delta+bx*delta*delta+cx*delta;  
    27.     d2y=6.0*ay*delta*delta*delta+2.0*by*delta*delta;  
    28.     dy=ay*delta*delta*delta+by*delta*delta+cy*delta;  
    29.     for(t=0.0;t<=1.0;t+=delta)  
    30.     {  
    31.         d2x+=d3x;  
    32.         dx+=d2x;  
    33.         x+=(float)dx;  
    34.         d2y+=d3y;  
    35.         dy+=d2y;  
    36.         y+=(float)dy;  
    37.         glVertex2f(x,y);  
    38.     }  
    39.     glEnd();  
    40. }  

    NURBS样条

            NURBS(Non-Uniform Rational B-Splines 非均匀有理B-样条),是贝塞尔样条的推广。“非均匀”的意思是控制点的间隔可以是不均匀的,“有理”的意思是各控制点带有不同的权值。和Bezier样条相比,它对曲线形状的控制更自由:


            其基函数B(k,d)与B-样条的基函数相同,w(k)为各点的权因子。和B-样条一样,改变一个控制点的位置,只改变它所在的n段曲线的形状,而不对其余的(m-n)段曲线产生影响。

    皮皮blog



    插值的一些应用

    噪声

            噪声图像一般需要二维或三维插值函数,不过了解了各一维插值函数,就很容易扩展到二维和三维了。关于二维噪声图像的产生,请参见《二维噪声图像》


    水波

              下面这个图像就是用插值函数绘制的模拟水波的三维网格(静态图):


            虽然这张网格看起来似乎需要二维插值,但这张网格是由6个不同波长和频率的Gestner合成的,每个独立的波形只需要一维插值生成。

    [常用的插值函数 ]

    from: http://blog.csdn.net/pipisorry/article/details/62227459

    ref:


    展开全文
  • 针对小区域大高差似大地水准面拟合,利用空间定位技术提供的高精度三维坐标离散数据,对二次曲面、三次曲面、移动曲面和多面函数等多种模型进行拟合分析,使用VB编程技术开发曲面拟合程序,结合某矿山实例对不同函数...
  • y, kind='zero') f3 = interp1d(x, y, kind='quadratic') #下面以二次样条插值插值函数为例 from scipy.misc import derivative print(derivative(f3, 1e-10, dx=1e-10)) #derivative可以用于求导,需指定求导...
  • 数据插值与拟合

    千次阅读 2018-05-01 00:52:20
    在工程测量和科学实验中,所得到的数据通常是离散的,要得到这些离散点以外的其他点的数值,就需要根据已知的数据进行插值插值函数一般由线性函数、多项式、样条函数或这些函数的分段函数充当。一维插值 一维差值...
  • 使用griddata进行均匀网格和离散点之间的相互插值

    千次阅读 热门讨论 2019-12-11 19:09:32
    文章目录1 griddata函数介绍2 离散插值到均匀网格3 均匀网格插值到离散点4 获取最近邻的Index 插值操作非常常见,数学思想也很好理解。常见的一维插值很容易实现,相对来说,要实现较快的二维插值,比较难以实现。...
  • MATLAB二维网格数据插值

    千次阅读 2019-11-03 16:27:41
    在实际中,常常需要处理由实验或测量所得到的一些离散数据插值方法能够通过这些数据去确定某类已知函数的参数或寻求某个近似函数,使所得到的近似函数与已知数据有较高的拟合精度。 [x,y]=meshgrid(-5:0.25:5); ...
  • 文章目录一、基础概念插值是什么拟合是什么插值和拟合的相同点插值和拟合的不同点二、常用的基本插值方法高次多项式插值拉格朗日多项式插值牛顿插值差商矩阵低次多项式插值(不易震荡)分段线性插值Hermite插值三次...
  • 如何利用MATLAB进行数据插值

    万次阅读 多人点赞 2020-04-20 19:57:51
    文章目录前言1 引例-零件加工问题2 数据插值的计算机制3 数据插值的实现方法3 应用案例1-粮储仓的通风控制问题4 应用案例2-机动车刹车距离问题5 应用案例3-沙盘制作问题总结 前言 本文是科学计算与MATLAB语言课程的...
  • 求已知数据点的拉格朗日插值多项式 matlab源代码
  • 离散插值算法

    万次阅读 2011-01-03 10:30:00
      离散插值的算法非常多,最经典的如克里金插值,它是最合理的区域地理空间离散插值算法,而这里介绍的是最常用最直观最简单的距离倒数加权平方插值算法。算法名字很难理解,其实说白了就是根据所求...
  • 空间数据插值分析 - 以克里 金插值法为例 浙江大学环资学院遥感所 2014 级硕士胡碧峰 空间插值 空间插值常用于将离散点的测量数据转换为连续 的数据曲面它包括 内插 和 外推 两种算法前者是 通过已知点的数据计算...
  • 离散数据插值方法及等值线绘制技术的应用.kdh离散数据插值方法及等值线绘制技术的应用.kdh
  • 02、MATLAB之数据插值

    千次阅读 2019-07-07 18:19:29
    一、一维插值函数 插值函数:yi = interp1(x,y,xi,'method') yi : xi处的插值结果 x、y :插值节点 xi : 被插值点 method :插值方法(下面四种) 1、‘nearest':最邻近插值 2、‘1inear':线性插值 3、...
  • 文章目录一、网格节点的插值计算二、散点数据插值计算1. 示例 12. 示例 2 一、网格节点的插值计算 Vq = interp2(X,Y,V,Xq,Yq) 使用线性插值返回双变量函数在特定查询点的插入值。结果始终穿过函数的原始采样。X 和...
  • 有x=[0 1 2 3 4 5 6 7 8 9],y=[5 7 9 10.11 11.9 9.9 9.6 9.3 7 5] 为实现点到线,实现代码如下: ... %%三次方样条数据插值 注意:x,y数组大小应该相同 plot(x,y,‘o’,xx,yy) %%输出结果 结果如下: ...
  • 离散插值反距离加权法IDW C#实现

    千次阅读 2019-06-01 16:23:41
    看了很多插值方法,总体来看写的都太复杂,简单应用的时候效率提不上去,数学不太好,只能套公式 1、反距离权重 (IDW) 插值介绍 反距离权重 (IDW) 插值是一种常用而简便的空间插值方法,它以插值点与样本点间的...
  • 基于GPU的海量离散点高程并行插值算法.pdf
  • MATLAB数据插值和曲线拟合

    千次阅读 2020-08-23 22:15:07
    在工程测量和科学实验中,所得到的数据通常是离散的。 如果要得到这些离散点以外的其他点的数值,就需要根据这些已知数据进行插值。 根据被插值函数的自变量个数,插值问题分为一维插值、二维插值和多维插值等;根据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,311
精华内容 4,524
关键字:

数据表离散插值