Fortran mkl库函数

1. cheevd复厄密矩阵对角化

厄密矩阵本征值与本征矢的求解

2.getrf,getri 矩阵求逆

getrf 对一个矩阵进行LU分解

getri 计算由LU分解后矩阵的逆

program main
use lapack95	!调用函数库,确保使用的函数存在
!如果时用的是intel fortran,则在编译的时候注释上一行,加入-mkl编译选项即可。
implicit none
integer, parameter :: n = 3
integer :: i, j, temp(n)
real(kind=8) :: a(n,n), aa(n,n)

call random_seed()
call random_number(a)
aa = a

write(*,'(1x,a)') "a = "
do i = 1, n
        write(*,'(*(f12.6,3x))') a(i,:)
end do

!使用库函数求逆
call getrf( a, temp )!先进性LU分解
call getri( a, temp )!然后进行矩阵求逆

write(*,'(1x,a)') 'inv(a) = '
do i = 1, n
        write(*,'(*(f12.6,3x))') a(i,:)
end do

write(*,'(1x,a)') "checking..."
aa = matmul(aa,a)  !// 原矩阵与其逆矩阵的结果为单位矩阵
do i = 1, n
        write(*,'(*(f12.6,3x))') aa(i,:)
end do

end program main

结果如下

a =
    0.959299       0.268247       0.274620
    0.013673       0.082084       0.275984
    0.056097       0.730892       0.177709
 inv(a) =
    1.072178      -0.876915      -0.295021
   -0.074784      -0.888503       1.495423
   -0.030876       3.931107      -0.430155
 checking...
    1.000000       0.000000      -0.000000
   -0.000000       1.000000       0.000000
   -0.000000       0.000000       1.000000

3.?geev一般矩阵对角化

call sgeev(jobvl, jobvr, n, a, lda, wr, wi, vl, ldvl, vr, ldvr, work, lwork, info) call dgeev(jobvl, jobvr, n, a, lda, wr, wi, vl, ldvl, vr, ldvr, work, lwork, info) call cgeev(jobvl, jobvr, n, a, lda, w, vl, ldvl, vr, ldvr, work, lwork, rwork, info)

Avatar
Yuxuan Li
Student

You are beautiful !

Related