- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从 C 调用 CLAPACK 函数。我下载了 CLAPACK-3.2.1(来自 http://www.netlib.org/clapack/clapack.tgz)并按照此处的说明进行操作(http://people.sc.fsu.edu/~%20jburkardt/c_src/clapack/clapack.html)。我的 CLAPACK 分布是这样的:
$ ls
BLAS/ COPYING F2CLIBS/ INCLUDE/ INSTALL/ Makefile make.inc.example my_example.c README.install SRC/ TESTING/
我的文件是 my_example.c
就是:
#include <stdio.h>
#include "blaswrap.h"
#include "f2c.h"
#include "clapack.h"
int main()
{
char ta = 'N';
char tb = 'N';
double a[3][3];
a[0][0] = 1;
a[0][1] = 2;
a[0][2] = 3;
a[1][0] = 4;
a[1][1] = 5;
a[1][2] = 6;
a[2][0] = 7;
a[2][1] = 8;
a[2][2] = 9;
double b[3][3];
b[0][0] = 1;
b[0][1] = 0;
b[0][2] = 0;
b[1][0] = 0;
b[1][1] = 0;
b[1][2] = 0;
b[2][0] = 5;
b[2][1] = 5;
b[2][2] = 5;
double c[3][3];
long int m = 3;
long int n = 3;
long int k = 3;
double alpha = 1.0;
double beta = 0.0;
long int lda = 3;
long int ldb = 3;
long int ldc = 3;
f2c_dgemm(&ta, &tb, &m, &n, &k, &alpha, &a[0][0], &lda, &b[0][0], &ldb, &beta, &c[0][0], &ldc);
printf("Resulting C[0][0]: %f\n", c[0][0]);
return 0;
}
当我编译它时,我得到了这个:
$ gcc -I./INCLUDE -I./F2CLIBS/libf2c/ -I./BLAS/WRAP/ my_example.c BLAS/SRC/dgemm.c BLAS/SRC/xerbla.c BLAS/SRC/lsame.c -o my_example.o
How can I get this to compile and run correctly?
BLAS/SRC/xerbla.c: In function ‘xerbla_’:
BLAS/SRC/xerbla.c:69:2: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
BLAS/SRC/xerbla.c:70:3: warning: format ‘%i’ expects argument of type ‘int’, but argument 3 has type ‘integer’ [-Wformat]
这是调用 clapack 函数的正确方法吗?数组传递是否正确?
(PS 我不是要动态链接到现有的 clapack 安装)。
最佳答案
我不知道 LAPACKC 和 LAPACKE 之间的区别,因为我不知道 LAPACKC,但我希望 LAPACKE 能做到这一点... http://www.netlib.org/lapack/lapacke.html
除了 dgemm_
是 BLAS 的一部分并且接口(interface)没有在 lapacke.h
中定义...与LAPACKC相比,LAPACKE可能有点臃肿,但还不够大!
摆脱麻烦的一种(丑陋的?)方法是在 c 代码中声明 fortran 函数并针对 BLAS 进行链接。 http://www.netlib.org/lapack/lawnspdf/lawn270.pdf
这是一个最小的工作示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#include <lapacke.h>
extern void dgemm_(char *transa, char *transb, int *m, int *n, int *k, double
*alpha, double *a, int *lda, double *b, int *ldb, double *beta, double *c,
int *ldc );
int main()
{
double AA[3*3]={ 2.0, -1.0, 0.0,
0, 2.0, -1.0,
0.0, 0, 2.0};
double B[3*3]={ 2.0, -1.0, 0.0,
0, 2.0, -1.0,
0.0, 0, 2.0};
double C[3*3]={ 2.0, -1.0, 0.0,
0, 2.0, -1.0,
0.0, 0, 2.0};
int nn=3;
int lda=3;
int ldb=3;
int ldc=3;
double alpha=2.0;
double beta=0.0;
dgemm_( "N", "N", &nn, &nn, &nn,&alpha, AA, &lda,
B,&ldb, &beta, C, &ldc );
printf("C is : %10.4f %10.4f %10.4f\n",C[0], C[1], C[2]);
printf(" %10.4f %10.4f %10.4f\n",C[3], C[4], C[5]);
printf(" %10.4f %10.4f %10.4f\n",C[6], C[7], C[8]);
return 0;
}
要构建此代码:gcc main.c -o main -lblas
。
lapacke.h
和 LAPACKE 的其他头文件中定义了很多 LAPACK 函数的接口(interface)。例如,要使用 dgetrf_(&n, &n, A, &n,ipvs, &info);
构建代码,代码将由 gcc main.c -o main -llapack - 构建lblas -I/path/to/lapacke.h
希望这对您有所帮助,尽管我不确定是否能告诉您一些有值(value)的信息!
再见,
弗朗西斯
关于c - 如何从 C 调用 CLAPACK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22085277/
的属性
我最近设法构建并运行了一个简单的 CLAPACK Microsoft Visual Studio 2008 项目(从 http://icl.cs.utk.edu/lapack-for-windows/
我正在尝试让 clapack 在 ubuntu 14 上工作......但它一直告诉我 undefined reference “ssyev_”(实际上它发生在“clapack.h”中的任何那些 c
我编写了以下代码来调用 Cython 的 clapack 例程 dgelsy_,但它没有给出最小二乘问题的正确解决方案。 cimport numpy as np import numpy as np
有谁知道在 Accelerate (CLAPACK) 中使用什么函数/方法来求解如下所示的增广矩阵?寻找任何示例代码、示例链接、有关如何求解矩阵的提示。我一直在浏览文档,但大多数事情都与更复杂的图形系
我正在尝试从 C 调用 CLAPACK 函数。我下载了 CLAPACK-3.2.1(来自 http://www.netlib.org/clapack/clapack.tgz)并按照此处的说明进行操作(
我正在将一组空间计算移植到基本上编译和运行 C 代码的嵌入式环境中。 我已经用 CBLAS 和 CLAPACK 替换了以前使用 VNL(不能在新平台上运行的模板化 C++ 库)的一些线性代数函数。他们
我正在将一个使用 clapack 的项目从 osx 转移到 linux 并遇到一些问题。我通过下载 cmake 项目、编译必要的 .h 和 .a 文件并将其移动到项目中的相关位置来使用 clapack
我正在尝试安装 Armadillo link . 但是,make 命令提示“clapack.h” 确实存在于位置/usr/include/atlas/clapack.h。一些帮助将不胜感激。 请注意,
我很难将 clapack 链接到我在 Linux 上的 cmake 项目,非常感谢任何帮助。 我已经成功地构建了 clapack 并将其链接到 osx 上的同一个项目,这使得这种情况特别令人沮丧。 我
有谁知道在 Accelerate (CLAPACK) 中使用什么函数/方法来求解压缩列存储矩阵 (ccs)。我正在寻找任何示例代码、示例链接、有关如何求解矩阵的提示。我一直在浏览文档,但大多数事情都与
我想使用lapack库clapck ,但我如何在 Visual Studio 2008 中的 C++ 项目中使用它... 我也在审查 Template Numerical Toolkit 您是否做过类
我使用 LAPACK 的目的是计算矩阵的 cholesky。我在 Fedora 中使用 C/C++ 编程,但我对要安装哪个 lapack 感到困惑 - LAPACK 与 lapacke 还是 clap
我是一名优秀的程序员,十分优秀!