由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Computation版 - C++里用Blas/Lapack的问题
相关主题
请教一个计算速度的问题lapack如何求解XA=B
直接用NR的源程序需要注意什么吗?Gfortran library
求矩阵逆的算法我们碰到的大麻烦——急寻计算机工作和博后机会 (转载)
Fast solver of linear equation systemnumerical recipe c++
有没有用Lapack的?lapack++ and blitz++
mklman is by far the most grandious reference manual i've seenMatlab C++ math lib的速度问题
[合集] 这里有lapack用的比较熟悉的人吗?再次求教用qsub和直接用./file的区别
do you use blas/lapack?如何用c++程序读入文本文件中数据,求高手指教一下
相关话题的讨论汇总
话题: ldvr话题: dcomplex话题: ldvl话题: im话题: lda
进入Computation版参与讨论
1 (共1页)
b********r
发帖数: 1080
1
我用atlas,程序里简单调用zgeev函数。编译没有错,没有警告。运行也不出错,但结
果完全不对。似乎函数根本没有被调用。
另外哪里能找到在C或者C++下调用Blas/Lapack函数的具体格式?我这里函数参数还是
在网上搜的。完全没有相关的手册。难道Blas/Lapack只是给fortran用的?
程序如下
#include
#include
#include
#include
#include
using namespace std;
typedef complex dcomplex;
extern "C" void zgeev_( char* jobvl, char* jobvr, int* n, dcomplex* a,
int* lda, dcomplex* w, dcomplex* vl, int* ldvl, dcomplex*
vr, int* ldvr, dcomplex* work, int* lwork, double* rwork, int* info );
int main()
{
/* Locals */
int N=4;
int LDVL=N,LDVR=N,LDA=N;
int n = N, lda = N, ldvl = LDVL, ldvr = LDVR, info, lwork;
cout< dcomplex wkopt;
dcomplex* work;
/* Local arrays */
/* rwork dimension should be at least 2*n */
double rwork[2*N];
dcomplex w[N], vl[LDVL*N], vr[LDVR*N];
dcomplex a[16] = {
(-3.84, 2.25), (-0.66, 0.83), (-3.99, -4.73), ( 7.74, 4.18),
(-8.94, -4.75), (-4.40, -3.82), (-5.88, -6.60), ( 3.66, -7.53),
( 8.95, -6.53), (-3.50, -4.26), (-3.36, -0.40), ( 2.58, 3.60),
(-9.87, 4.82), (-3.15, 7.36), (-0.75, 5.23), ( 4.59, 5.41)};
lwork = -1;
char jobvl='V',jobvr='N';
zgeev_(&jobvl, &jobvr, &n, a, &lda, w, vl, &ldvl, vr, &ldvr, &wkopt,
&lwork, rwork, &info );
cout<<"w="< }
输出结果是
w=(0,0)(0,0)(0,0)(0,0)
问题出在哪里呢?谢谢!
x*****u
发帖数: 3419
2
This is one I had that works:
/*
to compile :
$ gcc array_lapack.c -llapack -lblas -lm
*/
#include
#include
#define size 3 /* dimension of matrix */
struct complex {double re; double im;}; /* a complex number */
main()
{
struct complex A[3][3], b[3], WORK[6], RWORK[6];
struct complex w[3], vl[1][3], vr[1][3];
double AT[2*size*size]; /* for transformed matrix */
int i, j, ok;
char jobvl, jobvr;
int n, lda, ldvl, ldvr, lwork;
n=size;
jobvl='N';
jobvr='N';
lda=size;
ldvl=1;
ldvr=1;
lwork=6;
A[0][0].re=3.1;A[0][0].im=-1.8; /* the input matrix */
A[0][1].re=1.3;A[0][1].im=0.2;
A[0][2].re=-5.7;A[0][2].im=-4.3;
A[1][0].re=1.0;A[1][0].im=0;
A[1][1].re=-6.9;A[1][1].im=3.2;
A[1][2].re=5.8;A[1][2].im=2.2;
A[2][0].re=3.4;A[2][0].im=-4;
A[2][1].re=7.2;A[2][1].im=2.9;
A[2][2].re=-8.8;A[2][2].im=3.2;
for (i=0; i { /* have to transform the matrix */
for(j=0; j {
AT[2*(j+size*i)]=A[j][i].re;
AT[2*(j+size*i)+1]=A[j][i].im;
}
}
/* find solution using LAPACK routine ZGEEV, all the non-array arguments
have to be pointers */
zgeev_(&jobvl, &jobvr,&n, AT, &lda, w, vl, &ldvl, vr, &ldvr, WORK, &lwork,
RWORK, &ok);
if (ok==0) /* output of eigenvalues */
{
for (i=0; i {
printf("%f\t%f\n", w[i].re, w[i].im);
}
}
else printf("An error occurred");
}

【在 b********r 的大作中提到】
: 我用atlas,程序里简单调用zgeev函数。编译没有错,没有警告。运行也不出错,但结
: 果完全不对。似乎函数根本没有被调用。
: 另外哪里能找到在C或者C++下调用Blas/Lapack函数的具体格式?我这里函数参数还是
: 在网上搜的。完全没有相关的手册。难道Blas/Lapack只是给fortran用的?
: 程序如下
: #include
: #include
: #include
: #include
: #include

l********a
发帖数: 1154
3
c interface of blas
http://netlib.org/blas/blast-forum/cinterface.pdf

【在 b********r 的大作中提到】
: 我用atlas,程序里简单调用zgeev函数。编译没有错,没有警告。运行也不出错,但结
: 果完全不对。似乎函数根本没有被调用。
: 另外哪里能找到在C或者C++下调用Blas/Lapack函数的具体格式?我这里函数参数还是
: 在网上搜的。完全没有相关的手册。难道Blas/Lapack只是给fortran用的?
: 程序如下
: #include
: #include
: #include
: #include
: #include

j**u
发帖数: 6059
4
像我一样只用GSL包打天下的算不算特懒的人,:-)

【在 l********a 的大作中提到】
: c interface of blas
: http://netlib.org/blas/blast-forum/cinterface.pdf

b********r
发帖数: 1080
5
我用atlas,程序里简单调用zgeev函数。编译没有错,没有警告。运行也不出错,但结
果完全不对。似乎函数根本没有被调用。
另外哪里能找到在C或者C++下调用Blas/Lapack函数的具体格式?我这里函数参数还是
在网上搜的。完全没有相关的手册。难道Blas/Lapack只是给fortran用的?
程序如下
#include
#include
#include
#include
#include
using namespace std;
typedef complex dcomplex;
extern "C" void zgeev_( char* jobvl, char* jobvr, int* n, dcomplex* a,
int* lda, dcomplex* w, dcomplex* vl, int* ldvl, dcomplex*
vr, int* ldvr, dcomplex* work, int* lwork, double* rwork, int* info );
int main()
{
/* Locals */
int N=4;
int LDVL=N,LDVR=N,LDA=N;
int n = N, lda = N, ldvl = LDVL, ldvr = LDVR, info, lwork;
cout< dcomplex wkopt;
dcomplex* work;
/* Local arrays */
/* rwork dimension should be at least 2*n */
double rwork[2*N];
dcomplex w[N], vl[LDVL*N], vr[LDVR*N];
dcomplex a[16] = {
(-3.84, 2.25), (-0.66, 0.83), (-3.99, -4.73), ( 7.74, 4.18),
(-8.94, -4.75), (-4.40, -3.82), (-5.88, -6.60), ( 3.66, -7.53),
( 8.95, -6.53), (-3.50, -4.26), (-3.36, -0.40), ( 2.58, 3.60),
(-9.87, 4.82), (-3.15, 7.36), (-0.75, 5.23), ( 4.59, 5.41)};
lwork = -1;
char jobvl='V',jobvr='N';
zgeev_(&jobvl, &jobvr, &n, a, &lda, w, vl, &ldvl, vr, &ldvr, &wkopt,
&lwork, rwork, &info );
cout<<"w="< }
输出结果是
w=(0,0)(0,0)(0,0)(0,0)
问题出在哪里呢?谢谢!
x*****u
发帖数: 3419
6
This is one I had that works:
/*
to compile :
$ gcc array_lapack.c -llapack -lblas -lm
*/
#include
#include
#define size 3 /* dimension of matrix */
struct complex {double re; double im;}; /* a complex number */
main()
{
struct complex A[3][3], b[3], WORK[6], RWORK[6];
struct complex w[3], vl[1][3], vr[1][3];
double AT[2*size*size]; /* for transformed matrix */
int i, j, ok;
char jobvl, jobvr;
int n, lda, ldvl, ldvr, lwork;
n=size;
jobvl='N';
jobvr='N';
lda=size;
ldvl=1;
ldvr=1;
lwork=6;
A[0][0].re=3.1;A[0][0].im=-1.8; /* the input matrix */
A[0][1].re=1.3;A[0][1].im=0.2;
A[0][2].re=-5.7;A[0][2].im=-4.3;
A[1][0].re=1.0;A[1][0].im=0;
A[1][1].re=-6.9;A[1][1].im=3.2;
A[1][2].re=5.8;A[1][2].im=2.2;
A[2][0].re=3.4;A[2][0].im=-4;
A[2][1].re=7.2;A[2][1].im=2.9;
A[2][2].re=-8.8;A[2][2].im=3.2;
for (i=0; i { /* have to transform the matrix */
for(j=0; j {
AT[2*(j+size*i)]=A[j][i].re;
AT[2*(j+size*i)+1]=A[j][i].im;
}
}
/* find solution using LAPACK routine ZGEEV, all the non-array arguments
have to be pointers */
zgeev_(&jobvl, &jobvr,&n, AT, &lda, w, vl, &ldvl, vr, &ldvr, WORK, &lwork,
RWORK, &ok);
if (ok==0) /* output of eigenvalues */
{
for (i=0; i {
printf("%f\t%f\n", w[i].re, w[i].im);
}
}
else printf("An error occurred");
}

【在 b********r 的大作中提到】
: 我用atlas,程序里简单调用zgeev函数。编译没有错,没有警告。运行也不出错,但结
: 果完全不对。似乎函数根本没有被调用。
: 另外哪里能找到在C或者C++下调用Blas/Lapack函数的具体格式?我这里函数参数还是
: 在网上搜的。完全没有相关的手册。难道Blas/Lapack只是给fortran用的?
: 程序如下
: #include
: #include
: #include
: #include
: #include

l********a
发帖数: 1154
7
c interface of blas
http://netlib.org/blas/blast-forum/cinterface.pdf

【在 b********r 的大作中提到】
: 我用atlas,程序里简单调用zgeev函数。编译没有错,没有警告。运行也不出错,但结
: 果完全不对。似乎函数根本没有被调用。
: 另外哪里能找到在C或者C++下调用Blas/Lapack函数的具体格式?我这里函数参数还是
: 在网上搜的。完全没有相关的手册。难道Blas/Lapack只是给fortran用的?
: 程序如下
: #include
: #include
: #include
: #include
: #include

j**u
发帖数: 6059
8
像我一样只用GSL包打天下的算不算特懒的人,:-)

【在 l********a 的大作中提到】
: c interface of blas
: http://netlib.org/blas/blast-forum/cinterface.pdf

d***q
发帖数: 1119
9
对规模大一些的计算
gsl 性能如何?

【在 j**u 的大作中提到】
: 像我一样只用GSL包打天下的算不算特懒的人,:-)
j**u
发帖数: 6059
10
我一般最多用27个core,没有觉得gsl有什么不好。gsl其实包含了c的blas,因为大部
分常用函数都有,所以非常方便。

【在 d***q 的大作中提到】
: 对规模大一些的计算
: gsl 性能如何?

d***q
发帖数: 1119
11
thx....
1 (共1页)
进入Computation版参与讨论
相关主题
如何用c++程序读入文本文件中数据,求高手指教一下有没有用Lapack的?
求助:C++里的fstream究竟该怎么用? (转载)mklman is by far the most grandious reference manual i've seen
20个包子,求解c++基础问题 (转载)[合集] 这里有lapack用的比较熟悉的人吗?
paralllel eigensolverdo you use blas/lapack?
请教一个计算速度的问题lapack如何求解XA=B
直接用NR的源程序需要注意什么吗?Gfortran library
求矩阵逆的算法我们碰到的大麻烦——急寻计算机工作和博后机会 (转载)
Fast solver of linear equation systemnumerical recipe c++
相关话题的讨论汇总
话题: ldvr话题: dcomplex话题: ldvl话题: im话题: lda