首页 > 解决方案 > 对方阵求和

问题描述

嗨,我正在尝试对二维方阵求和。假设数组F(i,j)对所有点都定义得很好i,j。我可以对整个数组求和sum(F),但我想从一个小方块开始对数组求和,然后到全尺寸数组,这需要一个DO循环。如果我要繁琐地写出逻辑,我想对数组求和F(i,j),如下所示:

DO i = -1,1
DO j = -1,1

     value1 = sum(F)

END DO
END DO

DO i = -2,2
DO j = -2,2

     value2 = sum(F)

END DO
END DO

DO i = -3,3
DO j = -3,3

     value3 = sum(F)

END DO
END DO

并继续进行i=-30,30, j=-30,30。我试图在一个DO循环中实现这一点

DO i = -30,30
DO j = -30,30

     value4 = sum(F(i:i+1,j:j+1))

END DO
END DO

但这给了我不正确的结果。我该如何解决这个问题,以便我可以在一个循环中实现这个?谢谢。

标签: sumfortran

解决方案


如果我正在破译你想要做什么,你有一个二维数组,在两个维度上都有从 -30 到 30 的自定义范围?然后你想从这个中心的 3x3 矩阵开始,得到一个总和。然后将其放大到 5x5 并得到一个总和。继续下去,直到你得到整个矩阵的总和。

那时你将有 30 个总和。是的,您可以在单个 do 循环中执行此操作。将答案放入一维数组 Sums(30) 如下所示:

do i = 1, 30
   Sums(i) = Sum(F(-i:i,-i:i))
end do

F 中的索引符号雕刻出不断增长的方阵以馈入 Sum 函数。


推荐阅读