gpt4 book ai didi

c - 在 LAPACK 中查询 dgel 的最佳 block 大小

转载 作者:行者123 更新时间:2023-11-30 17:59:25 25 4
gpt4 key购买 nike

我正在尝试使用 LAPACK 在 C 中实现卡尔曼滤波器,并且需要通过回归来估计一些参数。我正在使用dgels但当我尝试运行它时,不断出现奇怪的段错误。我认为这可能与我在参数 LWORK 中设置的 block 大小有关,因此我尝试通过设置 LWORK = -1 来查询最佳大小。根据文档,WORK 的第一个元素应该包含 LWORK 的最佳值。但是当我尝试访问 WORK[0] 时,我遇到了另一个段错误,尽管在调用 dgels 之前已经分配了它!有什么线索吗?这是代码,减去我分配 double *A, *Bint p->N 的位。

char T = 'T';  // Transpose A
int n = 1000;
int LWORK = -1;
int INFO = 0;
double * WORK = (double *) malloc (200*sizeof(double));
printf("%e\n",WORK[0]); // This works
dgels_(&T, &(p->N), &n, &(p->N), A, &(p->N), B, &n, &WORK, &LWORK, &INFO);
printf("%e\n",WORK[0]); // This segfaults

gcc 4.2.1、Mac OS X 雪豹

编辑:事实证明,英特尔有一个很好的示例,说明如何在 C 中使用 dgels here

最佳答案

这里您不遵循FORTRAN API:数组作为对第一个元素的引用传递,但您将其作为对第一个元素的引用的引用传递(即您应该使用 WORK而不是&WORK)。

另请阅读DGELS documentation确保您正确理解其参数含义(例如 NRHSLDALDB)。

是的,请注意C int 大小以及FORTRAN 使用列主序 的事实C 使用行主序 ( wikipedia article )。

关于c - 在 LAPACK 中查询 dgel 的最佳 block 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11462597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com