You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran95从向量构建矩阵失败,编译报错求助

解决Fortran 95构建5×3矩阵的编译错误

我来帮你搞定这个矩阵构造的问题!你的代码里有几个关键错误导致了编译失败,我会一步步帮你修正并解释原因。

错误分析

你的代码出现编译错误主要有这几个原因:

  • 矩阵维度不匹配:你声明的mat1是5×5的矩阵,但你实际需要的是5×3的,这会导致后续赋值逻辑混乱。
  • 一维数组误用二维索引:a1、a2、a3都是长度为5的一维数组,不能用a1(:,i)这种二维数组的索引方式,这是语法错误的直接来源。
  • 数组构造器写法错误:你试图用分号分隔数组元素,但Fortran 95的数组构造器默认用逗号分隔,而且你的需求是给矩阵的行赋值,不需要这种写法。

修正后的代码

program array
implicit none
integer i, a(5), b(5), a1(5), a2(5), a3(5)
integer, dimension (5,3) :: mat1  ! 修正为目标5×3矩阵维度
a = [0,1,2,3,4]
b = [1,2,2,2,1]

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)]  ! 用单个元素构造一维数组,匹配矩阵行的长度
end do

! 打印最终的5×3矩阵
print*, "Final 5×3 Matrix:"
do i=1,5
    print*, mat1(i,:)
end do

end program array

额外优化:直接赋值整列

如果你想更简洁地实现需求,其实不需要循环每一行,可以直接把a1、a2、a3赋值给矩阵的三列,代码会更高效:

! 替换掉原来的第二个do循环
mat1(:,1) = a1  ! 第一列赋值为a1
mat1(:,2) = a2  ! 第二列赋值为a2
mat1(:,3) = a3  ! 第三列赋值为a3

这样运行后,你就能得到期望的5×3矩阵,每一行对应[a1(i), a2(i), a3(i)]的结构。

内容的提问来源于stack exchange,提问作者Khizar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:08:14