首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >gsl akima样条插值误差

gsl akima样条插值误差
EN

Stack Overflow用户
提问于 2014-12-10 01:20:55
回答 3查看 1.2K关注 0票数 0

我得到一个'gsl: interp.c:150: ERROR:插值错误‘,代码如下。一些谷歌搜索表明,当您尝试使用interp函数进行外推时,会出现此错误,但我不明白这是如何发生的。我们将非常感谢您的帮助。谢谢。

函数randomground()只返回一个随机数(double)。

代码语言:javascript
运行
复制
#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;
}
EN

回答 3

Stack Overflow用户

发布于 2014-12-10 17:22:55

通过向tx和Fixed添加额外的元素修复了此问题。我猜这就是你让我做的,@ViniciusMiranda。代码现在显示为

代码语言:javascript
运行
复制
                double tx[2*NSTEPS+1] = {0}, theight[2*NSTEPS+1] = {0};
                double terrain[(int) (2*NSTEPS*100)] = {0};
                double terrainsl[(int) (2*NSTEPS*100)] = {0};

            for (j = 0; j < 2*NSTEPS+1; 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+1);
            gsl_spline_init(spline, tx, theight, 2*NSTEPS+1);

            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;
            }

我仍然不明白为什么需要这个修复。

票数 1
EN

Stack Overflow用户

发布于 2015-03-30 01:54:50

Akima样条是一种局部的、子样条插值。对于函数f(x),如果您尝试获取x_i <= x <= x_i+1x的值,则Akima需要用于j = i-2, i-1, i, i+1, i+2, i+3.(x_j, f_j)

票数 0
EN

Stack Overflow用户

发布于 2019-09-07 08:07:24

我在我的代码zigzag.sourceforge.net中发现了同样的错误,并通过对gsl library source中的代码行进行注释、编译和重新安装来解决。

在版本1.14之前的

中,interp.c中有行150

代码语言:javascript
运行
复制
// GSL_ERROR_VAL("interpolation error", GSL_EDOM, GSL_NAN);

我用评论来解决这个问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27384929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档