type row !宣告自订型态row。
real,dimension(:),allocatable :: a !型态是row的变量将会有一个长度尚未确定
end type row !的一维浮点数阵列a。
type(row),dimension(3) :: y !宣告一个长度为3、型态是row的一维阵列y。
allocate(y(1)%a(2)) !阵列y的每个元素都是row的型态。把y(1)的内容用allocate
allocate(y(2)%a(3)) !定义阵列a的长度为2;y(2)的阵列a的长度定义为3;
allocate(y(3)%a(4)) !y(3)的阵列的a的长度定义为4。
y(1)%a(:)=(/1.2, 3.1/)
y(2)%a(:)=(/0.1, 0.2, 0.4/)
y(3)%a(:)=(/1.0, 2.0, 3.0, 4.0/) 1
2 3
配合循环可以只储存下三角矩阵,例如有个5x5矩阵 Z = 4 5 6
type row 7 8 9 10
integer,dimension(:),allocatable :: n 11 12 13 14 15
end type row
type(row),dimension(5) :: Z
integer :: i,j,n !这里的整数n和自订型态row里的n不会有定义模糊的问题。
n=0
do i=1,5
allocate(Z(i)%n(i)) !定义每列的长度
do j=1,i
n=n+1
Z(i)%n(j)=n !把数值存起来
enddo
enddo
※ 引述《daumda (行不行)》之铭言:
: 大家好
: 想请教大家如何宣告一个长度不同的矩阵
: 一般来说矩阵都是宣告成n*n*n...
: 我今天有一组资料,里面各组的长度并不相同
: 例如3组资料,每组各有2,3,4个数值
: 请问要如何使用allocate呢?
: 我第一次有这样需求
: 目前只有最笨的方法,应该是直接开一个远大于资料长度的矩阵
: 比如例子中使用a(10,3)
: 请问大家有别种作法吗?
: 谢谢大家不吝指教!