通过使用以下代码,我试图构建一个3*3矩阵,但无法做到。任何帮助都将不胜感激。
program array
implicit none
integer i, a(5), b(5), a1(5), a2(5), a3(5)
integer, dimension (5,5) :: mat1
a = [0,1,2,3,4]
b = [1,2,2,2,1]
i = 0
do i = 1,5
a1(i) = a(i)*a(i)
a2(i) = a(i)
a3(i) = 1
print*, a1(i), a2(i), a3(i)
end do
do i=1,5
mat1(i,:) = [a1(:,i),a2(:,i),a3(:,i)]
print*, mat1
end do
end program array在我的输出中,我希望有一个5*3的矩阵,其中包含a1;a2;a3。但是,我得到了以下错误。
$ gfortran -Wall -c "HW1.f95" #(in directory: Y:\Fortran & subroutines)
HW1.f95:28.20:
mat1(:,i) = [a1(:,i);a2(:,i);a3(:,i)]
1
Error: Syntax error in array constructor at (1)
HW1.f95:28.26:
mat1(:,i) = [a1(:,i);a2(:,i);a3(:,i)]
1
Error: Invalid character in name at (1)
HW1.f95:28.34:
mat1(:,i) = [a1(:,i);a2(:,i);a3(:,i)]
1
Error: Invalid character in name at (1)
Compilation failed.发布于 2018-02-07 01:32:41
将三个长度为5的数组(a2、a2、a3)放入单个长度为15的数组中,并使用重塑:
program fill_mat1
integer, dimension(5,3) :: mat1
integer, dimension(5) :: a1,a2,a3
integer, dimension(15) :: a123
a1 = (/ 1, 2, 3, 4, 5 /)
a2 = (/ 6, 7, 8, 9,10 /)
a3 = (/ 11,12,13,14,15 /)
a123(1:5) = a1
a123(6:10) = a2
a123(11:15) = a3
mat1 = RESHAPE(a123,mat1)
end programRESHAPE从a123中获取值,并按Fortran标准顺序将它们填充到mat1的形状中。还有一些选项用于对值进行排序,以及当列表和形状之间的元素数量不一致时进行填充。这在RESHAPE内部的文档中都有介绍。
发布于 2018-01-28 11:08:11
在您的程序中编译失败有两个原因
期望拥有5*3矩阵
为此,您需要在声明中将mat1声明为5*3矩阵,如下所示
整数,维度(5,3) ::mat1
或者只在后面的前三个条目上写下,比如
do i=1,5 mat1(i,1:3) = a1(i),a2(i),a3(i) print*,mat1 end do
第二个选项仍然会给你留下一个5*5的矩阵,但它只会填充在第一个树列中。
a1,a2和a3是一维的。正如@francescalus已经在评论中指出的,你正在尝试访问这些数组,就像它们有二维一样,这是不起作用的。这是一种可能性mat1(i,1:3) = a1(i),a2(i),a3(i)
https://stackoverflow.com/questions/48447058
复制相似问题