Fortran的数组定义和存储方式


前言

很多科学计算都涉及到向量和矩阵。Fortran里面用于表示向量和矩阵的数据结构就是Array(数组), 一维数组用于表示向量,二维数组用于表示矩阵。

一、一维数组(Array, 向量)

最简单的数组就是一维数组。就是在内存中连续存储的一系列元素。例如
real a(20)
你可以用a(1)来引用第一个元素,a(20)来引用第20个元素。
可以同时定义两个数组。
real b(0:19), weird(-162:237)
第一个数组是a,长度20,索引是从0-19,第二个数组是weird, 长度237+162+1=400.
数组元素的数据类型可以是任何一种类型。

integer i(10)
logical aa(0:1) //索引是0-1, aa(0), aa(1)
double precision x(100)

数组里每一个元素都是一个单独的变量。如下列循环改变sq数组元素的值

c2345678
	  integer i, sq(10)
	  do 100 i = 1, 10
	     sq(i) = i**2
100   continue 

Fortran不会检测索引是否超出数组的大小。Fortran完全把这个错误交给了程序员。

二、二维数组(Array, 矩阵)

1.二维数组的定义

矩阵在线性代数中扮演着非常重要的角色。在Fortran中定义一个3行5列的矩阵的语法如下:
real A(3, 5)
二维数组也可以像一维数组那样有自定义的索引范围。real A(1:3, 1:5)
在使用Fortran语言编程时,我们是很自然的会定义一个很大的矩阵。因为Fortran不会自动进行动态存储分配。

c2345678
	  real A(3, 5)
	  integer i, j
c
c we will only use the upper 3 by 3 part of this array
c
	  do 20 j = 1, 3
	  	do 10 i =1, 3
	  		a(i, j) = real(i)/real(j)
10	  	continue
20	  continue

2.二维数组的存储方式

二维数组其实也是一个连续存储的元素序列。并且对应二维数组来说。就是一列一列的存储的,上一列的最后一个会紧接着下一列的第一个。
列数可以多,但是行数不建议多,否则real A(5, 3), 只用了(3,3)的话就会中间有空的数组元素。换句话说,实际存储二维数组的是一个序列,如果行数太多,就会出现序列不连续的情况。
用以下地址来进一步说明和印证。

addr[A(i, j)] = addr[A(1,1)] + (j-1)*1da + (i-1)

这里的1da就是行数,就是the number of rows。

3.另外一种定义数组的方法

就是使用dimension

c2345678
	  real A, x
	  dimension x(50)
	  dimension A(10, 20)

上述程序和下列程序等价,一般认为上边这种是比较过时的定义数组的程序

c2345678
	  real A(10, 20), x(50)
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值