Re: [問題] 連續變數名稱跟加法的設定

看板Fortran作者 (寶貝)時間11年前 (2013/05/15 12:42), 編輯推噓2(2012)
留言14則, 2人參與, 最新討論串3/5 (看更多)
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)

05/15 13:10, , 1F
糟糕..發現我沒學過SUM 跟 //的用法囧
05/15 13:10, 1F

05/15 13:10, , 2F
應該是沒有化為一維,原本的目的是將環境資料的解析度降
05/15 13:10, 2F

05/15 13:11, , 3F
低,由1*1降至3*3或9*9,所以需要9格並為一格,故數會減少
05/15 13:11, 3F

05/15 13:13, , 4F
那你的formula應該是sum(s1(i+(-1:1),j+(-1:1)))
05/15 13:13, 4F

05/15 13:14, , 5F
還是我會錯意了
05/15 13:14, 5F

05/15 13:17, , 6F
突然發現,最裡面的array/matrix直接指定範圍就好了
05/15 13:17, 6F

05/15 13:18, , 7F
所以可以拆掉一層loop
05/15 13:18, 7F

05/15 13:38, , 8F
我原本的寫法是同列先三行一併,在同行三列一併來寫的.
05/15 13:38, 8F

05/15 13:58, , 9F
那可以試試直接給3x3的範圍再sum
05/15 13:58, 9F

05/15 17:01, , 10F
可以請教一下 / /的用法嗎囧?
05/15 17:01, 10F

05/15 17:51, , 11F
google: implied do fortran
05/15 17:51, 11F

05/15 17:53, , 12F
沒甚麼特別的,就是把一串值包成array,data也有用到
05/15 17:53, 12F

05/15 17:55, , 13F
還有,77不確定,但是90以後支援向量運算,所以完全不用do
05/15 17:55, 13F

05/15 17:57, , 14F
也可以加完s1
05/15 17:57, 14F
※ 編輯: onezillion 來自: 140.109.82.216 (05/15 18:33)
文章代碼(AID): #1Han9JI4 (Fortran)
文章代碼(AID): #1Han9JI4 (Fortran)