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

Fortran中单位矩阵的定义及F77代码中10与.0D0的作用解析

嘿,我来帮你理清这两个Fortran相关的问题:

1. 如何在Fortran中定义单位矩阵?

定义单位矩阵的方式分不同Fortran版本:

  • 老式F77写法:就像你贴的那段代码一样,用嵌套循环遍历矩阵的每个元素,当行号等于列号时赋值为1,否则赋值为0,这是最基础的通用方法,不管哪个版本都能跑。
  • 现代Fortran(2008及以后):可以用内置的identity函数直接生成,比如:
    use iso_fortran_env
    real(real64), allocatable :: unitm(:,:)
    unitm = identity(m, n)  ! m是行数,n是列数
    
    另外也可以用数组构造器结合merge函数简化写法:
    integer :: m, n, i, j
    real(real64) :: unitm(m,n)
    unitm = merge(1.0d0, 0.0d0, spread([(i,i=1,m)],2,n) == spread([(j,j=1,n)],1,m))
    
2. 解释你贴的F77代码中的10和.0D0

先把你的代码贴出来方便对照:

DO 10 I=1, M
DO 10 J=1, N
IF(I .EQ. J) THEN
UNITM(I,J)=1.0D0
ELSE
UNITM(I,J)=0.0D0
END IF
CONTINUE
  • 关于10:这是F77里的语句标号。在老式Fortran中,循环需要用标号来标记结束位置——这里的两个DO 10循环,都会在标号为10的CONTINUE语句处结束。这种写法是F77的特色,现代Fortran已经改用END DO来明确结束循环,不用再写标号了。
  • 关于.0D0:这是双精度浮点数的字面量写法。D是双精度的标识,.0D0表示值为0的双精度数,1.0D0就是值为1的双精度数。如果直接写0.0,Fortran默认会当作单精度浮点数处理;用D后缀可以明确指定类型,避免把单精度值赋值给双精度数组时出现类型不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:32:25