[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000137] Re: reading binary files



堀之内です。

>>   d^{2}f/dx^{2} +  d^{2}f/dy^{2} 
>> 
>> ~ ( f(ix+1,iy) + f(ix-1,iy) + f(ix,iy+1) + f(ix,iy-1) 
>>      - 4 * f(ix,iy) ) / dx^{2}
>> 
>> という計算が出て来ます。
>> 2次元データ f(ix,iy) といっても、メモリ上では1次元的に並んでいる
>> わけで(Fortran なら (ix,iy) は ix + nx*(iy-1) 番目)、f をメモリ上の
>> 順番でずらずら縦に並べると、上の演算は、1/dx^{2} と -4/dx^{2} が
>> ぱらぱらと散在し残りのほとんどの要素がゼロである様な
>> 正方行列を左から掛ける線形演算になります。

これって、ある (ix,iy) という一点を考えてるような気がしますがそ
うですか。この点でのラプラシアンをとるなら、おっしゃるような行列
を掛けて足算すればいいんですが、勘違いしてるでしょうか。各点での
値なら

 ( f[2:-1,1:-2] + f[0:-3,1:-2] + f[1:-2,2:-1] + f[1:-2,0:-3]
  - 4*f[1:-2,1:-2] ) / dx^2

でいいですし、メモリー上の並びは気にしないでいいはずなんですが。
(といっても f[2:-1,1:-2] みたいなオペレーションは f を再配分した
配列を作り直すので、効率重視なら嫌われるかもしれませが...)

# なんかひどく誤解してるかな?

ちなみに、f[2:-1,1:-2] などは、サブセットをとることで

 >> 「指定した座標軸方向にデータをシフトする演算」

になってます。

堀之内 武                 horinout@xxxxxx
京都大学超高層電波研究センター    611-0011 宇治市五ヶ庄
phone:0774-38-3812                     fax:0774-31-8463