Я хочу интерполировать для любого значения n с информацией двух массивов. У меня есть основной файл, где омега и n используются во всем коде, и у меня есть файл заголовка для интерполяции. n и omega объявлены в основном файле как int n = 129;
и double omega;
. Я пытался математически интерполировать, как в коде ниже, но, похоже, возникают проблемы, когда n имеет значение, отличное от значения в массиве. Кажется, он работает для n = 30, n = 60, n = 100 и т. Д., Но не для n = 35, n = 129 и т. Д.
Есть ли другой способ интерполировать лучше? Я не очень хорошо разбираюсь в указателях, так что я не уверен, правильно ли я их использую, или нужны ли они вообще ..
Я попытался создать отдельный проект для интерполяции без файла заголовка, и он, кажется, работает хорошо, поэтому я подозреваю, что это имеет отношение к файлу заголовка, но я не совсем уверен. Я использую CodeBlocks.
#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);
}
Я добавлю упрощенную версию основного файла, так как интерполяция находится в самом начале, а остальное не важно для этого случая. В шапке это:
void interpol(int n, double *omega);
основной скрипт:
#include "header.h"
int main(){
int n;
double omega;
n=129;
interpol(n, &omega);
printf("\nomega = %lf \n", omega);
return 0;
}
Для n = 129 ожидаемое значение должно составлять 1,98, но получается 2,6.