24小时热门版块排行榜    

查看: 2272  |  回复: 8

quantumage

金虫 (小有名气)

[求助] 怎么找出lapack函数及函数的使用方法

我的电脑上已经安装好了lapack3.2.1版程序包,用的是linuix系统gfortran编译器!由于我刚开始接触,不知道怎么在lapack中找出我需要的函数及函数的使用方法,有那位兄台知道给指点一下啊!我主要是想求一个矩阵的本征值,是一般的矩阵,但是矩阵的本征值里含有复数!我查到一个是dgeev,但不知道是怎么用,格式是什么样!要是知道的能否讲的详细一点啊!谢谢了!
回复此楼

» 收录本帖的淘帖专辑推荐

matlab和maple专业交流

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

study hard every day!
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

chembetsey

木虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
参看LAPACK的手册,官网上有详细的说明和实例。
2楼2012-12-06 07:57:23
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

quantumage

金虫 (小有名气)

引用回帖:
2楼: Originally posted by chembetsey at 2012-12-06 07:57:23
参看LAPACK的手册,官网上有详细的说明和实例。

我已经在官网上查过了,还是没有搞清楚!知道的给点具体的意见吧!
study hard every day!
3楼2012-12-06 11:16:30
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

chembetsey

木虫 (小有名气)

你去看看Intel的MKL手册,上面对每个函数的使用参数都有解释。只要按要求写好矩阵,正确的调用就可以了。难道要别人帮你写出来?
4楼2012-12-06 11:23:02
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

quantumage

金虫 (小有名气)

我找到了dgeev函数的说明,但是有几个参数看不明白!
我是这样理解的
fortran77  call dgeev(jobvl, jobvr,n,a,lda,wr,wi,vl,ldvl,vr,lvdr,work,lwork,info)
jobvl 和jobvr 分别表示是否计算左、右本征矢量
n是矩阵a的阶
a是要计算的矩阵
lda是a的第一维数(这里不是很清楚,如果矩阵a(2,3)那么这里的lda就是2,是这样的吗)?
wr、wi分别是本征值的实部和虚部
vl、vr分别是左右本征矢量,ldvl、ldvr分别表示左右本征矢量的维数
work是计算用的空间数组,lwork是空间数组的维数
info是用来表示计算结果参数,0,i,-i可以用来表示计算成功与否(这里也不是很清楚,我看后面的解释是一般可以选-1)
不知道我这样的理解对不对,我试着按这个方法算了一下(输出的时候wr(j),我就想看一下本征值),但是结果输出的时候总是段错误,不知道为什么?
另外让我迷惑的是lapack的解释分别用了输入参数和输出参数,但我怎么知道这个函数括号里的那个是输入参数,那个是输出参数呢?
study hard every day!
5楼2012-12-07 17:29:03
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

quantumage

金虫 (小有名气)

引用回帖:
4楼: Originally posted by chembetsey at 2012-12-06 11:23:02
你去看看Intel的MKL手册,上面对每个函数的使用参数都有解释。只要按要求写好矩阵,正确的调用就可以了。难道要别人帮你写出来?

谢谢你,按照你的线索我找到了lapack的使用手册!
study hard every day!
6楼2012-12-07 17:31:56
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

quantumage

金虫 (小有名气)

program main
integer i,j,k
real a(3,3),y(3,3),wr(3),wi(3),vl(3,3),vr(3,3)
do i=1,3
  do j=1,3
  a(i,j)=i+j
  end do
end do
do k=1,3
  write(*,*) a(k,
end do
call dgeev('N','V',3,a(3,3),3,wr(3),wi(3),vl(3,3),3,vr(3,3),3,y,-1,x)
write(*,*) wr
end program main
这一次调试成功了,但是为什么算出来的本征值不对啊!我用matlab对比了一下,怎么不一样啊,原因出在那里啊?
study hard every day!
7楼2012-12-07 18:40:36
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

chembetsey

木虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
jjdg: 金币+1, 感谢提供建议 2012-12-08 01:08:06
quantumage: 金币+25, ★★★★★最佳答案, 按照你的指示,最终我算出来了!太感谢了!好心人,谢谢你! 2012-12-10 11:25:28
引用回帖:
7楼: Originally posted by quantumage at 2012-12-07 18:40:36
program main
integer i,j,k
real a(3,3),y(3,3),wr(3),wi(3),vl(3,3),vr(3,3)
do i=1,3
  do j=1,3
  a(i,j)=i+j
  end do
end do
do k=1,3
  write(*,*) a(k,
end do
call dgeev('N','V',3,a(3,3),3 ...

你的调用方式不对。你需要先调用一次,得到work数组的大小,然后再将此大小的数组传进函数里。这是MKL中LAPACK函数的使用方式。
8楼2012-12-07 22:46:45
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

quantumage

金虫 (小有名气)

引用回帖:
8楼: Originally posted by chembetsey at 2012-12-07 22:46:45
你的调用方式不对。你需要先调用一次,得到work数组的大小,然后再将此大小的数组传进函数里。这是MKL中LAPACK函数的使用方式。...

太完美了,不但实根解出来了,连虚根都一起解出来了!真的好感谢你!
study hard every day!
9楼2012-12-10 12:21:21
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 quantumage 的主题更新
信息提示
请填处理意见