计算矩阵指数,matlab直接可以用expm,但是fortran笔者了解到MKL好像还没有子程序直接可以使用
闲暇之余,给出一个求矩阵指数的fortran代码仅供参考
代码如下,如有必要,读者为了以后的方便也可将下面代码直接封装
program test_expm
use lapack95
implicit none
integer, parameter :: n = 3
integer :: i, info, ipiv(n)
real :: a(n,n), wr(n), wi(n), vr(n,n), vl(n,n)
real :: temp(n,n)
a = reshape([1, 1, 0, 0, 0, 2, 0, 0, -1],shape(a))
a = transpose(a)
call geev(a, wr, wi, vl, vr, info)
write(*,*) '特征值为:'
write(*,'(*(f10.4))') wr
write(*,*) '特征向量为:'
do i = 1, n
write(*,'(*(f10.4))') vr(i,:)
end do
if (info == 0) then
write(*,*) '特征值与特征向量计算成功!'
write(*,*) '特征值与特征向量计算失败!'
end if
write(*,*)
write(*,*) '开始计算矩阵指数......'
temp = 0.
forall( i = 1:n ) temp(i,i) = exp(wr(i))
vr = vl
call getrf(vr, ipiv)
call getri(vr, ipiv) !// 求特征向量的逆矩阵
!// 计算矩阵指数
a = matmul(matmul(vl,temp),vr)
write(*,*) '矩阵A的矩阵指数为:'
do i = 1, n
write(*,'(*(f10.4))') a(:,i)
end do
end program test_expm
执行结果如下
特征值为:
1.0000 0.0000 -1.0000
特征向量为:
1.0000 -0.7071 0.4082
0.0000 0.7071 -0.8165
0.0000 0.0000 0.4082
特征值与特征向量计算成功!
开始计算矩阵指数......
矩阵A的矩阵指数为:
2.7183 1.7183 1.0862
0.0000 1.0000 1.2642
0.0000 0.0000 0.3679
如有必要,读者可与matlab结果检验一下。
要注意的地方:如果所求矩阵阶数较大,比如几千阶,程序中的matmul函数建议更换为MKl中的gemm计算
具体可参考https://blog.csdn.net/chd_lkl/article/details/94437455
还有就是阶数过大,在求逆矩阵那一块如有必要,也可进行适当修改
计算矩阵指数,matlab直接可以用expm,但是fortran笔者了解到MKL好像还没有子程序直接可以使用闲暇之余,给出一个求矩阵指数的fortran代码仅供参考代码如下,如有必要,读者为了以后的方便也可将下面代码直接封装program test_expm use lapack95 implicit none integer, parame...
这篇博文简要记录一下
使用
MKL
函数库
计算
一般
矩阵
的特征值与特征向量
对形如对称
矩阵
或是埃尔米特等特殊
矩阵
有其对应的子程序,在这里先不涉及。有需求的可以自行查阅
MKL
官方文档
下面给出本次示例代码:代码
使用
f95接口。f77借口参数太多,笔者太懒<不过懒惰是创新的原动力^_^>
program testGeev
use lapack95
implicit...
这里写自定义目录标题欢迎
使用
Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
欢迎
使用
Markdown编辑器
你好! 这是你第一次
使用
Markdown编辑器 所展示的欢迎页。如果你想学习如何
使用
Mar
这里写自定义目录标题安装oneAPI(Intel
Fortran
编译器)尝试
MKL
库
Fortran
C++
安装oneAPI(Intel
Fortran
编译器)
Intel oneAPI Base Toolkit
Intel oneAPI HPC Toolkit
可以选择下载安装或者在线安装,下载的话需要用教育邮箱登陆。
尝试
MKL
库
参考官方文档Symmetric Eigenproblems。
Fortran
program main
implicit none
integer*4,
Intel visual
Fortran
调用
MKL
MKL
是 BLAS, LAPACK 和 ScalLAPACK 等
函数库
集成的数学例程。其中,Lapack 包含了求解科学与工程
计算
中最常见的数值线性代数问题。
1)关于调用
MKL
IVF的设置
a)项目——属性——
Fortran
——Libraries——Use Intel Math Kernel Library ——Parallel
行的定义。在自由格式中每行可以书写132个字符。程序语句的位置没有了只能从第7列后开始书写的固定约定,可以在任意一列开始书写。同一行中可以顺序书写多条程序语句,语句之间用分号“;”进行分隔。
•注释行的定义。在自由格式中,惊叹号“!”后的字符均被视为注释。但是,字符串中的“!”出外,如“PRINT *, ‘Hello!
Fortran
90/95’”中,“
Fortran
90/95’”不会被认为
intel visual
fortran
2019是一种效率较高的编译器。
实测下来比g
fortran
能快好多。(没有太修改编译选项的情况下)
mkl
库是intel visual
fortran
2019 的一个数学库,里面有Fourier变换,随机数生成,
矩阵
乘法等功能,(我记得好像它的帮助文件竟然有三千多页)。
在编译选项中 添加 /Q
mkl
即可。
如未
使用
mkl
库时,
ifort test...
最近借用了师兄的服务器,得在Linux下运行
fortran
。今天花了点时间找资料,配置成功了。在这里记录一下怎样在Linux下配置
mkl
库。首先,在装好oneAPI的情况下,oneAPI是自动包含
mkl
库的,无需另外下载。要是用
mkl
库,只需要配置环境变量即可!具体操作请看下文。
配置环境变量:进入终端,
使用
下面代码找到oneAPI的安装路径:
whereis ifort
然后可以看到
得到这些路径后
$ vim ~/.bashrc
/* 以下内容在.bashrc中添加 */
export L
最近因为读研需要,刚开始学习
Fortran
,恰好要用到
MKL
库。记录一下配置并调用
MKL
库。
在装好VS2019与oneAPI的情况下,oneAPI是包含有
MKL
库的,不需要另外下载
MKL
。
首先新建一个项目,打开“工具”→“选项”→“Intel Compiles and Libraries”→“”
用
fortran
语言编写数值程序时,如果要
计算
一个大型稀疏
矩阵
与一个向量的乘积,可以
使用
下面高效的方法
1. 首先
使用
CSR格式大型稀疏
矩阵
进行存储
2. 调用
mkl
函数库
中的
mkl
_dcsrsymv
计算
这样做的目的不仅可以节约内存,而且
计算
速度也比较快
示例代码如下:
program
mkl
_symv
implicit none
integer, parameter ...
符号约定:
l I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型。
l s:P表示s类型为P类型(任意kind值)。s:P(k)表示s类型为P类型(kind值=k)。
l […]表示可选参数。
l *表示常用函数。
dna049:
Fortran:用csr存储格式并使用pardiso求解稀疏矩阵
chder_白南: