「教えて!ピックアップ」リリース!

皆様,お忙しい所回答お願いいたします。
一度他の方が似たような質問があったのですが,それだけでは解決できなかったので再度質問させていただきます。

質問はタイトルの通り,複素数を引数zとするベッセル関数Jn(z)がどうなるのか分かりません。

さまざまな参考書では実数もしくは純虚数をを引数とするベッセル関数の理論やプログラムのサブルーチンはあるのですが,複素数に関しては見つかりません。

大きな数学辞典を見ても,載っている数表は引数が実数のものばかりです。

どうしてこのような関数を必要としているのかというと,電磁界の円柱散乱問題の所で円柱媒質が導電率σを持つ損失性媒質の場合,波数kが複素数となり円柱内部電磁界の解析解に含まれるベッセル関数の引数が複素数となってしまうからです。(Jn(kr)という風に)

複素数を引数zとするベッセル関数Jn(z)の理論について,ご教授の方何卒お願いいたします。
また,参考文献等ありましたらそちらもご教授お願いいたします。

A 回答 (6件)

読んでくれていないようだけど一応書いておきます。

http://portal.acm.org/citation.cfm?id=214331
から複素変数ベッセル関数を計算するFORTRANプログラムをdownloadすることができます。変数の実部と虚部が0, 0.5, 1, 5 の組み合わせについてJ0(z)の実部と虚部をこのプログラムで計算し、回答No3,4の結果と一致することを確認しました。(虚部の方はexp(-y*cos(a))*cos(x*cos(a))をexp(-y*cos(a))*sin(x*cos(a)) に変更する)
Amosのプログラムの方が機能は多いし計算も早いと思います。ただし私のプログラムは10行程度であるのに対し、Amosのプログラムは注釈等も入れると数千行に上っています。

参考URL:http://math.nist.gov/mcsd/Reports/2001/nesf/node …
    • good
    • 1

文献


 D. E. Amons;ACM Transactions on Mathematical Software,12(1986), 265

私はまだこの文献を読んでいないので、これではどの様に計算されているのかはわかりません。
    • good
    • 0

関数の誤りを次の様に修正しました



for(i in 1:99999) → for(i in 1:100000)


これでRe{J0(x+iy)}を計算すると次の様になりました。

   y  0    0.5    1    5
 x
 0.0 1.000000 1.063483 1.266066 27.23987
 0.5 0.938469 0.996094 1.179857 24.49395
 1.0 0.765197 0.806443 0.937608 16.84624
 5.0 -0.177596 -0.191713 -0.235355 -2.67594

表を見るときはウィンドウを大きくして下さい
    • good
    • 0

統計解析ソフトRで0次ベッセル関数の実部を計算する関数を作りました



complexbessel <- function(x,y)
{
h <- 0.00001*3.14159265358
s <- 0
a <- 0
for(i in 1:99999){
s<- s+(exp(-y*cos(a))*cos(x*cos(a)) + exp(-y*cos(a+h))*cos(x*cos(a+h)) )/2
a <- h*i }

s*0.00001
}

これでRe{J0(x+iy)}を計算すると次の様になりました。

 y  0     0.5    1    5
x
 0.0 0.99999 1.063467 1.266039 27.23839
 0.5 0.93846 0.996079 1.179833 24.49265
 1.0 0.76519 0.806434 0.937593 16.84544
 5.0 -0.17759 -0.19171 -0.23536 -2.67636

引数が実数の時、および純虚数のときは数表と一致しているので多分正しいでしょう。
    • good
    • 0

いろいろな方法があると思いますが、ベッセル関数の積分表示



 Jn(z)
=((z/2)^n/√π Γ(n+1/2))
×∫[0~π]exp(iz cosθ)sin^(2n)θdθ

を数値積分するのが簡単なのではないでしょうか。例えば0次ベッセル関数は

Re{J0(x+iy)}
=(1/π)∫[0~π]exp(-ycosθ) cos(xcosθ)dθ

Im{J0(x+iy)}
=(1/π)∫[0~π]exp(-ycosθ) sin(xcosθ)dθ

になります。
    • good
    • 0

ベッセル関数なら、殆どの本に載っていると思われます。

例えば岩波数学公式集IIIの145ページ。
またベッセル関数と超幾何関数0F1、1F1を関係付ける公式が57ページにあります。超幾何関数の項目をみると積分表示もあるはずです。

しかし、ベッセル関数程よく使われるものは大抵プログラムが存在します。mathematicaには当然入っていますし、fortranのライブラリーなどにも入っている可能性が大きいです。またはちょっと数値計算したことのある人なら、複素数への拡張も直ぐにできるでしょうし、もしかしたらもっと高度なプログラムを集めたライブラリーを持っている可能性が高いでしょう。研究室の先生に聞くのが早いでしょう。そんなに難しいことではないので、自分でプログラミングに挑戦してみるのも良いでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング