[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