Fortran lapack求数组的特征值,特征向量 您所在的位置:网站首页 milk改为复数形式 Fortran lapack求数组的特征值,特征向量

Fortran lapack求数组的特征值,特征向量

#Fortran lapack求数组的特征值,特征向量| 来源: 网络整理| 查看: 265

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

可以看到结果可以算是一致的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有