首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Fortran95中从向量构建矩阵

在Fortran95中从向量构建矩阵
EN

Stack Overflow用户
提问于 2018-01-25 23:58:09
回答 2查看 616关注 0票数 0

通过使用以下代码,我试图构建一个3*3矩阵,但无法做到。任何帮助都将不胜感激。

代码语言:javascript
复制
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。但是,我得到了以下错误。

代码语言:javascript
复制
$ 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.
EN

回答 2

Stack Overflow用户

发布于 2018-02-07 01:32:41

将三个长度为5的数组(a2、a2、a3)放入单个长度为15的数组中,并使用重塑:

代码语言:javascript
复制
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 program

RESHAPE从a123中获取值,并按Fortran标准顺序将它们填充到mat1的形状中。还有一些选项用于对值进行排序,以及当列表和形状之间的元素数量不一致时进行填充。这在RESHAPE内部的文档中都有介绍。

票数 1
EN

Stack Overflow用户

发布于 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的矩阵,但它只会填充在第一个树列中。

  • 你声明了a1a2a3是一维的。正如@francescalus已经在评论中指出的,你正在尝试访问这些数组,就像它们有二维一样,这是不起作用的。这是一种可能性

mat1(i,1:3) = a1(i),a2(i),a3(i)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48447058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档