GSL,Codeblocks,Windows中的GSL线性代数示例失败

时间:2015-12-11 17:06:24

标签: c linear algebra gsl

这里新的。 C编程问题适合所有人。

我最近安装了GSL用于我的计算作业。我从预先构建的库中安装它并将其链接到CodeBlocks,然后运行GSL(bessel函数)的测试示例以确保它工作。一切都很顺利。

然后我尝试了这里给出的线性代数的例子:https://www.gnu.org/software/gsl/manual/html_node/Linear-Algebra-Examples.html#Linear-Algebra-Examples

我收到一条奇怪的错误消息:

gls: ..\linalg\lu.c:63: ERROR: LU decomposition requires square matrix
Default GSL error handler invoked.

This application has requested the Runtime to terminate in an unusual way.
Please contact the application's support team for more information.

然后程序崩溃了225错误代码。

放入标记,我知道我的程序在失败之前进入分解命令(从错误代码中可以很好地猜测)。

3人中有2人证实了这一点。一个人运行一个像我这样的代码块的Windows机器,并使用与我相同的预构建包。另一个在Mac上运行,用不同的软件来编写,编译和运行他的C.第三个人再次在Windows上,使用相同的预建安装,但他的代码块运行良好,所以我不知道是什么东西是那里。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

查看错误消息中的文件和行,我们可以看到:

int
gsl_linalg_LU_decomp (gsl_matrix * A, gsl_permutation * p, int *signum)
{
    if (A->size1 != A->size2)
    {
        GSL_ERROR ("LU decomposition requires square matrix", GSL_ENOTSQR);
    }

代码检查以确保输入的矩阵是方阵(相同数量的行和列)。此外,如果我们在gsl_errno.h内窥视,我们可以找到GSL_ERROR的定义为:

#define GSL_ERROR(reason, gsl_errno) \
       do { \
       gsl_error (reason, __FILE__, __LINE__, gsl_errno) ; \
       return gsl_errno ; \
    } while (0)

因此,实际上会显示一条错误消息,然后GSL_ERROR会导致程序退出并向shell返回错误代码。

此时,如果我不得不猜测,您无法正确复制链接到开发环境的示例程序,因为a_data确实定义了一个方阵。

希望这会有所帮助 吨。