在c中有两个数组时,对n的所有值进行插值的最佳方法是什么?

在c中有两个数组时,对n的所有值进行插值的最佳方法是什么?,c,arrays,header,interpolation,linear-interpolation,C,Arrays,Header,Interpolation,Linear Interpolation,我想用两个数组的信息来插值n的任何值。我有一个主文件,在代码中使用omega和n,还有一个用于插值的头文件。n和ω在主文件中声明为int n=129和双ω。我尝试像下面的代码那样进行数学插值,但当n的值与数组中的值不同时,它似乎遇到了麻烦。它似乎适用于n=30、n=60、n=100等,但不适用于n=35、n=129等 还有其他更好的插值方法吗?我对指针不是很在行,所以我不确定我是否正确使用了它们,或者它们是否需要 我曾尝试在没有头文件的情况下为插值创建一个单独的项目,它似乎工作正常,因此我怀疑它

我想用两个数组的信息来插值n的任何值。我有一个主文件,在代码中使用omega和n,还有一个用于插值的头文件。n和ω在主文件中声明为
int n=129
双ω。我尝试像下面的代码那样进行数学插值,但当n的值与数组中的值不同时,它似乎遇到了麻烦。它似乎适用于n=30、n=60、n=100等,但不适用于n=35、n=129等

还有其他更好的插值方法吗?我对指针不是很在行,所以我不确定我是否正确使用了它们,或者它们是否需要

我曾尝试在没有头文件的情况下为插值创建一个单独的项目,它似乎工作正常,因此我怀疑它与头文件有关,但我不完全确定。我正在使用代码块

#include "header.h"

void interpol(int n, double *omega){

int i;
int nn[9] = {0, 5, 10, 20, 30, 40, 60, 100, 500};
double oo[9] = {1.7, 1.78, 1.86, 1.92, 1.95, 1.96, 1.97, 1.98, 1.99};

    for (i=0; i<9; i++)
    {
       if (n<nn[i])
       {
           *omega = oo[i-1] + ((oo[i+1]-oo[i-1])/(nn[i+1]-nn[i-1]))*(n-nn[i-1]);
           break;
       }
    }
printf("\nomega = %lf \n", *omega);
}

对于n=129,预期值应为1.98 ish,但结果为2.6 ish。

问题很可能在于此位:

for (i=0; i<9; i++) {
   if (n < nn[i]) {
       omega = oo[i-1] + ((oo[i+1]-oo[i-1])/(nn[i+1]-nn[i-1]))*(n-nn[i-1]);
       break;
   }
}

用于(i=0;i请发布所有代码,包括main。我们无法告诉您那里的代码出了什么问题。此外,如果您怀疑某个标头出了问题,手动将其复制并粘贴到相关文件中是查看该值是否持续的一种方法。您还可以谈论项目,这表明您正在使用某种IDE,如果你告诉我们是哪一种,那会很有帮助。你如何调用function
interpol
?@Heim请将其包含在主要帖子中,而不是在这里作为评论。如果有很多不相关的代码,那么制作一个新项目,在其中删除所有这些代码是测试它是否仍然有效的一个好方法。此外,你只说代码不能按您希望的方式工作,但我们无法确切知道这意味着什么。预期的正确值是什么,您得到的错误值是什么?为什么您现在将
*omega=…
更改为
omega=…
。前者是正确的,后者是错误的。@alk从错误的代码复制,现已更正。什么那么你建议一个解决方案吗?我尝试过使用一些数字,但仍然不起作用:/@Heim好吧,如果从I=0开始对I来说太小了,而I<9让我变得太大了,那么也许我应该从稍大的值开始,以稍小的值结束。我没有解决问题,我害怕:/
for (i=0; i<9; i++) {
   if (n < nn[i]) {
       omega = oo[i-1] + ((oo[i+1]-oo[i-1])/(nn[i+1]-nn[i-1]))*(n-nn[i-1]);
       break;
   }
}