c-GSL线性代数的例子失败了



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

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

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

gls: ..linalglu.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上,使用了相同的预建安装,但他的代码块运行良好,所以我不知道有什么问题。

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

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确实定义了一个方阵。

希望这能有所帮助
T.

相关内容

  • 没有找到相关文章

最新更新