• C语言实现matlab的interp2函数


    /********一维差值函数*******/

    double inter_linear(double x0, double x1, double y0, double y1, double x)
    {
    double a0, a1, y;
    a0 = (x - x1) / (x0 - x1);
    a1 = (x - x0) / (x1 - x0);
    y = a0*y0 + a1*y1;

    return (y);
    }
    /****************************/

    /*****二维插值函数*****/
    double interp2(double *x, double *y, double z[][500], int m, int n, double a, double b) //一维数组x、y。二维数组z,500可换。mn为向量大小。ab为插值点位置
    {
    int i, j, tmpi, tmpj;
    double w, w1, w2;
    tmpi = 0;
    tmpj = 0;
    w = 0.0;
    for (i = 0; i<m; i++) //确定a在x轴的位置
    {
    if ((a <= x[i]) && (a>x[i + 1])) //
    {
    tmpi = i;
    break;
    }
    if( (a>=x[i])&&(a<x[i+1]) ) //
    {
    tmpi = i;
    break;
    }
    }
    for (j = 0; j<n; j++) //确定b在y轴的位置
    {
    if ((b >= y[j]) && (b<y[j + 1]))
    {
    tmpj = j;
    break;
    }
    }
    /********x方向进行插值*****************/
    if (x[tmpi] == a)
    {
    //
    w1 = z[tmpi][tmpj];
    w2 = z[tmpi][tmpj + 1];
    /**********/
    if (y[tmpj] == b)
    {
    //
    w = w1;
    }
    else
    {
    //
    w = inter_linear(y[tmpj], y[tmpj + 1], w1, w2, b);
    }
    }
    else
    {
    //
    w1 = inter_linear(x[tmpi], x[tmpi + 1], z[tmpi][tmpj], z[tmpi + 1][tmpj], a);
    w2 = inter_linear(x[tmpi], x[tmpi + 1], z[tmpi][tmpj + 1], z[tmpi + 1][tmpj + 1], a);
    if (y[tmpj] == b)
    {
    //
    w = w1;
    }
    else
    {
    //
    w = inter_linear(y[tmpj], y[tmpj + 1], w1, w2, b);
    }
    }
    return (w);
    }
    /****************************/

  • 相关阅读:
    C/C++学习的50个经典网站
    C++ 调用C++写的函数库的2种方法之一(显式调用)
    C++ 调用C++写的类库的2种方法之一(隐式链接)
    几个第三方yum源
    网站运维管理工具
    网站架构文章收集
    linux setup 相关text mode图形配置工具的安装
    nfs 安装配置
    centos6.4 minimal 安装kvm
    keepalived
  • 原文地址:https://www.cnblogs.com/zlll/p/12349511.html
Copyright © 2020-2023  润新知