敲了几行代码,实现了一些基本运算,果然很方便.
1 program Console4
2 implicit none
3 parameter N=5
4 integer i,j
5 real array1(2,N),array2(N,2),array3(2,2)
6 real array4(2,3),array5(2,3),array6(2,3)
7 array1(1,1)=3.2;array1(1,2)=4.5;array1(1,3)=7.56;array1(1,4)=6.34;array1(1,5)=34.2;
8 array1(2,1)=44.3;array1(2,2)=12.3;array1(2,3)=1.236;array1(2,4)=12.2;array1(2,5)=9.5;
9 !对array1 求转置矩阵
10 array2=transpose(array1)
11 call PrintArray(array1)
12 call PrintArray(array2)
13 !对array1和array2求乘积
14 array3=matmul(array1,array2)
15 call PrintArray(array3)
16 array4=3
17 array5=2
18 array6=array4+array5
19 call PrintArray(array6)
20 array6=array4-array5
21 call PrintArray(array6)
22 !array6= lincg(array5)
23 read *,i
24
25 end program Console4
26
27 subroutine PrintArray(array)
28 real array(:,:)
29 integer length,i
30 length=size(array,1)
31 do i=1,length
32 print *,array(i,:)
33 end do
34 print *,''
35 end subroutine
我定义了几个矩阵,分别用它们做了矩阵的加,减,乘,求转置运算,可以看到加法和减法直接调用运算符就行了,不需要重载.乘法和求转置矩阵则可以直接调用内部函数.
另外我定义了负责在屏幕上输入矩阵的函数PrintArray(array),将矩阵作为函数参数也是很方便的.
矩阵是二维数组,而向量是一维数组,内置函数matmul不能实现矩阵与向量的乘法运算。在这一点
Fortran
不如matlab灵活。
Fortran
如何实现矩阵与向量的乘法运算,现有以下三种方法供参考。一)将一维数组看作二维数组的退化形式,比如a(3)可以看作a(3,1)或者a(1,3),这样就可以用matmul函数计算了。二)用spread函数将一维数组扩展成二维数组,同样可用matmul函...
为了实现分子按照特定方向转向,参考之前利用VESTA手动截取晶面并采用矩阵计算转向的方法,用
fortran
编写了一个实现简单矩阵计算功能的小程序,用于处理矩阵加、减、乘、除、行列式值、求逆、转置几类计算,主要是求逆和除法的实现。
求逆采用了初等变换和利用伴随矩阵两种方法,但编译好的应当时默认利用伴随矩阵方法。
缺点:计算种类简单,后续应参考“云算子”增加“线性方程组、特征值和特征向量、Chol...
integer :: i, j, k, temp
real, dimension(5, 5) :: a, at, b
real, dimension(5) :: rowSum, maxRowSum
! 输入矩阵
do i ...
real(kind=8),parameter::pi=3.142592D0 ! kind=8表示双精度,15位,parameter表示常数定义,D表示双精度
real::pi_2=3.142592 ! 默认单精度,也就是kind=4,只能保证7位精度
real(ki.
tips矩阵矩阵赋值
fortran
程序代码扩展名为*.f 或*.for的文件,就是指以fixed format 来编写的程序;以*.f90 为扩展名的文件,就是以free format 来编写的程序。
空格无意义
输出引号——打两层引号。
write(*,*) "My name is ""Peter""."
书上 'fixed format’用全大写
输出两个,用逗号隔开
integer默认长整型,4byte。如果要使用短整型:
integer(2) a
integer*2 a
fortran
三角函