다음 코드로 'gsl : interp.c : 150 : ERROR : interpolation error'가 표시됩니다. 일부 인터넷 검색 기능은 interp 함수를 사용하여 추정 할 때이 오류가 발생하지만 여기에서 어떻게 발생하는지 보지 못합니다. 도움말 크게 감사하겠습니다. 감사.gsl akima 스플라인 보간 오류
함수 randomground()
은 난수 (double)를 반환합니다.
#define NSTEPS 100
int main()
{
int j, q, space = 1, refine = 100;
double xi = 0.0, tx[2*NSTEPS] = {0}, theight[2*NSTEPS] = {0};
double terrain[(int) (2*NSTEPS*100)] = {0};
double terrainsl[(int) (2*NSTEPS*100)] = {0};
for (j = 0; j < 2*NSTEPS; j++)
{
tx[j] = (double) j*space;
theight[j] = randomground();
}
gsl_interp_accel *acc = gsl_interp_accel_alloc();
gsl_spline *spline = gsl_spline_alloc(gsl_interp_akima, 2*NSTEPS);
gsl_spline_init(spline, tx, theight, 2*NSTEPS);
for (q = 0; q< 2*NSTEPS*100; q++)
{
terrain[q] = gsl_spline_eval(spline,xi,acc);
terrainsl[q] = gsl_spline_eval_deriv(spline,xi,acc);
xi = xi+(double) space/refine;
}
return 0;
}
내가 그것을 실행할 때 나는 내 Windows 시스템에서이 프로그램을 실행할 때 오류가 없다는 것을 추가해야하지만 랩 서버의 Linux 서버에서 interp 오류가 발생합니다. – NKD
플로트 정밀도 오류가 문제 일 수 있습니다. 범위를 늘리려면 tx의 첫 번째 요소와 마지막 요소에 작은 시프트를 추가합니다. 계산에 필요한 정밀도가 배정도보다 훨씬 낮기 때문에 최종 결과에 영향을 미치지 않습니다. –
@ViniciusMiranda, 죄송합니다. 'tx의 첫 번째 요소와 마지막 요소에 작은 시프트를 추가하십시오.' – NKD