精华内容
下载资源
问答
  • 针对小区域大高差似大地水准面拟合,利用空间定位技术提供高精度三坐标离散数据,对次曲面、三次曲面、移动曲面和多面函数等多种模型进行拟合分析,使用VB编程技术开发曲面拟合程序,结合某矿山实例对不同函数...
  • 二维三次卷积插值算法

    千次阅读 2013-09-08 13:36:21
    在生产或生活中,我们往往只能得到有限的关于某个物理量的离散点(比如一张图片,我们只能得到其原...常用的插值算法有很多,从简单的线性插值,Lagrange插值,Newton插值,到较复杂的Herminate插值,二维三次卷积插值

          声明:本博客为原创博客,未经允许,不得转载!小伙伴们如果是在别的地方看到的话,建议还是来csdn上看吧(原文链接地址为http://blog.csdn.net/bettarwang/article/details/11376241),毕竟在csdn上看代码和提问、讨论都更方便。

         生产或生活中,我们往往只能得到有限的关于某个物理量的离散点(比如一张图片,我们只能得到其原大小内每个坐标处的颜色信息),但是很多时候,我们还需要不在已有栅格点的物理量信息(比如图像缩放时)。此时,就需要某种估计方法,用于得到该坐标处的物理量值,此时就需要通过插值得到。常用的插值算法有很多,从简单的线性插值,Lagrange插值,Newton插值,到较复杂的Herminate插值,二维三次卷积插值,分段多项式插值以及样条插值。

         那么在使用时,该如何选择呢?

        一般来说,有两个准则:第一个是要满足精度要求、连续性要求(比如曲面过渡往往要求一阶或者二阶导数连续);第二个是要满足具体使用时的算法复杂度要求。算法本无优劣,须要结合具体情况灵活选择。

        这里介绍一种在图像处理和DEM(Digital Elevation Model)中应用很广的一种插值算法----二维三次卷积插值算法。

        DEM数据是二维数据,对于二维数据,经常使用的插值方法有双线性插值和双立方插值,它们都是在最邻近的四个网点之间进行插值。双线性插值算法简单,但是却无法得到网点处的导数.双立方Herminate插值是四个邻近网点高度的加权和,且方程连接可微。但是该方法的缺点是网点处的微分被强迫为零,虽保证了插值方程的连续性,但是地形在网点处为平面时和直觉矛盾。

        综合考虑算法效率和插值精度,二维三次卷积插值是比较理想的插值方法。

       在处理地形时, 二维三次插值算法是以待插值点周围16个点的高程值来得到它自己的高程值。如下图所示。

         

     

    由于该插值方法需要使用未知点周围16个点的数据,当数字地形风格为有限大小时,如果未知点处于风格国家级,就无法得到风格以下的网点数据,因此,需要研究该算法的边界条件。

         Robert G K在《Cubic convolution interpolation for digital image processing》一文中给出了一种较好的边界条件。设

    网点在x方向由0到M,在y方向由0到N,则边界条件为

    下面是用C++写的二维三次卷积插值的源代码。

         首先是point.h文件

    #ifndef POINT_H
    #define POINT_H
    typedef struct 
    {
        float x;
        float y;
        float z;
    }Point;
     
    #endif

    然后是interpolation.h文件

    #ifndef INTERPOLATION_h
    #define INTERPOLATION_H
    #include "Point.h"
    #include <string>
    #include <Math.h>
    #include <iostream>
    #include <fstream>
    using namespace std;
    float getInterpolationHeight(float**,int,int,float,float);
    float funA(float);
    float funB(float);
    float funC(float);
    float funD(float);
    float getDEMInterpolationHeight(Point**p,float**expandedH,int rowNum,int colNum,float delta,float x,float y);
    float**getExpandedH(Point**p,int rowNum,int colNum);
     
     
     
    Point**interpolation( Point**p,const int rowNum,const int colNum) //p为传入的二维矩阵。返回的也是二维矩阵,不过是在函数中用new新建的。加上const是为了让p对应的值不能改变。interpolateTimes是插值次数。
    {
        Point**dataPoint;
        dataPoint=new Point*[2*rowNum-1];  //新的点阵是(2*rowNum-1)*(2*colNum-1)
        for(int i=0;i<2*rowNum-1;++i)
        {
            dataPoint[i]=new Point[2*colNum-1];
             
        }
        /对于行号和列号都为偶数的点,它就等于原数组元素。
        for(int i=0;i<rowNum*2-1;i=i+2)
        {
            for(int j=0;j<colNum*2-1;j=j+2)
            {
                //dataPoint[i][j].x=i/2.0f;
                //dataPoint[i][j].y=j/2.0f; //横纵坐标不能那样求,在下面给出了求解。
                dataPoint[i][j].z=p[i/2][j/2].z;
            }
        }
        //下面要插值求的其实就是行号或者列号为奇数的点。关键就是要得到它周围的16个点(4*4的矩阵),只要得到了这16个点,直接带入公式就行。
         
         
        //
        float*Hrowminus=new float[colNum],*Hrowplus=new float[colNum];
        float*Hcolminus=new float[rowNum],*Hcolplus=new float[rowNum];
        float Hmm,Hpm,Hmp,Hpp; //Hmm代表H-1,-1   Hp,m代表H(rowNum-1)+1,-1    Hm,p代表H-1,(colNum-1)+1    Hpp代表H(rowNum-1)+1,(rowNum-1)+1.这四个值要等到那4个数组的值都计算出来之知道。
        for(int j=0;j<colNum;++j)
        {
            Hrowminus[j]=3*p[0][j].z-3*p[1][j].z+p[2][j].z;
            Hrowplus[j]=3*p[rowNum-1][j].z-3*p[rowNum-2][j].z+p[rowNum-3][j].z;
        }
        ///
        for(int i=0;i<rowNum;++i)
        {
            Hcolminus[i]=3*p[i][0].z-3*p[i][1].z+p[i][2].z;
            Hcolplus[i]=3*p[i][colNum-1].z-3*p[i][colNum-2].z+p[i][colNum-3].z;
        }
        /下面计算4个角点的值。
        Hmm=3*Hcolminus[0]-3*Hcolminus[1]+Hcolminus[2];//H-1,-1
        Hpm=3*Hcolminus[rowNum-1]-3*Hcolminus[rowNum-2]+Hcolminus[rowNum-3];
        Hmp=3*Hrowminus[colNum-1]-3*Hrowminus[colNum-2]+Hrowminus[colNum-3];
        Hpp=3*Hcolplus[rowNum-1]-3*Hcolplus[rowNum-2]+Hcolplus[rowNum-3];
     
     
       如果分类讨论的话,算法就过于复杂了,出错的概率就很大,与其这样,还不如以空间换取时间,新建一个扩大数组,包含了所有高程值(包括扩充的四条边).
      float**expandH=getExpandedH(p,rowNum,colNum);
       int startRow=0,startCol=0; //实际上要知道它周围的16个点不用把每个点都求出来,只需求出这16个点的起始点,或者说起始点的序号。
       float deltaX=0.0f,deltaY=0.0f;
       for(int i=0;i<2*rowNum-2;++i)  //最后一行(序号为2*rowNum-2)和最后一列(序号为2*colNum-2)单独考虑。
       {
           for(int j=0;j<2*colNum-2;++j)
           {
               if(i%2==0)
               {
                   if(j%2!=0)  //偶数行只需要计算奇数列。因为偶数列就是原来的数据点。在前面已经赋过值了。
                   {
                       startRow=i/2;
                       startCol=(j-1)/2;  //其实由于j为奇数,所以(j-1)/2==j/2,所以写成j/2也可以。
                        
                       deltaX=j-startCol*2;//注意:deltaX和deltaY的值要么等于0,要么等于1,不会是负值。
                       deltaY=i-startRow*2;
     
                       deltaX=deltaX/2.0f;
                       deltaY=deltaY/2.0f;
     
                       //然后代入插值方程计算得到高程值。
                       dataPoint[i][j].z=getInterpolationHeight(expandedH,startRow,startCol,deltaX,deltaY);
     
                   }
                  
               }
               else
               {
                   /奇数行的每列都要计算。
                   startRow=(i-1)/2;  //其实由于i为奇数,所以(i-1)/2==i/2,所以这里写成i/2也行。所以其实j%2!=0和j%2==0的代码可以合二为一,等下弄好了再测试一下,如果确实可以的话就很好了。
                   startCol=j/2;
                   deltaX=j-startCol*2;
                   deltaY=i-startRow*2;
     
     
                   deltaX=deltaX/2.0f;
                   deltaY=deltaY/2.0f;
     
                   dataPoint[i][j].z=getInterpolationHeight(expandedH,startRow,startCol,deltaX,deltaY);
     
               }
                
     
           }
       }
     
       下面考虑最后一行。分析发现最后一行的周围16个点要与它上面的一样,而最后一列的16个点要与它左边的一样。
       for(int j=1;j<2*colNum-2;j=j+2)
       {
          
               startRow=rowNum-2;
               startCol=j/2;
               deltaX=j-startCol*2;
              // deltaY=(2*rowNum-2)-startRow*2; //把startRow代入计算发现它就等于2,所以直接写好了。
               deltaY=2.0f;
     
               deltaX=deltaX/2.0f;
               deltaY=deltaY/2.0f;
     
               dataPoint[2*rowNum-2][j].z=getInterpolationHeight(expandedH,startRow,startCol,deltaX,deltaY);
     
       }
       /下面考虑最后一列。
       for(int i=1;i<2*rowNum-1;i=i+2)
       {
           startRow=i/2;
           startCol=colNum-2;
           deltaX=2.0f;
           deltaY=1.0f;  
     
           deltaX=deltaX/2.0f;//因为要除以网点间距。
           deltaY=deltaY/2.0f;
     
           dataPoint[i][2*colNum-2].z=getInterpolationHeight(expandedH,startRow,startCol,deltaX,deltaY);
     
       }
     
       ///至此,所有插值点的高程都已经计算出来了,但是横纵坐标还没有求出来。
       float d =p[1][1].y-p[0][0].y; //这是网格间距,由于栅格是正方形,所以只要求出水平或者竖直方向的其中一个方向的间距就可以。其实这个最好是通过传入网格间距(delta)来获取。
       d=d/2.0f;//新的网点间距是原来的一半。
        
     
     
       for(int i=0;i<2*rowNum-1;++i)
       {
           for(int j=0;j<2*colNum-1;++j)
           {
               dataPoint[i][j].x=p[0][0].x+d*i;
               dataPoint[i][j].y=p[0][0].y+d*j;
           }
       }
       在值返回之前,要将在这个函数中新建的而后面又不再需要的数组delete掉,否则它会在程序运行时一直存在。
       delete []Hrowminus;
       Hrowminus=NULL;
       delete []Hrowplus;
       Hrowplus=NULL;
       delete []Hcolminus;
       Hcolminus=NULL;
       delete []Hcolplus;
       Hcolplus=NULL;
       for(int i=0;i<rowNum+2;++i)
       {
           delete []expandedH[i];
           expandedH[i]=NULL;
       }
     
     
       return dataPoint;
     
    }
     
    float getInterpolationHeight(float**expandH,int startRow,int startCol,float deltaX,float deltaY) //expandH是扩大之后的那个矩阵,而startRow和startCol是16个点中起始点的序号。
    {
        float**surroundingH=new float*[4];
        for(int i=0;i<4;++i)
        {
            surroundingH[i]=new float[4];
            for(int j=0;j<4;++j)
            {
                surroundingH[i][j]=expandH[startRow+i][startCol+j];
            }
     
        }
       /
       float aX,aY,bX,bY,cX,cY,dX,dY;
       aX=funA(deltaX);
       aY=funA(deltaY);
       bX=funB(deltaX);
       bY=funB(deltaY);
       cX=funC(deltaX);
       cY=funC(deltaY);
       dX=funD(deltaX);
       dY=funD(deltaY);
       
       float*leftArray=new float[4];
       leftArray[0]=aY;
       leftArray[1]=bY;
       leftArray[2]=cY;
       leftArray[3]=dY;
       float*rightArray=new float[4];
       rightArray[0]=aX;
       rightArray[1]=bX;
       rightArray[2]=cX;
       rightArray[3]=dX;
       //
       float*array02=new float[4];
       for(int i=0;i<4;++i)
           array02[i]=0.0f;
     
       for(int i=0;i<4;++i)
       {
           for(int j=0;j<4;++j)
               array02[i]+=leftArray[j]*surroundingH[j][i];
       }
     
       float height=0.0f;
       for(int i=0;i<4;++i)
           height+=array02[i]*rightArray[i];
     
       height=height/4.0f; //千万别忘了这个。
     
     
       //注意:为了防止内存泄漏,要将后面不会用到的而不新建了的数组delete掉,否则它在程序运行时会一直存在,增加内存负担。
       for(int i=0;i<4;++i)
       {
           delete []surroundingH[i];
           surroundingH[i]=NULL;
       }
       delete[]leftArray;
       leftArray=NULL;
       delete[]rightArray;
       rightArray=NULL;
       
       return height;
         
    }
    //下面这个是得到扩展矩阵的函数。
    float**getExpandedH(Point**p,int rowNum,int colNum)
    {
        float*Hrowminus=new float[colNum],*Hrowplus=new float[colNum];
        float*Hcolminus=new float[rowNum],*Hcolplus=new float[rowNum];
        float Hmm,Hpm,Hmp,Hpp; //Hmm代表H-1,-1   Hp,m代表H(rowNum-1)+1,-1    Hm,p代表H-1,(colNum-1)+1    Hpp代表H(rowNum-1)+1,(rowNum-1)+1.这四个值要等到那4个数组的值都计算出来之知道。
        for(int j=0;j<colNum;++j)
        {
            Hrowminus[j]=3*p[0][j].z-3*p[1][j].z+p[2][j].z;
            Hrowplus[j]=3*p[rowNum-1][j].z-3*p[rowNum-2][j].z+p[rowNum-3][j].z;
        }
        ///
        for(int i=0;i<rowNum;++i)
        {
            Hcolminus[i]=3*p[i][0].z-3*p[i][1].z+p[i][2].z;
            Hcolplus[i]=3*p[i][colNum-1].z-3*p[i][colNum-2].z+p[i][colNum-3].z;
        }
        /下面计算4个角点的值。
        Hmm=3*Hcolminus[0]-3*Hcolminus[1]+Hcolminus[2];//H-1,-1
        Hpm=3*Hcolminus[rowNum-1]-3*Hcolminus[rowNum-2]+Hcolminus[rowNum-3];
        Hmp=3*Hrowminus[colNum-1]-3*Hrowminus[colNum-2]+Hrowminus[colNum-3];
        Hpp=3*Hcolplus[rowNum-1]-3*Hcolplus[rowNum-2]+Hcolplus[rowNum-3];
     
     
        像上面那样分类讨论的话,算法就过于复杂了,出错的概率就很大,与其这样,还不如以空间换取时间,新建一个扩大数组,包含了所有高程值(包括扩充的四条边).
        float**expandedH=new float*[rowNum+2];
        for(int i=0;i<rowNum+2;++i)
        {
            expandedH[i]=new float[colNum+2];
            for(int j=0;j<colNum+2;++j)
            {
                if(i==0)
                {
                    if(j==0)
                        expandedH[i][j]=Hmm; //其实就是expandH[0][0]=Hmm;
                    else if(j==colNum+1)
                        expandedH[i][j]=Hmp;
                    else //即j>0&&j<colNum+1
                        expandedH[i][j]=Hrowminus[j-1];
                }
                else if(i==rowNum+1)
                {
                    if(j==0)
                        expandedH[i][j]=Hpm;
                    else if(j==colNum+1) //注意==不要写成=
                        expandedH[i][j]=Hpp;
                    else
                        expandedH[i][j]=Hrowplus[j-1];
                }
                else  //剩下的就是中间各行了。即从i==1到i=rowNum的那些行。
                {
                    if(j==0)
                        expandedH[i][j]=Hcolminus[i-1];
                    else if(j==colNum+1)
                        expandedH[i][j]=Hcolplus[i-1];
                    else  //即从j==1到j==colNum那些列。
                        expandedH[i][j]=p[i-1][j-1].z;
                }
     
            }
        }
        /至此,扩充数组就新建并初始化完毕。在返回之前,要先把不需要的数组删除以释放内存。
        delete []Hrowminus;
        Hrowminus=NULL;
        delete []Hrowplus;
        Hrowplus=NULL;
        delete []Hcolminus;
        Hcolminus=NULL;
        delete []Hcolplus;
        Hcolplus=NULL;
     
        return expandedH;
     
    }
     
     
    //下面这个函数是任给一坐标,通过已有的DEM高程值求得该坐标的高程值。而关键是扩展矩阵和起始序号的获取。
    float getDEMInterpolationHeight(Point**p,float**expandedH,int rowNum,int colNum,float delta,float x,float y)//这个函数已经通过验证了。但是这个函数名没有取好,实际上它不只是对于DEM高程有效,只要是有一个包含高程值的点的数组就行。所以要考虑改名或者重载函数getInterpolationHeight(...);
    {
        /*
        //
         
        */
        int startRow=100000,startCol=100000; //先赋给它们一个很大的值,是不可能为行号或者序号的值,如果没有改变则说明到了最后一行。应该是
        float deltaX,deltaY;
        for(int i=0;i<rowNum-1;++i)
        {
            if((x>=i*delta)&&(x<(i+1)*delta))
            {
                startRow=i;
                break;
            }
             
        }
        for(int j=0;j<colNum-1;++j)
        {
             
            if((y>=j*delta)&&(y<(j+1)*delta))
            {
                startCol=j;
                break;
            }
     
        }
        ///最后一行和最后一列要单独考虑。
     
        if(startRow==100000)//说明是最后一行或者是最后一列。
            startRow=rowNum-2;
        if(startCol==100000)
            startCol=colNum-2;
     
        //特别注意下面这个!deltaX要由y和startCol得到,而deltaY要由x和startRow得到。
        deltaX=(y-startCol*delta)/delta; 
        deltaY=(x-startRow*delta)/delta;
         
        if((deltaX==0)&&(deltaY==0))
            return p[startRow][startCol].z;
     
        
        float height;
        height=getInterpolationHeight(expandedH,startRow,startCol,deltaX,deltaY);
        //在返回之前,记得将不需要的数组删除。
     
        return height;
    }
    /
     
     
     
     
     
     
    ///
    float funA(float delta)
    {
        float a;
        a=0-pow(delta,3)+2*pow(delta,2)-delta;
        return a;
    }
    float funB(float delta)
    {
        float b;
        b=3*pow(delta,3)-5*pow(delta,2)+2;
        return b;
     
    }
    float funC(float delta)
    {
        float c;
        c=0-3*pow(delta,3)+4*pow(delta,2)+delta;
        return c;
     
    }
    float funD(float delta)
    {
        float d;
        d=pow(delta,3)-pow(delta,2);
        return d;
    }
     
    #endif

     

    下面两张图是插值前后的对比结果(利用图形接口OpenGL进行显示)。

     

    展开全文
  • 一维、二维与多维插值

    千次阅读 2015-07-29 16:00:33
    转自:...插值就是已知一组离散的数据点集,在集合内部某两个之间预测函数值的方法。 一、一维插值  插值运算是根据数据分布规律,找到一个函数表达式可以连接已知,并用此函

    转自:http://hi.baidu.com/%CD%EE%CE%F7%D1%A7%D4%BA%D6%DC%D3%EE/blog/item/4a154c093116e6a92fddd445.html

     

    插值就是已知一组离散的数据点集,在集合内部某两个点之间预测函数值的方法。

    一、一维插值

        插值运算是根据数据的分布规律,找到一个函数表达式可以连接已知的各点,并用此函数表达式预测两点之间任意位置上的函数值。
        插值运算在信号处理和图像处理领域应用十分广泛。

    1.一维插值函数的使用

        若已知的数据集是平面上的一组离散点集(x,y),则其相应的插值就是一维插值。MATLAB中一维插值函数是interp1。
        y=interp([x,]y,xi,[method],['extrap'],[extrapval]),[]代表可选。
        method:'nearest','linear','spline','pchip','cubic','v5cubic'。


    [0102.3]一维、二维与多维插值



    此m文件运行结果:

     

    [0102.3]一维、二维与多维插值


    放大π/2处:

     

    [0102.3]一维、二维与多维插值


    2.内插运算与外插运算

        (1)只对已知数据点集内部的点进行的插值运算称为内插,可比较准确的估测插值点上的函数值。
        (2)当插值点落在已知数据集的外部时的插值称为外插,要估计外插函数值很难。
        MATLAB对已知数据集外部点上函数值的预测都返回NaN,但可通过为interp1函数添加'extrap'参数指明也用于外插。
        MATLAB的外插结果偏差较大。

     

    二、二维插值

        已知点集在三维空间中的点的插值就二维插值问题,在图像处理中有广泛的应用。
        二维插值函数是interp2,用法与一维插值函数interp1类似。
        ZI=interp2(XYZXIYI, method, extrapval):在已知的(X,Y,Z)三维栅格点数据上,在(XIYI)这些点上用method指定的方法估计函数值,外插使用'extrapval'。

        二维插值中已知数据点集(XY)必须是栅格格式,一般用meshgrid函数产生。interp2要求(XY)必须是严格单调的并且是等间距的,如果(XY)不是等间距的,会将且变换为等间距形式,如果已知是等间距的,可在method参数前加星号,如果:'*cubic'。

     

     

    运行结果:

    [0102.3]一维、二维与多维插值


    三、多维插值

    1.interp3

        三维插值,VI=interp3(X,YZVXIYIZI, method),用法同二维插值interp2。

    2.n维插值

        VI=interpn(X1X2X3…VY1Y2Y3,, method),用法同二维插值interp2。

    3.ndgrid

        产生n维空间上的栅格。

        [X1X2X3, …]=ndgrid(x1x2x3, …)

     

    本文出处

    [1] 王正林,刘明.精通Matlab 7[M].北京:电子工业出版社,2006,P205~P214

    展开全文
  • 有限元方法是数值计算偏微分方程一种普遍方法。这里有一个简单偏微分方程: ,已知初始条件: 为了求解这个偏微分方程,可以将该函数离散为若干个节点,如下图将该函数离散为了5个节点和四个单元。因此除去初始...

    我在网上搜了一下,发现好像讲有限元入门的一来就是什么“最小势能原理”,我觉得很恶心,于是想自己写一个精简教程。

    有限元方法是数值计算偏微分方程的一种普遍方法。

    这里有一个简单偏微分方程:

    equation?tex=f%28x%29%3D%5Cfrac%7B%5Cpartial+f%7D%7B%5Cpartial+x%7D%2Cx%5Cin%5B-1%2C0%5D ,已知初始条件:
    equation?tex=f%280%29%3D1

    为了求解这个偏微分方程,可以将该函数离散为若干个节点,如下图将该函数离散为了5个节点和四个单元。

    6d0375704a00879060f1b80ad89b735a.png

    因此除去初始条件,得到了4个未知的节点:

    equation?tex=f%28x_1%29%3Df%27%28x_1%29

    equation?tex=f%28x_2%29%3Df%27%28x_2%29

    equation?tex=f%28x_3%29%3Df%27%28x_3%29

    equation?tex=f%28x_4%29%3Df%27%28x_4%29

    equation?tex=f%28x_5%29%3Df%27%28x_5%29%3D1

    将这五个点用线链接起来,得到一个连续的函数图像,利用该连续图像来求解函数的偏导数。那么如何将这五个点链接起来呢?

    一,插值多项式

    对于以上有五个节点的函数

    equation?tex=f ,可以建立五个如图的插值函数:

    52c4d9fb87cab5190be089933095ab42.png

    由此可以得到一个函数

    equation?tex=f 的近似函数:
    equation?tex=f%28x%29%5Capprox%5Csum_%7Bk%3D1%7D%5E%7BN%7D%7Bf_k%5Cphi_k%28x%29%7D 其中,
    equation?tex=f_k 是第
    equation?tex=k 个节点的函数值,当然,此时的
    equation?tex=f_k 是作为未知量的存在,在这个新的近似函数中,
    equation?tex=%5Cphi_k%28x%29 则是完全已知的函数。由此可以得到链接节点后的函数图像:

    6060fb58c83586dae7d784f7fd70139a.png

    由于

    equation?tex=%5Cphi_k%28x%29 是已知的,并且
    equation?tex=f_k 是常数,因此对近似函数求导:
    equation?tex=f%27%28x%29%5Capprox%5Csum_%7Bk%3D1%7D%5E%7Bn%7D%7Bf_k%5Cphi_k%27%28x%29%7D 可以得到新的导数图像:

    bf502dfd758c76ee965e12ab9971078c.png

    f6b51f055f1662b641a63fb5f45333c8.png

    但是此时,四个未知量,还是无法求解,怎么办呢?

    二,变分法与偏微分方程的弱变形

    提问:有没有一个函数

    equation?tex=g%28x%29 ,使得函数
    equation?tex=f%28x%29
    equation?tex=g%28x%29 在某个确定的区间一致?

    强形式,即是

    equation?tex=f%28x%29%3Dg%28x%29%2C%5Cforall+x%5Cin%5COmega ,两个函数点对点一致。

    那么弱形式,即是两个函数的卷积相等:

    equation?tex=%5Cint_%7B%5COmega%7Dw%28x%29f%28x%29d%5COmega%3D%5Cint_%7B%5COmega%7Dw%28x%29g%28x%29d%5COmega%2C%5Cforall+w%28x%29

    equation?tex=w%28x%29 是一个测试函数,它可以是任意函数。但是根据变分原理,函数的边界值为0.

    接着上面的例子:

    equation?tex=f%28x%29%3Df%27%28x%29

    移项并乘以测试函数:

    equation?tex=w%28x%29%28f%28x%29-f%27%28x%29%29%3D0

    积分:

    equation?tex=%5Cint_%7B-1%7D%5E%7B0%7Dw%28x%29%28f%28x%29-f%27%28x%29%29dx%3D0

    而它与强形式等价的条件,则是

    equation?tex=%5Cforall+w%28x%29

    别忘了函数

    equation?tex=f 和它的导数
    equation?tex=f%27 的插值近似,将其带入上面的积分形式:

    equation?tex=%5Cint_%7B-1%7D%5E%7B0%7Dw%28x%29%28f_1%5Cphi_1%28x%29%2Bf_2%5Cphi_2%28x%29%2B...%2Bf_5%5Cphi_5%28x%29-f_1%5Cphi%27_1%28x%29-f_2%5Cphi%27_2%28x%29-...-f_5%5Cphi%27_5%28x%29%29dx%3D0

    equation?tex=w%28x%29 可以是任意函数,但是为了简便,这里用
    equation?tex=%5Cphi_i%28x%29 替换
    equation?tex=w%28x%29 (Galerkin法)

    也就是

    equation?tex=%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_i%28x%29%28%5Csum_%7Bk%3D1%7D%5E%7B5%7D%7Bf_k%5Cphi_k%28x%29%7D-%5Csum_%7Bk%3D1%7D%5E%7B5%7D%7Bf_k%5Cphi%27_k%28x%29%7D%29dx%3D0

    不要忘了上面的积分中,包含了一个已知节点,和四个未知节点。接下来分离已知量和未知量:

    equation?tex=%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_i%28x%29%28%5Csum_%7Bk%3D1%7D%5E%7B4%7D%7Bf_k%5Cphi_k%28x%29%7D-%5Csum_%7Bk%3D1%7D%5E%7B4%7D%7Bf_k%5Cphi%27_k%28x%29%7D%29dx%3D-f_5%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_i%28x%29%28%5Cphi_5%28x%29-%5Cphi%27_5%28x%29%29dx

    由此我们得到了一个方程。

    但是四个未知量至少需要四个方程才能解,所以还需要遍历未知节点的

    equation?tex=%5Cphi_i%28x%29 ,得到一个线性方程组:

    equation?tex=%5Cbegin%7Bbmatrix%7D+%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_1%28x%29%28%5Cphi_1%28x%29-%5Cphi%27_1%28x%29%29dx+%26+%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_1%28x%29%28%5Cphi_2%28x%29-%5Cphi%27_2%28x%29%29dx+%26%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_1%28x%29%28%5Cphi_3%28x%29-%5Cphi%27_3%28x%29%29dx++%26%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_1%28x%29%28%5Cphi_4%28x%29-%5Cphi%27_4%28x%29%29dx+%5C%5C++%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_2%28x%29%28%5Cphi_1%28x%29-%5Cphi%27_1%28x%29%29dx+%26+%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_2%28x%29%28%5Cphi_2%28x%29-%5Cphi%27_2%28x%29%29dx+%26+%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_2%28x%29%28%5Cphi_3%28x%29-%5Cphi%27_3%28x%29%29dx+%26%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_2%28x%29%28%5Cphi_4%28x%29-%5Cphi%27_4%28x%29%29dx+%5C%5C++%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_3%28x%29%28%5Cphi_1%28x%29-%5Cphi%27_1%28x%29%29dx+%26+%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_3%28x%29%28%5Cphi_2%28x%29-%5Cphi%27_2%28x%29%29dx+%26+%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_3%28x%29%28%5Cphi_3%28x%29-%5Cphi%27_3%28x%29%29dx+%26%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_3%28x%29%28%5Cphi_4%28x%29-%5Cphi%27_4%28x%29%29dx+%5C%5C+++%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_4%28x%29%28%5Cphi_1%28x%29-%5Cphi%27_1%28x%29%29dx%26+%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_4%28x%29%28%5Cphi_2%28x%29-%5Cphi%27_2%28x%29%29dx+%26%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_4%28x%29%28%5Cphi_3%28x%29-%5Cphi%27_3%28x%29%29dx++%26+%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_4%28x%29%28%5Cphi_4%28x%29-%5Cphi%27_4%28x%29%29dx+%5Cend%7Bbmatrix%7D%5Cbegin%7Bbmatrix%7D+f_1%5C%5C++f_2%5C%5C++f_3%5C%5C++f_4+%5Cend%7Bbmatrix%7D%3D+%5Cbegin%7Bbmatrix%7D+-f_5%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_1%28x%29%28%5Cphi_5%28x%29-%5Cphi%27_5%28x%29%29dx%5C%5C++-f_5%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_2%28x%29%28%5Cphi_5%28x%29-%5Cphi%27_5%28x%29%29dx%5C%5C++-f_5%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_3%28x%29%28%5Cphi_5%28x%29-%5Cphi%27_5%28x%29%29dx%5C%5C++-f_5%5Cint_%7B-1%7D%5E%7B0%7D%5Cphi_4%28x%29%28%5Cphi_5%28x%29-%5Cphi%27_5%28x%29%29dx+%5Cend%7Bbmatrix%7D

    如此,便可通过计算机得到全部的四个节点的值。

    三,热传导模型

    对于一个一维热传导微分方程:

    equation?tex=%5Cfrac%7B%5Cpartial+T%28x%2Ct%29%7D%7B%5Cpartial+t%7D%3D%5Clambda%5Cfrac%7B%5Cpartial%5E2+T%28x%2Ct%29%7D%7B%5Cpartial+x%5E2%7D%2Cx%5Cin%5B0%2CL%5D ,它的两端边界的温度已知,并且初始时刻所有节点温度已知,因此未知量为除初始时刻外时间的中间节点。

    按照上面的套路,首先用插值函数重建一个近似函数:

    equation?tex=T%28x%2Ct%29%5Csimeq%5Csum_%7Bk%3D1%7D%5E%7BN%7D%7BT_k%28x%2Ct%29%5Cphi_k%28x%29%7D

    由于是线性插值,所以在一个元素内,

    equation?tex=%5Cfrac%7B%5Cpartial%5E2+T%28x%2Ct%29%7D%7B%5Cpartial+x%5E2%7D%3D0

    对中间节点进行强弱转换:

    equation?tex=%5Cint_%7B0%7D%5E%7BL%7D%28%5Cfrac%7B%5Cpartial+T%7D%7B%5Cpartial+t%7D-%5Clambda%5Cfrac%7B%5Cpartial%5E2+T%7D%7B%5Cpartial+x%5E2%7D%29%5Cphi_i%28x%29dx%3D0

    对二阶微分项降阶:

    equation?tex=%5Cint_%7B0%7D%5E%7BL%7D%5Cfrac%7B%5Cpartial%5E2+T%7D%7B%5Cpartial+x%5E2%7D%5Cphi_i%28x%29dx%3D%5Cleft.%5Cfrac%7B%5Cpartial+T%7D%7B%5Cpartial+x%7D%5Cphi_i%28x%29%5Cright%7C_%7BL%7D%5E%7B0%7D-%5Cint_%7B0%7D%5E%7BL%7D%5Cfrac%7B%5Cpartial+%5Cphi_i%28x%29%7D%7B%5Cpartial+x%7D%5Cfrac%7B%5Cpartial+T%7D%7B%5Cpartial+x%7Ddx

    由于在中间的节点中,

    equation?tex=%5Cphi_i%280%29%3D%5Cphi_i%28L%29%3D0 (狄利克雷边界条件)

    因此直接得到:

    equation?tex=-%5Cint_%7B0%7D%5E%7BL%7D%5Cfrac%7B%5Cpartial%5E2+T%7D%7B%5Cpartial+x%5E2%7D%5Cphi_i%28x%29dx%3D%5Cint_%7B0%7D%5E%7BL%7D%5Cfrac%7B%5Cpartial+%5Cphi_i%28x%29%7D%7B%5Cpartial+x%7D%5Cfrac%7B%5Cpartial+T%7D%7B%5Cpartial+x%7Ddx

    将该二阶项带入强弱形式转换卷积方程,

    得到:

    equation?tex=%5Cint_%7B0%7D%5E%7BL%7D%28%5Cfrac%7B%5Cpartial+T%7D%7B%5Cpartial+t%7D%5Cphi_i%28x%29%2B%5Clambda%5Cfrac%7B%5Cpartial+%5Cphi_i%28x%29%7D%7B%5Cpartial+x%7D%5Cfrac%7B%5Cpartial+T%7D%7B%5Cpartial+x%7D%29dx%3D0%2C+++i%3D2%2C3%2C4%2C...%2CN-1

    代入插值后的近似函数

    equation?tex=T%5Csimeq%5Csum_%7Bk%3D1%7D%5E%7BN%7D%7BT%5Cphi_k%28x%29%7D

    于是 :

    equation?tex=%5Csum_%7Bk%3D1%7D%5E%7BN%7D%5Cint_%7B0%7D%5E%7BL%7D%28%5Cfrac%7B%5Cpartial+T_k%28t%29%7D%7B%5Cpartial+t%7D%5Cphi_k%28x%29%5Cphi_i%28x%29%2B%5Clambda+T_k%28t%29%5Cfrac%7B%5Cpartial+%5Cphi_i%28x%29%7D%7B%5Cpartial+x%7D%5Cfrac%7B%5Cpartial+%5Cphi_k%28x%29%7D%7B%5Cpartial+x%7D%29dx%3D0%2Ci%3D2%2C3%2C4%2C...%2CN-1

    为了解出时间项,还需要用欧拉后向差分:

    equation?tex=%5Cfrac%7B%5Cpartial+T_k%7D%7B%5Cpartial+t%7D%5Capprox+%5Cfrac%7BT_k%5E%7Bn%2B1%7D-T_k%5E%7Bn%7D%7D%7B%5CDelta+t%7D

    equation?tex=%5Csum_%7Bk%3D1%7D%5E%7BN%7D%28%5Cint_%7B0%7D%5E%7BL%7D%5Cphi_k%28x%29%5Cphi_i%28x%29dx%29%5Cfrac%7BT_k%5E%7Bn%2B1%7D-T_k%5E%7Bn%7D%7D%7B%5CDelta+t%7D%2B%5Clambda+%5Csum_%7Bk%3D1%7D%5E%7BN%7DT_k%5E%7Bn%2B1%7D%28%5Cint_%7B0%7D%5E%7BL%7D%5Cfrac%7B%5Cpartial+%5Cphi_i%28x%29%7D%7B%5Cpartial+x%7D%5Cfrac%7B%5Cpartial+%5Cphi_k%28x%29%7D%7B%5Cpartial+x%7Ddx%29%3D0

    分离已知量和未知量:

    equation?tex=%5Cfrac%7B1%7D%7B%5CDelta+t%7D%5Csum_%7Bk%3D1%7D%5E%7BN%7D%28%5Cint_%7B0%7D%5E%7BL%7D%5Cphi_k%28x%29%5Cphi_i%28x%29dx%29T_k%5E%7Bn%2B1%7D%2B%5Clambda+%5Csum_%7Bk%3D1%7D%5E%7BN%7DT_k%5E%7Bn%2B1%7D%28%5Cint_%7B0%7D%5E%7BL%7D%5Cfrac%7B%5Cpartial+%5Cphi_i%28x%29%7D%7B%5Cpartial+x%7D%5Cfrac%7B%5Cpartial+%5Cphi_k%28x%29%7D%7B%5Cpartial+x%7Ddx%29%3D%5Csum_%7Bk%3D1%7D%5E%7BN%7D%28%5Cint_%7B0%7D%5E%7BL%7D%5Cphi_k%28x%29%5Cphi_i%28x%29dx%29T_k%5E%7Bn%7D

    由于插值函数是已知的,所以可以得到如下关系:

    equation?tex=%5Cint_%7B0%7D%5E%7BL%7D%5Cphi_k%28x%29%5Cphi_i%28x%29dx%3D%5Cleft+%5C%7B++%5Cbegin%7Bmatrix%7D++%5Cfrac%7B2%5CDelta+x%7D%7B3%7D%26++i%3Dk%5C%5C++%5Cfrac%7B%5CDelta+x%7D%7B6%7D+%26+%5Cleft+%7C+i-k+%5Cright+%7C%3D1%5C%5C+++0%26+else+%5Cend%7Bmatrix%7D%5Cright.+

    equation?tex=%5Cint_%7B0%7D%5E%7BL%7D%5Cfrac%7B%5Cpartial+%5Cphi_i%28x%29%7D%7B%5Cpartial+x%7D%5Cfrac%7B%5Cpartial+%5Cphi_k%28x%29%7D%7B%5Cpartial+x%7Ddx%3D%5Cleft+%5C%7B++%5Cbegin%7Bmatrix%7D++%5Cfrac%7B2%7D%7B%5CDelta+x%7D%26++i%3Dk%5C%5C++%5Cfrac%7B-1%7D%7B%5CDelta+x%7D+%26+%5Cleft+%7C+i-k+%5Cright+%7C%3D1%5C%5C+++0%26+else+%5Cend%7Bmatrix%7D%5Cright.+

    两边同时乘以

    equation?tex=%5CDelta+t ,同时除以
    equation?tex=%5CDelta+x+ 则得到完整的方程组:

    equation?tex=%5Cbegin%7Bbmatrix%7D+%5Cfrac%7B2%7D%7B3%7D%2B%5Cfrac%7B2%5Clambda+%5CDelta+t%7D%7B%5CDelta+x%5E%7B2%7D%7D+%26++%5Cfrac%7B1%7D%7B6%7D-%5Cfrac%7B%5Clambda+%5CDelta+t%7D%7B%5CDelta+x%5E%7B2%7D%7D%26++0%26+...+%260+%5C%5C++%5Cfrac%7B1%7D%7B6%7D-%5Cfrac%7B%5Clambda+%5CDelta+t%7D%7B%5CDelta+x%5E%7B2%7D%7D+%26++%5Cfrac%7B2%7D%7B3%7D%2B%5Cfrac%7B2%5Clambda+%5CDelta+t%7D%7B%5CDelta+x%5E%7B2%7D%7D%26++%5Cfrac%7B1%7D%7B6%7D-%5Cfrac%7B%5Clambda+%5CDelta+t%7D%7B%5CDelta+x%5E%7B2%7D%7D%26+...+%26+0%5C%5C+++...%26+...+%26++...++%26...+%26...+%5C%5C++0+%26+0+%26++...%26++...%26+%5Cfrac%7B2%7D%7B3%7D%2B%5Cfrac%7B2%5Clambda+%5CDelta+t%7D%7B%5CDelta+x%5E%7B2%7D%7D++%5Cend%7Bbmatrix%7D%5Cbegin%7Bbmatrix%7D+T_2%5E%7Bn%2B1%7D%5C%5C++T_3%5E%7Bn%2B1%7D%5C%5C++...%5C%5C++T_%7BN-1%7D%5E%7Bn%2B1%7D+%5Cend%7Bbmatrix%7D%3D%5Cbegin%7Bbmatrix%7D+%5Cfrac%7B1%7D%7B6%7DT_1%5E%7Bn%7D%2B%5Cfrac%7B2%7D%7B3%7DT_2%5E%7Bn%7D%2B%5Cfrac%7B1%7D%7B6%7DT_3%5E%7Bn%7D-%28%5Cfrac%7B1%7D%7B6%7D-%5Cfrac%7B%5Clambda+%5CDelta+t%7D%7B%5CDelta+x%5E%7B2%7D%7D%29T_1%5E%7Bn%2B1%7D%5C%5C++%5Cfrac%7B1%7D%7B6%7DT_2%5E%7Bn%7D%2B%5Cfrac%7B2%7D%7B3%7DT_3%5E%7Bn%7D%2B%5Cfrac%7B1%7D%7B6%7DT_4%5E%7Bn%7D%5C%5C++...%5C%5C++%5Cfrac%7B1%7D%7B6%7DT_%7BN-2%7D%5E%7Bn%7D%2B%5Cfrac%7B2%7D%7B3%7DT_%7BN-1%7D%5E%7Bn%7D%2B%5Cfrac%7B1%7D%7B6%7DT_N%5E%7Bn%7D-%28%5Cfrac%7B1%7D%7B6%7D-%5Cfrac%7B%5Clambda+%5CDelta+t%7D%7B%5CDelta+x%5E%7B2%7D%7D%29T_N%5E%7Bn%2B1%7D+%5Cend%7Bbmatrix%7D+

    可由计算机求解。

    四,二维网格

    例举一个二维网格:

    82e67e35d7bc57b760e652d58e071e33.png

    该网格有15个单元,14个节点。并且一个单元包含3个节点,因此某一个单元可以由两两相邻的三个节点唯一标识。

    比如第一单元格,三个节点分别为1,2,6节点。

    还是以热传导模型举例,这次是二维平面的热传导微分方程:

    equation?tex=%5Cfrac%7B%5Cpartial+T%7D%7B%5Cpartial+t%7D%3D%5Clambda%28%5Cfrac%7B%5Cpartial%5E2+T%7D%7B%5Cpartial+x%5E2%7D%2B%5Cfrac%7B%5Cpartial%5E2+T%7D%7B%5Cpartial+y%5E2%7D%29%2C%28x%2Cy%29%5Cin%5COmega

    经过一系列套路后,它的弱形式方程与一维的例子只有很小的差别:

    equation?tex=%5Csum_%7Bk%3D1%7D%5E%7Bn_n%7D%28%5Cint_%7B%5COmega%7D%5Cphi_k%28x%2Cy%29%5Cphi_i%28x%2Cy%29d%5COmega%29%5Cfrac%7BT_k%5E%7Bn%2B1%7D-T_k%5E%7Bn%7D%7D%7B%5CDelta+t%7D%2B%5Clambda+%5Csum_%7Bk%3D1%7D%5E%7Bn_n%7DT_k%5E%7Bn%2B1%7D%28%5Cint_%7B%5COmega%7D%5Cnabla%5Cphi_i%28x%2Cy%29%5Ccdot%5Cnabla%5Cphi_k%28x%2Cy%29d%5COmega%29%3D0

    其中

    equation?tex=n_n 表示第
    equation?tex=n 个节点。如果要表示单元,则用
    equation?tex=n_e

    一般来说需要三个边界条件,一个是初始状态,一个狄利克雷条件,外加一个诺伊曼条件,也就是某一边界的热量传入功率

    equation?tex=Q

    假设某一边界

    equation?tex=D 上是绝热的,则诺伊曼条件为:
    equation?tex=%5Chat%7Bn%7D%5Ccdot+%5Cnabla+T%5Cleft+%7C_%7B%28x%2Cy%29%5Cin+%5Cpartial+D%7D++%5Cright.%3DQ

    按照套路,首先用插值函数离散温度函数:

    equation?tex=T%28x%2Cy%2Ct%29%5Capprox%5Csum_%7Bk%3D1%7D%5E%7Bn_n%7D%7BT_k%28t%29%5Cphi_k%28x%2Cy%29%7D+%5C%5C+%3DT_1%28t%29%5Cphi_1%28x%2Cy%29%5C%5C++%2BT_2%28t%29%5Cphi_2%28x%2Cy%29%5C%5C++...%5C%5C++%2BT_6%28t%29%5Cphi_6%28x%2Cy%29%5C%5C++...%5C%5C++%2BT_%7B14%7D%28t%29%5Cphi_%7B14%7D%28x%2Cy%29+

    6788530b9e4ed31399dcf0c0ac91ecd0.png
    第一节点插值

    48a1a065f2f6836baea6eddf1fd3c344.png
    第二节点插值

    7a8430f870ee99ace2da807e4b1d3e5b.png
    第六节点插值

    二维弱形式可以写成矩阵的形式:

    equation?tex=%5Csum_%7Bk%3D1%7D%5E%7Bn_n%7D%28%5Cint_%7B%5COmega%7D%5Cphi_k%28x%2Cy%29%5Cphi_i%28x%2Cy%29d%5COmega%29%5Cfrac%7BT_k%5E%7Bn%2B1%7D-T_k%5E%7Bn%7D%7D%7B%5CDelta+t%7D%2B%5Clambda+%5Csum_%7Bk%3D1%7D%5E%7Bn_n%7DT_k%5E%7Bn%2B1%7D%28%5Cint_%7B%5COmega%7D%5Cnabla%5Cphi_i%28x%2Cy%29%5Ccdot%5Cnabla%5Cphi_k%28x%2Cy%29d%5COmega%29%3D0%2Ci%3D1%2C2%2C3%2C...%2Cn_n

    equation?tex=%5Cfrac%7B1%7D%7B%5CDelta+t%7DM%28d%5E%7Bn%2B1%7D-d%5En%29%2B%5Clambda+Dd%5E%7Bn%2B1%7D%3D0

    其中

    equation?tex=d%5E%7Bn%2B1%7D%3D%5Cleft%5C%7B+T_k%5E%7Bn%2B1%7D+%5Cright%5C%7D_%7Bk%3D1%2Cn_n%7D
    equation?tex=d%5E%7Bn%7D%3D%5Cleft%5C%7B+T_k%5E%7Bn%7D+%5Cright%5C%7D_%7Bk%3D1%2Cn_n%7D ,为两个节点向量。上标代表差分的时间节点。

    equation?tex=M%3D%5Cleft%5C%7B+M_%7Bik%7D%5Cright%5C%7D_%7Bi%2Ck%3D1%2Cn_n%7D 为质量矩阵,
    equation?tex=D%3D%5Cleft%5C%7B+D_%7Bik%7D%5Cright%5C%7D_%7Bi%2Ck%3D1%2Cn_n%7D 为热扩散矩阵。

    equation?tex=M_%7Bik%7D%3D%5Cint_%7B%5COmega%7D%5Cphi_k%28x%2Cy%29%5Cphi_i%28x%2Cy%29d%5COmega
    equation?tex=D_%7Bik%7D%3D%5Cint_%7B%5COmega%7D%5Cnabla%5Cphi_i%28x%2Cy%29%5Ccdot%5Cnabla%5Cphi_k%28x%2Cy%29d%5COmega

    再进一步简化为:

    equation?tex=Kd%5E%7Bn%2B1%7D%3Df

    equation?tex=K%3D%5Cfrac%7B1%7D%7B%5CDelta+t%7DM%2B%5Clambda+D
    equation?tex=f%3D%5Cfrac%7B1%7D%7B%5CDelta+t%7DMd%5En

    在给出的这个网格中,

    equation?tex=M 为一个
    equation?tex=14%5Ctimes14 的矩阵。

    因此完整的给出该矩阵:

    equation?tex=M%3D%5Cbegin%7Bbmatrix%7D+%5Cint_%7B%5COmega%7D%5Cphi_1%28x%2Cy%29%5Cphi_1%28x%2Cy%29d%5COmega%26++%5Cint_%7B%5COmega%7D%5Cphi_1%28x%2Cy%29%5Cphi_2%28x%2Cy%29d%5COmega%26+...+%26%5Cint_%7B%5COmega%7D%5Cphi_1%28x%2Cy%29%5Cphi_%7B14%7D%28x%2Cy%29d%5COmega+%5C%5C+++%5Cint_%7B%5COmega%7D%5Cphi_2%28x%2Cy%29%5Cphi_1%28x%2Cy%29d%5COmega%26+%5Cint_%7B%5COmega%7D%5Cphi_2%28x%2Cy%29%5Cphi_2%28x%2Cy%29d%5COmega+%26+...+%26+%5Cint_%7B%5COmega%7D%5Cphi_2%28x%2Cy%29%5Cphi_%7B14%7D%28x%2Cy%29d%5COmega%5C%5C+++...%26+...+%26+...+%26...+%5C%5C+++%5Cint_%7B%5COmega%7D%5Cphi_%7B14%7D%28x%2Cy%29%5Cphi_1%28x%2Cy%29d%5COmega%26+%5Cint_%7B%5COmega%7D%5Cphi_%7B14%7D%28x%2Cy%29%5Cphi_2%28x%2Cy%29d%5COmega+%26...++%26+%5Cint_%7B%5COmega%7D%5Cphi_%7B14%7D%28x%2Cy%29%5Cphi_%7B14%7D%28x%2Cy%29d%5COmega+%5Cend%7Bbmatrix%7D

    但是这个矩阵直接放到计算机里算,它的时间复杂度为

    equation?tex=O%28n_n%5Ctimes+n_n%29 , 而这其中有很多元素等于零,因此不能直接放到计算机里算,还需要挑选。

    问题:

    equation?tex=%5Cint_%7B%5COmega%7D%5Cphi_1%28x%2Cy%29%5Cphi_%7B14%7D%28x%2Cy%29d%5COmega 应该等于多少?

    观察插值函数的图像:

    3fa75ab714ed6ceeebe2e3ca0548184a.png
    第一节点和第十四节点插值函数图像

    节点一和节点十四两个插值函数并没有重叠的区域,因此

    equation?tex=%5Cint_%7B%5COmega%7D%5Cphi_1%28x%2Cy%29%5Cphi_%7B14%7D%28x%2Cy%29d%5COmega%3D0

    对于一个有重叠的元素:

    equation?tex=M_%7B11%7D%3D%5Cint_%7B%5COmega%7D%5Cphi_1%28x%2Cy%29%5Cphi_%7B1%7D%28x%2Cy%29d%5COmega

    130aa78dbfd3bc1907d2dc4c34367966.png
    第一节点的插值函数同时占据了第一单元和第十五单元

    第一节点的插值函数同时占据了第一单元和第十五单元,因此可以将积分拆分为两个区域积分。

    equation?tex=M_%7B11%7D%3D%5Cint_%7B%5COmega_1%7D%5Cphi_1%5E1%28x%2Cy%29%5Cphi_1%5E1%28x%2Cy%29d%5COmega%2B%5Cint_%7B%5COmega_%7B15%7D%7D%5Cphi_1%5E%7B15%7D%28x%2Cy%29%5Cphi_1%5E%7B15%7D%28x%2Cy%29d%5COmega

    907c0dcd17e7949fba0ff392c9c3d863.png
    区域拆分

    equation?tex=%5Cphi_i%5E%7Be%7D%28x%2Cy%29 中,
    equation?tex=e 表示单元格的序号,
    equation?tex=i 表示构成单元格的节点序号。

    同样的,

    equation?tex=M_%7B12%7D%3D%5Cint_%7B%5COmega%7D%5Cphi_1%28x%2Cy%29%5Cphi_%7B2%7D%28x%2Cy%29d%5COmega 也可以拆分,并保留两个插值函数重叠的部分。

    equation?tex=M_%7B12%7D%3D%5Cint_%7B%5COmega_1%7D%5Cphi_1%5E1%28x%2Cy%29%5Cphi_%7B2%7D%5E1%28x%2Cy%29d%5COmega

    857767de0c544bdebd355de392e8b8f5.png
    两个插值函数仅在第一单元格重叠

    根据上面的原理,可以得到单一单元格的质量矩阵:

    equation?tex=M_%7Bpq%7D%5Ee%3D%5Cint_%7B%5COmega_e%7D%5Cphi_p%5Ee%28x%2Cy%29%5Cphi_%7Bq%7D%5Ee%28x%2Cy%29d%5COmega ,该矩阵只和某一单元格和它周围三个节点有关。

    而总质量矩阵

    equation?tex=M 则是由所有单元格的质量矩阵拼装起来的。

    4212e1c7457e5cdb5cf6680e0f8cc9b0.png

    a08a3fa984b8f9123586ce2d81a35deb.png

    如上图,第十单元格由节点

    equation?tex=%287%2C8%2C12%29 构成,因此拼装进总质量矩阵后需要把每个元素放入对应的点中,并和其他单元格的节点叠加。

    五,等参单元

    等参单元,就是设置一个简单的多边形单元格,并把它映射到模型的某个网格上。等参原理可以进一步加速卷积的运算速度。

    df931ef023792b21028b4e927fc216ff.png

    等参变量依然可以用插值函数离散化:

    equation?tex=x%28%5Cxi%2C%5Ceta%29%3D%5Csum_%7Bk%3D1%7D%5E%7Bn_%7Ben%7D%7D%7Bx_k%5Ee%5Cphi_k%5Ee%28%5Cxi%2C%5Ceta%29%7D ,其中
    equation?tex=n_%7Ben%7D 表示
    equation?tex=e 单元格的
    equation?tex=n 节点。

    线性插值等参单元:

    对于一维等参单元:

    equation?tex=%5Cphi_1%5Ee%28%5Cxi%29%3D%5Cfrac%7B1-%5Cxi%7D%7B2%7D
    equation?tex=%5Cphi_2%5Ee%28%5Cxi%29%3D%5Cfrac%7B1%2B%5Cxi%7D%7B2%7D

    abc6aea99a74a61f138eba9e31ba3451.png

    二维三角形单元:

    equation?tex=%5Cphi_1%5Ee%28%5Cxi%2C%5Ceta%29%3D%5Cxi
    equation?tex=%5Cphi_2%5Ee%28%5Cxi%2C%5Ceta%29%3D%5Ceta
    equation?tex=%5Cphi_3%5Ee%28%5Cxi%2C%5Ceta%29%3D1-%5Cxi-%5Ceta

    3588ea7a8946d66e5742470483058707.png

    二维四边形单元:

    equation?tex=%5Cphi_1%5Ee%28%5Cxi%2C%5Ceta%29%3D%5Cfrac%7B%281-%5Cxi%29%281-%5Ceta%29%7D%7B4%7D
    equation?tex=%5Cphi_2%5Ee%28%5Cxi%2C%5Ceta%29%3D%5Cfrac%7B%281%2B%5Cxi%29%281-%5Ceta%29%7D%7B4%7D

    equation?tex=%5Cphi_3%5Ee%28%5Cxi%2C%5Ceta%29%3D%5Cfrac%7B%281%2B%5Cxi%29%281%2B%5Ceta%29%7D%7B4%7D
    equation?tex=%5Cphi_1%5Ee%28%5Cxi%2C%5Ceta%29%3D%5Cfrac%7B%281-%5Cxi%29%281%2B%5Ceta%29%7D%7B4%7D

    0b1718a5c826677dab10a6df94038321.png

    由于坐标系的映射,所以从模型坐标系转换到等参坐标系,需要利用雅可比矩阵(jacobi-matrix)。我们在小学三年级已经学过,图形在不同平面的投影面积即是雅可比矩阵的行列式的值。

    equation?tex=M_%7Bpq%7D%5Ee%3D%5Cint_%7B%5COmega_e%7D%5Cphi_p%5Ee%28x%2Cy%29%5Cphi_%7Bq%7D%5E%7Be%7D%28x%2Cy%29d%5COmega%3D%5Cint_%7B0%7D%5E%7B1%7D%5Cint_%7B0%7D%5E%7B1-%5Ceta%7D%5Cphi_p%5Ee%28%5Cxi%2C%5Ceta%29%5Cphi_%7Bq%7D%5E%7Be%7D%28%5Cxi%2C%5Ceta%29%5Cleft%7C+det%28J%5Ee%29+%5Cright%7Cd%5Cxi+d%5Ceta

    对于例子中的一维等参单元:

    equation?tex=%5Cleft%7C+det%28J%5Ee%29+%5Cright%7C%3D%5Cleft%7C+%5Cfrac%7B%5Cpartial+x%7D%7B%5Cpartial+%5Cxi%7D+%5Cright%7C%3D%5Cleft%7C+%5Cfrac%7Bx_2-x_1%7D%7B2%7D+%5Cright%7C%3D%5Cfrac%7B%5CDelta+x%7D%7B2%7D

    对于三角形等参单元:

    equation?tex=%5Cleft%7C+det%28J%5Ee%29+%5Cright%7C%3D%5Cbegin%7Bvmatrix%7D++%5Cfrac%7B%5Cpartial+x%7D%7B%5Cpartial+%5Cxi%7D%26%5Cfrac%7B%5Cpartial+x%7D%7B%5Cpartial+%5Ceta%7D+%5C%5C+++%5Cfrac%7B%5Cpartial+y%7D%7B%5Cpartial+%5Cxi%7D%26+%5Cfrac%7B%5Cpartial+x%7D%7B%5Cpartial+%5Ceta+%7D+%5Cend%7Bvmatrix%7D%3D+%5Cbegin%7Bvmatrix%7D+x_1-x_3+%26+x_2-x_3%5C%5C+++y_1-y_3%26y_2-y_3++%5Cend%7Bvmatrix%7D+

    以例子中的第十模型网格和三角形等参单元举例,第十网格的三个节点

    equation?tex=%287%2C8%2C12%29 对应等参单元的三个节点
    equation?tex=%281%2C2%2C3%29 。那么第十网格的单元质量矩阵如下:

    equation?tex=M_%7Bpq%7D%5E%7B10%7D%3D%5Cbegin%7Bbmatrix%7D+%5Cint_%7B%5COmega_%7B10%7D%7D%5Cphi_7%5E%7B10%7D%28x%2Cy%29%5Cphi_%7B7%7D%5E%7B10%7D%28x%2Cy%29d%5COmega+%26++%5Cint_%7B%5COmega_%7B10%7D%7D%5Cphi_7%5E%7B10%7D%28x%2Cy%29%5Cphi_%7B8%7D%5E%7B10%7D%28x%2Cy%29d%5COmega%26+%5Cint_%7B%5COmega_%7B10%7D%7D%5Cphi_7%5E%7B10%7D%28x%2Cy%29%5Cphi_%7B12%7D%5E%7B10%7D%28x%2Cy%29d%5COmega%5C%5C+++%5Cint_%7B%5COmega_%7B10%7D%7D%5Cphi_8%5E%7B10%7D%28x%2Cy%29%5Cphi_%7B7%7D%5E%7B10%7D%28x%2Cy%29d%5COmega%26++%5Cint_%7B%5COmega_%7B10%7D%7D%5Cphi_8%5E%7B10%7D%28x%2Cy%29%5Cphi_%7B8%7D%5E%7B10%7D%28x%2Cy%29d%5COmega%26+%5Cint_%7B%5COmega_%7B10%7D%7D%5Cphi_8%5E%7B10%7D%28x%2Cy%29%5Cphi_%7B12%7D%5E%7B10%7D%28x%2Cy%29d%5COmega%5C%5C+++%5Cint_%7B%5COmega_%7B10%7D%7D%5Cphi_%7B12%7D%5E%7B10%7D%28x%2Cy%29%5Cphi_%7B7%7D%5E%7B10%7D%28x%2Cy%29d%5COmega%26++%5Cint_%7B%5COmega_%7B10%7D%7D%5Cphi_%7B12%7D%5E%7B10%7D%28x%2Cy%29%5Cphi_%7B8%7D%5E%7B10%7D%28x%2Cy%29d%5COmega+%26++%5Cint_%7B%5COmega_%7B10%7D%7D%5Cphi_%7B12%7D%5E%7B10%7D%28x%2Cy%29%5Cphi_%7B12%7D%5E%7B10%7D%28x%2Cy%29d%5COmega+%5Cend%7Bbmatrix%7D+

    那么它的第一行第一列的元素经过等参变换后:(

    equation?tex=e 表示等参单元。)

    equation?tex=%5Cint_%7B0%7D%5E%7B1%7D%5Cint_%7B0%7D%5E%7B1-%5Ceta%7D%5Cphi_1%5Ee%28%5Cxi%2C%5Ceta%29%5Cphi_%7B1%7D%5Ee%28%5Cxi%2C%5Ceta%29%5Cleft%7C+det%28J%5E%7B10%7D%29+%5Cright%7Cd%5Cxi+d%5Ceta

    第三行第二列:

    equation?tex=%5Cint_%7B0%7D%5E%7B1%7D%5Cint_%7B0%7D%5E%7B1-%5Ceta%7D%5Cphi_3%5Ee%28%5Cxi%2C%5Ceta%29%5Cphi_%7B2%7D%5Ee%28%5Cxi%2C%5Ceta%29%5Cleft%7C+det%28J%5E%7B10%7D%29+%5Cright%7Cd%5Cxi+d%5Ceta

    对于热扩散矩阵

    equation?tex=D ,则熟练运用微积分的链式法则:
    equation?tex=%5Cfrac%7B%5Cpartial+%5Cphi_i%28x%2Cy%29%7D%7B%5Cpartial+x%7D%3D%5Cfrac%7B%5Cpartial+%5Cphi_i%5Ee%28%5Cxi%2C%5Ceta%29%7D%7B%5Cpartial+x%7D%3D%5Cfrac%7B%5Cpartial+%5Cphi_i%5Ee%7D%7B%5Cpartial+%5Cxi%7D%5Cfrac%7B%5Cpartial+%5Cxi%7D%7B%5Cpartial+x%7D%2B%5Cfrac%7B%5Cpartial+%5Cphi_i%5Ee%7D%7B%5Cpartial+%5Ceta%7D%5Cfrac%7B%5Cpartial+%5Ceta%7D%7B%5Cpartial+x%7D

    写成向量的形式也就是:

    equation?tex=%5Cnabla_%7Bx%2Cy%7D%5Cphi_i%28x%2Cy%29%3D%5Cleft%28+J%5Ee+%5Cright%29%5E%7B-T%7D%5Cnabla_%7B%5Cxi%2C%5Ceta%7D%5Cphi_i%5Ee%28%5Cxi%2C%5Ceta%29

    举个例子:

    equation?tex=D_%7B87%7D%5E%7B10%7D%3D%5Cint_%7B%5COmega_%7B10%7D%7D%5Cnabla%5Cphi_8%28x%2Cy%29%5Ccdot%5Cnabla%5Cphi_7%28x%2Cy%29d%5COmega

    它就等于

    equation?tex=%5Cint_%7B0%7D%5E%7B1%7D%5Cint_%7B0%7D%5E%7B1-%5Ceta%7D%5Cleft%28%5Cleft%28+J%5E%7B10%7D+%5Cright%29%5E%7B-T%7D%5Cnabla_%7B%5Cxi%2C%5Ceta%7D%5Cphi_2%5Ee%28%5Cxi%2C%5Ceta%29%5Cright%29%5Ccdot%5Cleft%28%5Cleft%28+J%5E%7B10%7D+%5Cright%29%5E%7B-T%7D%5Cnabla_%7B%5Cxi%2C%5Ceta%7D%5Cphi_1%5Ee%28%5Cxi%2C%5Ceta%29%5Cright%29%5Cleft%7C+det%28J%5E%7B10%7D%29+%5Cright%7Cd%5Cxi+d%5Ceta

    六,结构力学应用一,轴向拉伸杆

    3ba1a60e966cf74eba02e4588e1ab6e0.png
    一个简单的例子

    杆的端点收到一个

    equation?tex=P 的拉力,弹性模量为
    equation?tex=E ,杆长度为
    equation?tex=L

    3ac34f92c020d14600f584ae291cf14b.png

    equation?tex=q%28x%29 为轴向线载荷,
    equation?tex=u%28x%29 为截面轴向位移

    如此可以得到几个简单公式:

    应变

    equation?tex=%5Cvarepsilon%3D%5Cfrac%7Bdu%7D%7Bdx%7D ,应力
    equation?tex=%5Csigma%3DE%5Cvarepsilon ,内力
    equation?tex=F%3DA%5Csigma%3DEA%5Cvarepsilon

    由静力平衡原理可以得到平衡方程:

    equation?tex=F%28x%2Bdx%29-F%28x%29%2Bq%28x%29dx%3D0

    移项得到一个微分方程:

    equation?tex=%5Cfrac%7BdF%28x%29%7D%7Bdx%7D%3D-q%28x%29

    ff669c643b7923481b4c0de3477bc4ee.png

    胡克定理:

    equation?tex=F%28x%29%3DEA%5Cvarepsilon%28x%29

    组合三个方程,形成一个新的微分方程:

    equation?tex=%5Cfrac%7Bd%7D%7Bdx%7D%5Cleft%28+EA%5Cfrac%7Bdu%7D%7Bdx%7D+%5Cright%29%2Bq%28x%29%3D0%2Cx%5Cin%5Bx%2CL%5D

    在有限元的应用中,截面位移

    equation?tex=u%28x%29 是要求解的未知量,因此按照套路,首先要把它用插值函数离散化:
    equation?tex=u%28x%29%5Capprox%5Csum_%7Bk%3D1%7D%5E%7BN%7D%7Bu_k%5Cphi_i%28x%29%7D ,再把线载荷也给离散化
    equation?tex=q%28x%29%5Capprox%5Csum_%7Bk%3D1%7D%5E%7BN%7D%7Bq_k%5Cphi_k%28x%29%7D

    狄利克雷边界条件:

    equation?tex=u%28x%3D0%29%3D0%5Crightarrow+u_1%3D0

    诺伊曼条件:

    equation?tex=F%28L%29%3DP%5Crightarrow+F_N%3DP

    强弱转换:

    equation?tex=%5Cint_%7B0%7D%5E%7BL%7D%5Cleft%28+%5Cphi_i%28x%29%5Cfrac%7Bd%7D%7Bdx%7D%5Cleft%28+EA%5Cfrac%7Bdu%7D%7Bdx%7D+%5Cright%29%2Bq%28x%29%5Cphi_i%28x%29%5Cright%29dx%3D0

    给二阶微分项降阶:

    equation?tex=%5Cint_%7B0%7D%5E%7BL%7D+%5Cphi_i%28x%29%5Cfrac%7Bd%7D%7Bdx%7D%5Cleft%28+EA%5Cfrac%7Bdu%7D%7Bdx%7D+%5Cright%29dx%3D%5Cleft.++%5Cphi_i%28x%29EA%5Cfrac%7Bdu%7D%7Bdx%7D%5Cright%7C_0%5EL-%5Cint_%7B0%7D%5E%7BL%7DEA%5Cfrac%7Bdu%7D%7Bdx%7D%5Cfrac%7Bd%5Cphi_i%28x%29%7D%7Bdx%7Ddx

    由于

    equation?tex=F%28L%29%3DEA%5Cvarepsilon%28L%29%3DP

    因此

    equation?tex=%5Cleft.++%5Cphi_i%28x%29EA%5Cfrac%7Bdu%7D%7Bdx%7D%5Cright%7C_0%5EL%3D%5Cphi_i%28x%29P

    整理得到最终的弱形式:

    equation?tex=%5Cint_%7B0%7D%5E%7BL%7DEA%5Cfrac%7Bdu%7D%7Bdx%7D%5Cfrac%7Bd%5Cphi_i%28x%29%7D%7Bdx%7Ddx%3D%5Cphi_i%28x%29P%2B%5Cint_%7B0%7D%5E%7BL%7Dq%28x%29%5Cphi_i%28x%29dx

    equation?tex=i%3D2%2C3%2C...%2CN

    带入插值后的函数:

    equation?tex=%5Csum_%7Bk%3D1%7D%5E%7BN%7D%5Cint_%7B0%7D%5E%7BL%7DEAu_k%5Cfrac%7Bd%5Cphi_k%28x%29%7D%7Bdx%7D%5Cfrac%7Bd%5Cphi_i%28x%29%7D%7Bdx%7Ddx%3D%5Cphi_i%28x%29P%2B%5Csum_%7Bk%3D1%7D%5E%7BN%7D%5Cint_%7B0%7D%5E%7BL%7Dq_k%5Cphi_k%28x%29%5Cphi_i%28x%29dx

    到这里,就和之前的热传导模型很像了,转化为矩阵表达,该矩阵就叫刚度矩阵。

    其实还有几个例子,比如桁架结构和板壳结构的应用,但是写到这里感觉人生索然无味,就这样吧。

    展开全文
  • 通常情况下,采用无人船进行水下地形测量,得到离散的,具有点号、日期、时间、东坐标(E)、北坐标(N)、水面高程、水下高程和水深等信息点位数据,该数据一般由航带点位数据加水岸线组成,如下图所示: ...

    通常情况下,采用无人船进行水下地形测量,得到的是离散的,具有点号、日期、时间、东坐标(E)、北坐标(N)、水面高程、水下高程和水深等信息的点位数据,该数据一般由航带点位数据加水岸线组成,如下图所示:

     原始点位数据格式如下:

    下面讲解在ArcGIS软件中生成三维水下地形的两种常用方法。

    一、构建不规则三角网(Tin)

    1、创建Tin

      

    生成的Tin:

    2、Tin转栅格

      

    Tin to Raster:

    三维展示:

    二、空间插值

    栅格插值常用的方法有:克里金法、反距离权重发、样条函数法等。

    本文仅演示克里金法插值过程。

     三维展示:

    采用空间插值生成的三维水下地形,需要利用水岸范围进行掩膜裁剪。

    展开全文
  • 在线结构光360°三维轮廓...并提出了一种基于二维离散傅里叶变换多分辨率标定靶标特征提取方法。论述了线结构光四传感器测量系统标定过程。实验结果表明这种标定方法可实现多传感器测量系统高精度同时标定。
  • 插值离散函数逼近重要方法,利用它可通过函数在有限个取值状况,估算出函数在其他近似值。插值:用来填充图像变换时像素之间空隙。 在应用领域中,由有限个已知数据,构造一个函数,由此计算...
  • 到这里的插值方法都是基于线性插值的,即连接已知数据之间的线是线性的,也就是次数是一次。对于线性插值这种方法的,还有次多项式插值和三次多项式插值等,是属于多项式插值的。那么常见的”双三次插值“是什么...
  • 以图像处理领域为例,我们理想图像是均匀分布在二维平面直角坐标系中,任意给出一对坐标,就应该能够得到一个对应颜色值,然而现实是残酷,我们只能够用离散的点阵信息来近似表现图像。现在假设给定一对...
  • 根据被插值函数自变量个数,插值问题分为一维插值二维插值和多维插值等;根据是用分段直线、多项式或样条函数来作为插值函数,插值问题又分为线性插值、多项式插值和样条插值等。 1.一维插值 如果被插值函数是一...
  • 以图像处理领域为例,我们理想图像是均匀分布在二维平面直角坐标系中,任意给出一对坐标,就应该能够得到一个对应颜色值,然而现实是残酷,我们只能够用离散的点阵信息来近似表现图像。现在假设给定一对...
  • 插值算法[数学建模]

    2020-08-20 22:23:35
    插值插值算法一数据插值方法分段线性插值分段次插值(分段抛物插值)拉格朗日插值法龙格现象牛顿插值法埃尔米特插值法分段三次埃尔米特插值PCHIP样条插值三次样条插值n数据插值 插值算法 在工程和数学应用中,...
  • 以图像处理领域为例,我们理想图像是均匀分布在二维平面直角坐标系中,任意给出一对坐标,就应该能够得到一个对应颜色值,然而现实是残酷,我们只能够用离散的点阵信息来近似表现图像。 现在假设给定一对...
  • 反距离权重插值(IDW)python实现

    万次阅读 2019-06-10 10:21:53
    定义: 反距离加权法又称N-P法,是非规则分布点变成规则分布点常用的网格化方法之一。该方法的基本思想是离所估算的网格点距离越近的离散点对该网格... 首先,需要计算所有离散数据点与所求网格点的距离,在二维...
  • 定义:反距离加权法又称N-P法,是非规则分布点变成规则分布点常用的网格化方法之一。该方法的基本思想是离所估算的网格点...首先,需要计算所有离散数据点与所求网格点的距离,在二维平面空间,离散点(xi,yi)到网格...
  • SIFT算法中,在DoG空间找到极值点后,需要对极值点进行修正,本文主要... 利用已知的离散空间点插值得到连续空间极值点的方法叫做子像元插值。  首先来看一个一函数插值的例子(如图):    这个图中,我...
  • 关键点定位 之前的方法检测到的...离散空间的极值点并不是真正的极值点,下图显示了二维函数离散空间得到的极值点与连续空间极值点的差别。利用已知的离散空间点插值得到的连续空间极值点的方法叫做子像素插值(S...
  • 离散空间的极值点并不是真正的极值点,下图显示了二维函数离散空间得到的极值点与连续空间极值点的差别。利用已知的离散空间点插值得到的连续空间极值点的方法叫做子像素插值(Sub-pixel interpolation)。 候选...
  • SIFT(4)----关键定位

    千次阅读 2018-09-25 17:12:46
     离散空间的极值点并不是真正的极值点,图4.1显示了二维函数离散空间得到的极值点与连续空间极值点的差别。利用已知的离散空间点插值得到的连续空间极值点的方法叫做子像素插值(Sub-pixel Interpolation)。   ...
  • 然后构造曲面网格,利用Biharmonic Spline二维离散点插值方法拟合三维曲面。最后,采用Contour Line.vi绘制等高线水平可定义等油耗曲线和等功率曲线(二维等高线图),并由三次样条插值得到外特性曲线和坐标轴...
  • 方法的数值分析 !!

    2009-09-02 11:31:55
    5、3二维抛物型方程Chebyshev拟谱方法 5、3、1半离散Chebyshev拟谱方法 5、3、2全离散Chebyshev拟谱方法 5、4广义BBM方程Chebyshev拟谱方法 5、5变系数二阶椭圆方程Dirichlet问题Chebyshev拟谱方法 5、6定常...
  • 13.3.2 二维小波变换图像压缩 13.3.3 图像压缩中阈值确定与作用命令 13.3.4 基于小波包变换图像压缩 13.3.5 小波变换用于图像去噪 13.3.6 小波分析用于图像增强 13.3.7 图像钝化与锐化 13.3.8 ...
  • 1.5 Kirchhoff偏移公式的离散形式 1.6 单程波形式Kirchhoff公式 1.7 程函方程和输运方程 1.8 射线Kirchhoff公式 1.9 散射Kirchhoff成像 第2章 零偏移距记录合成 2.1 伪谱法合成零偏移距记录 2.1.1 方法原理 2.1.2 ...
  • 13.3.2 二维小波变换图像压缩 13.3.3 图像压缩中阈值确定与作用命令 13.3.4 基于小波包变换图像压缩 13.3.5 小波变换用于图像去噪 13.3.6 小波分析用于图像增强 13.3.7 图像钝化与锐化 13.3.8 ...
  • 用算法程序集(C语言描述)(第五版)+源代码 第1章 多项式计算 1.1 一维多项式求值 1.2 一维多项式多组求值 1.3 二维多项式求值 1.4 复系数多项式求值 1.5 多项式相乘 1.6 复系数多项式相乘 1.7 多项式相除 1.8 ...
  • 1.3 二维多项式求值 1.4 复系数多项式求值 1.5 多项式相乘 1.6 复系数多项式相乘 1.7 多项式相除 1.8 复系数多项式相除 第2章 复数运算 2.1 复数乘法 2.2 负数除法 2.3 复数乘幂 2.4 复数n次方根 2.5 复数指数 2.6...
  • 1.3 二维多项式求值 1.4 复系数多项式求值 1.5 多项式相乘 1.6 复系数多项式相乘 1.7 多项式相除 1.8 复系数多项式相除 第2章 复数运算 2.1 复数乘法 2.2 负数除法 2.3 复数乘幂 2.4 复数n次方根 2.5 复数指数 2.6...
  • 支持离散点批量水准拟合插值计算。 12)时间标示法变换 历书时、儒略日、GPS时、年积日等之间转换;GNSS观测文件与星历文件名称计算。 13)图幅编号计算 由点位计算所在图幅号;由图幅号计算图幅范围;支持传统图幅...
  • 常用fortran统计程序

    2010-03-29 17:53:04
    维离散功率谱分析 Discrete Fourier spectrum of one-dimensional series fourier(n,x,a,b,c,s,cta)  The discrete Fourier spectrum of one-dimensional series x(n). 求一维序列x(n)离散Fourier谱分析,...
  • 介绍二维图形绘制方法与绘图设置对话框使用 第11集:Origin内置二维图形概述(一);介绍内置二维图形特点和应用 第12集:Origin内置二维图形概述(二);介绍内置二维图形特点和应用 第13集:绘图细节设置(一)...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

二维离散点的插值方法