
FortranNote
chder_白南
无话可说
展开
-
fortran派生数据类型的动态数组
program test implicit none type :: point real :: x real :: y end type type(point), allocatable :: mypoint(:) allocate( mypoint...原创 2020-04-03 11:17:31 · 935 阅读 · 0 评论 -
Fortran计算矩阵2范数
Intel fortran编译器自带的MKL函数库中,只有计算矩阵1范数和无穷范数的程序,所以本文给出fortran使用MKL函数库计算矩阵2范数的示例。而矩阵的2范数的值近似于max(svd(A))运行环境:win10+vs2019+ivf2020代码如下:program norm2 use lapack95 implicit none ...原创 2020-03-19 22:10:33 · 4275 阅读 · 0 评论 -
Fortran/Matlab/Python三种编程语言数组排列方式小记
对一部分做数值计算的初级编程人员而言,往往分不清数组元素的优先排列顺序,本文以Fortran、Matlab、Python三种编程语言进行简要说明。1. Fortran:列优先integer :: a(2,2)a = reshape([1,2,3,4])do i = 1, 2 write( *,'(*(g0,3x))' ) a(i,:)end doend program...原创 2020-03-19 21:46:34 · 1187 阅读 · 0 评论 -
fortran使用ivf扩展qsort排序实例
Program testQsort use ifport integer(2), external :: cmp_f1, cmp_f2 real(4) :: x(5) integer(sizeof_size_t) :: a_len, a_size x = [1.,-3.,2.,5.,4.] print*...原创 2018-11-26 11:12:38 · 1051 阅读 · 2 评论 -
fortran:函数重载示例
下面的代码展示了isnan函数的重载。功能:支持复数运算module overload interface isnan !// 重载函数isnan的接口 module procedure cmplx_isnan end interface contains logical ...原创 2019-05-24 11:13:52 · 1195 阅读 · 0 评论 -
fortran:关于矩阵运算的matmul计算速度过慢解决方案
下面给出两个方阵相乘的示例代码. Z(m,L) = X(m,n) * Y(n,L). 其中X,Y,Z也可以是长阵program main use omp_lib !// 使用omp_lib并行 use ifport, only : fdate !// 使用fdate进行计算时间统计 implicit none integer,...原创 2019-06-02 13:31:25 · 5480 阅读 · 0 评论 -
fortran:过程作为参数传递给其他过程
fortran语言允许将过程作为参数传递给其他过程,下面是示例代码:program test implicit none real, external :: func real :: x, y external :: sub x = 2.; y = 0. ...原创 2019-06-13 20:44:03 · 4192 阅读 · 0 评论 -
fortran使用MKL中的DGEMM实现大矩阵相乘
program TestMKLDgemm use ifport, only : fdate implicit none real*8 :: alpha, beta integer :: i, j integer, parameter :: m = 5000, k = 5000, n = 5000 r...原创 2019-07-01 17:08:48 · 3221 阅读 · 0 评论 -
fortran调用MKL函数库中的gemm的fortran95接口计算矩阵相乘
关于MKL函数库的使用参见下面视频http://v.fcode.cn/video-use_library.html下面给出示例代码program TestMKLgemm use blas95 implicit none integer, parameter :: m = 2, k = 2, n = 2 real*8 :: A...原创 2019-07-02 13:32:34 · 2367 阅读 · 0 评论 -
Fortran:调换矩阵的任意两列
下面代码实现了调换矩阵任意两列的功能program main implicit none real :: x(4,4) integer :: i, j, k call random_seed() call random_number(x) do i = 1, s...原创 2019-07-14 19:37:55 · 1515 阅读 · 0 评论 -
fortran:计算卷积
计算卷积的物理意义与公式网上与书上很多,这里不再赘述。下面是计算两个向量u和v的fortran代码program test_conv !// 计算向量u和v的卷积 implicit none integer :: i, k integer, parameter :: m = 3, n = 8 !// 向量...原创 2019-05-26 19:42:19 · 1511 阅读 · 0 评论 -
fortran:使用IMSL函数库计算第一/二类完全椭圆积分
IMSL函数库是一款强大的商业函数库,高校学生或是老师可以使用教育邮箱进行申请。下面给出IMSL的官网https://www.roguewave.com/products-services/imsl-numerical-libraries接下来给出Fortran使用IMSL函数库计算第一类椭圆积分的示例代码program test include 'link_fnl_sh...原创 2019-05-16 17:05:07 · 2417 阅读 · 0 评论 -
fortran与python存储数组差异小记
这里以三维数组举例1. 先给出fortran代码integer :: a(8) = [1,2,3,4,5,6,7,8], b(2,2,2)b = reshape(a, shape(b))print*, b(:,:,1)将a向量reshape成为b数组后, 可简单地理解为:fortran存储数组元素以"left"优先所以上面代码的执行结果为: 1, 2, 3, 4print*, ...原创 2019-05-05 20:18:12 · 723 阅读 · 0 评论 -
fortran:使用内部函数fdate得到系统时间
program main use ifport, only : fdate implicit none print*, fdate()end program main原创 2019-04-18 13:25:15 · 1940 阅读 · 0 评论 -
fortran:计算第二类椭圆积分
下面代码的功能实现了第二类椭圆积分的计算。本代码借鉴于徐士良老先生的《fortran常用算法程序集 第二版》,再次向老先生致敬!!// 第二类椭圆积分示例!// 取k = 0.5, fai = pi/18 * i, i = 0, 1, ..., 10program main implicit none integer :: i real...原创 2019-03-17 11:10:51 · 2159 阅读 · 0 评论 -
fortran:计算第一类椭圆积分
此fortran代码实现了第一类椭圆积分。在此特别向徐士良老先生致敬。本代码借鉴于徐士良老先生的《fortran常用算法程序集 第二版》。实现代码如下!// 第一类椭圆积分示例!// 取k = 0.6, fai = pi/18 * i, i = 0, 1, ..., 10program main implicit none integer :: i ...原创 2019-03-16 20:43:26 · 3156 阅读 · 0 评论 -
fortran:高斯法求积分
module Gauss_Legendre !//高斯—勒让德积分高斯点及权重的求解模块 implicit none integer, parameter :: n = 5 !// 设置求解高斯点的个数 integer, parameter :: DP = selected_real_kind( p=13 ) !// 设置kin...原创 2019-02-10 20:14:26 · 8072 阅读 · 10 评论 -
fortran:判断一个数是否为素数
下面代码以2-30为数字区间,判断这个区间的哪些数字是素数logical :: log = .false.do n = 2, 30 do i = 2, n-1 if ( mod(n,i) == 0 ) then log = .true. print*...原创 2019-02-21 21:52:02 · 4445 阅读 · 0 评论 -
fortran文件操作之'append'; 'backspace'; 'endfile';
本次内容将讲一下文件操作的“高级技巧!”例如我要读取文件的最后一行数据,一般来说可以直接将前n-1行read过去,再进行读取本文将介绍一种新的方法,代码如下program main implicit none integer :: a open( 100, file = 'a.txt' ) !// 创建一个新文件并写入实验数据 ...原创 2018-12-08 12:57:53 · 7200 阅读 · 7 评论 -
fortran函数重载
某些情况下,我们需要对不同类型或不同数量的参数做相似或相同的操作,由于参数类型、数量不同,我们需要编写不同的函数来处理。比如求绝对值,如果参数是4字节整数,我们需要调用iabs函数;如果参数是4字节或8字节实数,我们需要分别调用sabs或dabs函数。由于需要记住多个功能相同或相近的函数,增加了我们使用这些函数的难度,同时也增加了出错的可能性,比如将实数传递给iabs函数。 上述...原创 2018-11-25 11:25:24 · 2157 阅读 · 0 评论 -
fortran使用MKL函数库计算向量元素之和
这篇博客简要介绍使用MKL中的blas计算向量的元素之和代码如下:program MKL_asum use blas95 implicit none integer, parameter :: n = 10 real*8 :: x(n) = 0, res call random_seed()...原创 2019-07-10 19:33:10 · 1052 阅读 · 0 评论 -
fortran使用MKL函数库计算向量与标量的乘积,然后与另一个向量之和
代码如下:program MKL_axpy use blas95 implicit none integer, parameter :: n = 10 real*8 :: x(n), y(n) real*8 :: a = 2.d0 c...原创 2019-07-11 11:18:13 · 666 阅读 · 0 评论 -
fortran使用MKL函数库求解多右端项线性方程组
本篇博文简要介绍使用MKL函数库计算多个右端项的线性代数方程组代码如下:program MKL_gesv use lapack95 implicit none integer :: i integer, parameter :: n = 3, m = 4 real*8 :: a(n,n), aa(n,n), b(...原创 2019-07-11 14:06:47 · 3289 阅读 · 0 评论 -
fortran使用pardiso求解器求解稀疏非对称线性方程组
program nonsymmetric implicit none integer, parameter :: n = 4 !// depend on your equation integer :: i, j, mm, tmp, nn, fileid, first, num real(kind=8) ...原创 2019-09-10 11:50:11 · 4916 阅读 · 17 评论 -
fortran恢复CSR格式的数组
program RestoreCSRdata implicit none integer, parameter :: n = 5 integer :: i, j, k, mm, tmp, fileid, first, num real(kind=8) :: matrix(n,n), x(n...原创 2019-09-09 20:49:30 · 475 阅读 · 1 评论 -
fortran使用MKL函数库计算大型稀疏矩阵的特征值与特征向量
program scsrev implicit none integer, parameter :: n = 3 !// depend on your equation integer :: i, j, mm, tmp, fileid, first, num real(kind=8) :...原创 2019-09-06 18:42:18 · 3917 阅读 · 3 评论 -
初识fortran条件预处理
下面给出一个fortran条件预处理的程序编译器为IVF在linux上的程序命令与windows的有差别比如linux: mv 1.txt 2.txtwindows: move 1.txt 2.txt!DEC$ define linuxprogram test implicit none!DEC$ if defined (linux) call ...原创 2019-09-02 10:49:55 · 1543 阅读 · 0 评论 -
fortran使用mkl函数库中的mkl_dcsrsymv计算矩阵与向量的乘积
用fortran语言编写数值程序时,如果要计算一个大型稀疏矩阵与一个向量的乘积,可以使用下面高效的方法1. 首先使用CSR格式大型稀疏矩阵进行存储2. 调用mkl函数库中的mkl_dcsrsymv计算这样做的目的不仅可以节约内存,而且计算速度也比较快示例代码如下:program mkl_symv implicit none integer, parameter ...原创 2019-08-31 12:06:06 · 1808 阅读 · 1 评论 -
fortran基于svd分解求解广义逆矩阵
fortran的MKl函数库中好像没有求解广义逆矩阵的sub本篇文章给出基于svd分解求广义逆矩阵的示例代码program pinv use lapack95 implicit none integer :: i, m, n real, allocatable :: A(:,:), U(:,:), S(:,:...原创 2019-08-14 10:11:50 · 2563 阅读 · 2 评论 -
fortran使用MKL函数库中的gesvd求矩阵的SVD分解
下面的代码是使用MKl函数库中的gesvd进行矩阵的svd分解运行环境: win10 + vs2013 + ivf2013代码如下:program svd use lapack95 implicit none integer :: i, m, n real, allocatable :: A(:,:), U...原创 2019-08-14 10:04:23 · 3033 阅读 · 5 评论 -
伪逆矩阵求解算法
对一个m*n的矩阵1. 当 m > n 时A = rand(m,n)[U,D,V] = svd(A)D = D(1:n,1:n)D = D\eye(n)U = U(:,1:n)pinv1 = V*D*U'2. 当 m < n 时A = rand(m,n)[U,D,V] = svd(A)D = D(1:m,1:m)D = D\eye(m)V = V(:,1...原创 2019-08-14 08:55:40 · 4377 阅读 · 0 评论 -
fortran使用MKL函数库计算矩阵指数函数
计算矩阵指数,matlab直接可以用expm,但是fortran笔者了解到MKL好像还没有子程序直接可以使用闲暇之余,给出一个求矩阵指数的fortran代码仅供参考代码如下,如有必要,读者为了以后的方便也可将下面代码直接封装program test_expm use lapack95 implicit none integer, parame...原创 2019-08-07 00:24:35 · 2968 阅读 · 0 评论 -
fortran使用MKL函数库中的geev计算一般矩阵的特征值与特征向量
这篇博文简要记录一下使用MKL函数库计算一般矩阵的特征值与特征向量对形如对称矩阵或是埃尔米特等特殊矩阵有其对应的子程序,在这里先不涉及。有需求的可以自行查阅MKL官方文档下面给出本次示例代码:代码使用f95接口。f77借口参数太多,笔者太懒<不过懒惰是创新的原动力^_^>program testGeev use lapack95 implicit...原创 2019-08-06 23:47:09 · 8395 阅读 · 27 评论 -
fortran动态链接库小记
1. fortran创建动态链接库时,可分为debug和release两种模式:1> debug模式下具体分为Debug Multithreaded (/libs:static /threads /dbglibs)和Debug Multithread DLL (/libs:dll /threads /dbglibs) Debug Multithreaded (/libs:st...原创 2019-08-06 00:39:55 · 1641 阅读 · 0 评论 -
fortran使用MKL函数库中的scal计算一个标量和向量的乘积
下面的代码使用MKL函数库中的scal计算一个标量和向量的乘积program MKL_dotc use blas95 implicit none integer, parameter :: n = 10 real(kind=8) :: x(n), a = 2.d0 call random_seed...原创 2019-07-20 19:28:38 · 399 阅读 · 0 评论 -
fortran使用MKL函数库计算向量2范数
下面的代码使用MKL函数库计算一个向量的欧几里得范数program MKL_nrm2 use blas95 implicit none integer, parameter :: n = 10 real(kind=8) :: x(n), res call random_seed() ...原创 2019-07-20 19:22:29 · 1644 阅读 · 0 评论 -
fortran使用MKL函数库计算一个复数向量的共轭与另一个复数向量的内积
下面的代码使用MKL函数库计算了共轭向量与另一个向量的点积program MKL_dotc use blas95 implicit none integer, parameter :: n = 10 real(kind=8) :: x1(n), x2(n), y1(n), y2(n) complex(kind=8)...原创 2019-07-20 19:17:50 · 1977 阅读 · 0 评论 -
fortran使用MKL函数库计算两个实数向量的内积
这篇博文简要介绍使用MKL函数库计算两个向量的内积代码如下:program MKL_dot use blas95 implicit none integer, parameter :: n = 10 real*8 :: x(n), y(n), res call rando...原创 2019-07-11 20:06:00 · 1504 阅读 · 0 评论 -
fortran使用MKL函数库中的swap交换两个向量的值
下面代码使用MKL函数库中的swap交换两个向量的值program MKL_dotc use blas95 implicit none integer, parameter :: n = 5 real(kind=8) :: x(n), y(n) call random_seed() ...原创 2019-07-20 19:32:00 · 592 阅读 · 0 评论 -
fortran使用MKL函数库计算方阵的逆矩阵
本篇博文简要介绍使用MKL函数库计算方阵的逆矩阵代码如下:program MKL_getrfANDgetri use lapack95 implicit none integer, parameter :: n = 3 integer :: i, j, ipiv(n) real(kind=8) :: a(n,n)...原创 2019-07-11 14:26:51 · 9356 阅读 · 11 评论