gpt4 book ai didi

arrays - Fortran - 我不明白变量声明

转载 作者:行者123 更新时间:2023-12-01 06:14:51 26 4
gpt4 key购买 nike

我需要分析一些 Fortran 代码

         subroutine ilocz (a,b,c,n,m)
real a(n,n),b(n,m),c(n,m)
do 1 i=1,n
do 2 j=1,m
c(i,j)=0
do 3 k=1,n
3 c(i,j)=c(i,j)+a(i,k)*b(k,j)
2 continue
1 continue
return
end

在其他地方我调用这个方法

call ilocz (a(n11),y(2),a(n12),n,1)

我应该引用 ilocz 5 个变量 - a, b, c, n, m 。没关系。但是 ilocz 的第一行是数组声明。它们与我的方法参数同名。

当我调用 ilocz 时,我将 5 个实数(不是数组)引用给方法。怎么可能?它是如何工作的?

也许这个数字被分配给每个数组元素( a(11) 到 a(n,n) , y(2) 到 b(n,m) , a(n12) 到 c(n,m) )或者什么?

有人可以给我解释一下吗?提前谢谢你。

最佳答案

这是相同的代码,只是进行了现代化处理。如您所见,它需要 abc 的实数数组,但是 FORTRAN 很棒因为你可以像对待数组一样对待标量

pure subroutine ilocz (a,b,c,n,m)
implicit none
! Arguments
integer, intent(in) :: n,m
real, intent(in) :: a(n,n),b(n,m)
real, intent(out) :: c(n,m)
! Local Vars
integer :: i,j,k
do i=1,n
do j=1,m
c(i,j)=0
do k=1,n
c(i,j)=c(i,j)+a(i,k)*b(k,j)
end do
end do
end do
return
end

我们可以称之为

call ilocz(a(1,1),b,a(2,1),1,1)

获取a的第一个元素,b的第一个元素,并写入a的第二个元素。

编辑

您还可以使用以下代码:

do i=1,n
do j=1,m
c(i,j)=DOT_PRODUCT(a(i,1:n),b(1:n,i)
end do
end do

甚至

c = MATMUL(a,b)

参见 Fortran matrix multiplication performance in different optimization用于性能比较的不同方法

关于arrays - Fortran - 我不明白变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27349886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com