.i. 是什么意思?在 Fortran 中指的是什么?

What does .i. refer to in Fortran?

我平时只会用R或者Python所以对Fortran的理解真的很有限。但目前我必须使一些 Fortran 程序的子例程可供 R 使用。我在我需要 "export" 的子例程之一中遇到了这一行。

R2inv(1:(i2-i1-1),1:(i2-i1-1)) = .i.(corrMat((i1+1):(i2-1),(i1+1):(i2-1)))

而且我不知道 .i. 应该在那里做什么。声明了一个 i 变量,但它似乎没有用于该子例程。

我的编译器 gfortran 也无法克服这个术语。 我尝试使用谷歌搜索,但该术语并不是真正的 "googlable"。

由于使用了 IMSL 库,因此可能是来自这些库的表达式。

检查 IMSL Fortran 库的 manual,第 49 页:

CHAPTER 10: LINEAR ALGEBRA OPERATORS AND GENERIC FUNCTIONS

(...)

OPERATORS: .i.

Computes the inverse matrix, for square non-singular matrices, or the MoorePenrose generalized inverse matrix for singular square matrices or rectangular matrices.

正如@francescalus 所说,fortran 中由点包围的标识符是运算符。 除了像 .lt. 这样的固有运算符之外,还可以编写像这样的自定义运算符,以用作常用函数的便捷快捷方式。

OTOH,这种东西必须有很好的文档记录,以免让看到代码的人感到困惑。在这种情况下,一个更有意义的名字 .inv. 可以说是更合适的。