作者onezillion (寶貝)
看板Fortran
標題Re: [問題] 連續變數名稱跟加法的設定
時間Wed May 15 12:42:56 2013
program test
integer,parameter :: i=11,j=13,ij_avg=9
real*8 :: s1(i,j),s11(i-ij_avg+1,j-ij_avg+1)
do mm=1,i
do nn=1,j
s1(mm,nn)=(mm+nn/2.d0)*sqrt(mm*1.d0)
enddo
enddo
s11=0.d0
k1=ij_avg-1
print*,s1
print*,'-------------'
s11=reshape((/ ((/ (sum(s1(ii:(ii+k1),jj:(jj+k1))),jj=1,j-k1) /),ii=1,i-k1)
/),(/i-ij_avg+1,j-ij_avg+1/))
print*,s11
end
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.82.216
※ 編輯: onezillion 來自: 140.109.82.216 (05/15 12:43)
1F:推 zmack0905:糟糕..發現我沒學過SUM 跟 //的用法囧 05/15 13:10
2F:→ zmack0905:應該是沒有化為一維,原本的目的是將環境資料的解析度降 05/15 13:10
3F:→ zmack0905:低,由1*1降至3*3或9*9,所以需要9格並為一格,故數會減少 05/15 13:11
4F:→ onezillion:那你的formula應該是sum(s1(i+(-1:1),j+(-1:1))) 05/15 13:13
5F:→ onezillion:還是我會錯意了 05/15 13:14
6F:→ onezillion:突然發現,最裡面的array/matrix直接指定範圍就好了 05/15 13:17
7F:→ onezillion:所以可以拆掉一層loop 05/15 13:18
8F:→ zmack0905:我原本的寫法是同列先三行一併,在同行三列一併來寫的. 05/15 13:38
9F:→ onezillion:那可以試試直接給3x3的範圍再sum 05/15 13:58
10F:推 zmack0905:可以請教一下 / /的用法嗎囧? 05/15 17:01
11F:→ onezillion:google: implied do fortran 05/15 17:51
12F:→ onezillion:沒甚麼特別的,就是把一串值包成array,data也有用到 05/15 17:53
13F:→ onezillion:還有,77不確定,但是90以後支援向量運算,所以完全不用do 05/15 17:55
14F:→ onezillion:也可以加完s1 05/15 17:57
※ 編輯: onezillion 來自: 140.109.82.216 (05/15 18:33)