call zgeev('V', 'V', n, arr, lda, w, vl, ldvl, vr, ldvr, work, lwork, rwork, info)这个函数是求矩阵的特征值,且结果是双精度复数的情况,具体可以查MKL的官方文档。
如果是单精度复数就要用cgeev,其中的参数也是将双精度改为单精度即可。

其中的参数,
“V”,“V”:分别代表是否求矩阵的左特征向量还是右特征向量。选择“N”代表不求,其中有特征向量和Matlab的eig函数是一致的。
n:整数,数组arr的阶
arr:待求矩阵,如果结果是复数,就要把双精度的arr转换成复数形式。如:
arr_cmlx = cmplx(arr,0.0d0)
lda:整数,至少大于n
w:双精度复数,特征值,大小为(n)
vl:双精度复数,左特征向量,大小为(n,n)
ldvl:整数,至少大于n
vr:双精度复数,右特征向量,大小为(n,n)
ldvr:整数,至少大于n
work:整数,大小为2n
lwork: 整数,至少大于2n
rwork: 整数,至少大于2n。一般来说写2n没毛病,不过lwork,rwork具体的设置放上文档截图

info:整数,如果为0说明求解成功,如果为负数,比如-3代表第三个参数你设置的不对,-4代表第四个以此类推。如果是正数,如1,代表第一个特征值为0,解是奇异的,2代表第二个,以此类推。下面放一个例子,可以直接运行试试。
    program program
    use lapack95
    implicit none
    integer, parameter :: n = 3 ! 矩阵大小
    integer :: i, j, info, lda, ldvl, ldvr, lwork, rwork, work(2*n)
    complex*16 :: arr(n,n), w(n)
    complex*16 :: vl(n,n), vr(n,n)
    ! 初始化复数矩阵
    arr = reshape([(1.0, 2.0), (3.0, 4.0), (5.0, 6.0), &
        (7.0, 8.0), (9.0, 10.0), (11.0, 12.0), &
        (13.0, 14.0), (15.0, 16.0), (17.0, 18.0)], [n, n])
    lda = n
    ldvl = n
    ldvr = n
    lwork = 2*n
    rwork = 2*n
    ! 调用LAPACK库中的zgeev函数求解复数矩阵的特征值
    call zgeev('V', 'V', n, arr, lda, w, vl, ldvl, vr, ldvr, work, lwork, rwork, info)
    ! 打印特征值
    do i = 1, n
        print *, "Eigenvalue ", i, ": ", w(i)
    end do
    ! 打印特征向量
    do i = 1, n
        do j = 1, n
            write(*, '(F10.7,A,F10.7,A,2X)', advance='no') real(vr(i,j)), "+", aimag(vr(i,j)), "i"
        end do
        write(*,*) ! 换行
    end do
    end program输出如下:
  Eigenvalue            1 :  (29.4359959090198,32.2251550243328)
  Eigenvalue            2 :  (-2.43599590901985,-2.22515502433279)
  Eigenvalue            3 :  (-4.037373503902555E-016,-5.245388153875226E-016)
  0.4594184+ 0.0083891i   0.8864625+ 0.0000000i  -0.4082483+ 0.0000000i
  0.5701955+ 0.0041945i   0.2481004+-0.0080782i   0.8164966+ 0.0000000i
  0.6809727+ 0.0000000i  -0.3902616+-0.0161565i  -0.4082483+ 0.0000000i
  
下面是相同matlab的结果:
 29.435995909019830 +32.225155024332800i
  -2.435995909019847 - 2.225155024332794i
  -0.000000000000000 - 0.000000000000001i
  0.459418381369183 + 0.008389093159843i  0.886462489565377 + 0.000000000000000i -0.408248290463862 + 0.000000000000000i
   0.570195542494289 + 0.004194546579922i  0.248100428415959 - 0.008078242749363i  0.816496580927726 + 0.000000000000000i
   0.680972703619395 + 0.000000000000000i -0.390261632733458 - 0.016156485498726i -0.408248290463863 + 0.000000000000000i
可以看到结果可以算是一致的。






![学习babylon.js --- [4] 体验WebVR](https://img-blog.csdnimg.cn/87983d87a5a64db4980a90b371001d40.png)












