我用的是VS+IVF。想调用lapack里面的dsyev,安装了MKL。根据教程在VS里面设置了工具的include和lib,在项目上设置了use MKL和link的input。在程序里面加上了use lapack95。
然后在一个demo上面测试dsyev,编译什么的都没有问题,可以得到结果,但是结果是错的。输入的矩阵和向量还是保持原来的值没变,好像dsyev什么事都没干,放进去什么还是输出什么。折腾了一晚上都没搞明白到底怎么回事。
demo是对一个2x2的矩阵做特征值分解。
[Fortran] 纯文本查看 复制代码 program hello
use lapack95
Real*8:: arr1(2,2)
Integer:: info
Real*8:: value(2)
Real*8, allocatable:: works(:)
Integer:: lworks
!
value = 1.
arr1(1,1) = 2.08333333339971
arr1(2,2) = 3.08333333342553
arr1(1,2) = 2.50000000007744
arr1(2,1) = 2.50000000007744
lworks = -1
allocate(works(10))
print *, value
call dsyev("V", "U", 2, arr1, 2, value, works, lworks, info)
print*, value
deallocate(works)
end program hello
两次print出来的特征值都是1. 是最开始设置的。arr1也没有变化,好像dsyev在这里并没有做任何计算。
有没有大佬遇到过这种情况?
|