• 締切済み

複素数を引数とする(?)ベッセル関数

皆様,お忙しい所回答お願いいたします。 一度他の方が似たような質問があったのですが,それだけでは解決できなかったので再度質問させていただきます。 質問はタイトルの通り,複素数を引数zとするベッセル関数Jn(z)がどうなるのか分かりません。 さまざまな参考書では実数もしくは純虚数をを引数とするベッセル関数の理論やプログラムのサブルーチンはあるのですが,複素数に関しては見つかりません。 大きな数学辞典を見ても,載っている数表は引数が実数のものばかりです。 どうしてこのような関数を必要としているのかというと,電磁界の円柱散乱問題の所で円柱媒質が導電率σを持つ損失性媒質の場合,波数kが複素数となり円柱内部電磁界の解析解に含まれるベッセル関数の引数が複素数となってしまうからです。(Jn(kr)という風に) 複素数を引数zとするベッセル関数Jn(z)の理論について,ご教授の方何卒お願いいたします。 また,参考文献等ありましたらそちらもご教授お願いいたします。

みんなの回答

回答No.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/node18.html
回答No.5

文献  D. E. Amons;ACM Transactions on Mathematical Software,12(1986), 265 私はまだこの文献を読んでいないので、これではどの様に計算されているのかはわかりません。

回答No.4

関数の誤りを次の様に修正しました 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 表を見るときはウィンドウを大きくして下さい

回答No.3

統計解析ソフト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 引数が実数の時、および純虚数のときは数表と一致しているので多分正しいでしょう。

回答No.2

いろいろな方法があると思いますが、ベッセル関数の積分表示  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θ になります。

回答No.1

ベッセル関数なら、殆どの本に載っていると思われます。例えば岩波数学公式集IIIの145ページ。 またベッセル関数と超幾何関数0F1、1F1を関係付ける公式が57ページにあります。超幾何関数の項目をみると積分表示もあるはずです。 しかし、ベッセル関数程よく使われるものは大抵プログラムが存在します。mathematicaには当然入っていますし、fortranのライブラリーなどにも入っている可能性が大きいです。またはちょっと数値計算したことのある人なら、複素数への拡張も直ぐにできるでしょうし、もしかしたらもっと高度なプログラムを集めたライブラリーを持っている可能性が高いでしょう。研究室の先生に聞くのが早いでしょう。そんなに難しいことではないので、自分でプログラミングに挑戦してみるのも良いでしょう。

関連するQ&A

  • ベッセル関数

    円筒座標系での電磁場のマクスウェル方程式を磁場に関して解いて得られる解が複素数を引数とする0次のベッセル関数 AJ0(kr)、kが複素数、Aは実係数、rは実変数 で得られるのですが 引数を実数に変換する方法がわかりません。 純虚数の引数であれば実数の引数の変形ベッセル関数に変換でき、 実数の引数であれば手持ちの本にベッセル関数の値が載っているのですが 複素数の引数の場合の処理方法がわからなくて困っています。 よろしくお願いします。

  • ベッセル関数が難しく

    電磁気の勉強でベッセル関数が出てきました。はじめて見た関数だったため、この関数についていろいろと調べたのですが、どのような時に用いる関数なのか、この関数を用いるとどう便利なのか、そういったことが理解・イメージができません。 どうか、このベッセル関数に関しての、わかりやすい説明、あるいは参考URL等、ご教授いただけないでしょうか?

  • 複素数が引数の円柱関数

    引数が複素数の円柱関数の解、及び計算手法がわかりません。|実数部|=|虚数部|のケルビン関数ではなく、 |実数部|≠|虚数部|の場合の解について教えてほしいです。宜しくお願いします。

  • ベッセル関数を用いた解析について

    円柱状の筒に分布した電界強度を、ベッセル関数で解析しようとしています。円筒の底をXY平面としたXYZ直交座標を設定し、あるZでのXY平面を解析面としています。 しかしそもそも、具体的にベッセル関数で解析するとはどういう事なのでしょうか?? また電界強度分布が径方向により異なる場合、ベッセル関数で解析することが出来るのか、出来るのであればどう解析を進めればよいのでしょうか??? どのような事柄でも構いません。皆さんのご意見をお聞かせ下さい。

  • ベッセル関数の微分

    ある膜の振動を数値計算で解こうとしているのですが分からないところがあるので質問します。 計算の途中ベッセル関数J_ν、Y_νをνで微分しなければならないのですが、微分した後導関数がどんな形になるか分からないです。νは実数です。 どなたか分かる方がいらっしゃれば宜しくお願いします。

  • 変形ベッセル関数の微分について。

    変形ベッセル関数の微分について。 添付画像の一行目の式が微分公式です。 そこで質問ですが、二行目の式の左辺のようにベッセル関数の引数に係数が かかった場合は、二行目の式の右辺のようになりますか?

  • 複素数変数のベッセル関数

    わたしは複素変数に対する(第1種)ベッセル関数を計算せねばなりません。 そこでnetlibのhttp://www.netlib.org/amos/から、 D.E. Amos作のFORTRANプログラム一式を、 cbesj.f plus dependencies をクッリクしてダウンロードしました (cbesj.fがBessel関数を計算するプログラム、その他はその付属品)。 そして、cbesj.fの冒頭に書いてある使用方法に従い、 わたしは次のようなメインプログラムを書きました。 ---------------------------------------------------------- PROGRAM MAIN IMPLICIT NONE COMPLEX CY(1), Z REAL FNU INTEGER IERR, KODE, N, NZ Z = (1.2, 0.5) FNU = 1.0 KODE = 1 N = 1 CALL CBESJ(Z, FNU, KODE, N, CY, NZ, IERR) WRITE(*,*) IERR WRITE(*,*) CY(1) end ---------------------------------------------------------- (このメインプログラムは、次数1、変数(実部1.2,虚部0.5)の(第1種)ベッセル関数の値を計算するためのものです。) makefileを作成しコンパイルを実行すると、コンパイルは成功しa.outができました。 (※makefileを作らずとも、次のようにしてもよい。 g77 main.f cbesj.f cbinu.f i1mach.f r1mach.f casyi.f cbuni.f cmlri.f cseri.f cuoik.f cwrsk.f xerror.f cuni1.f cuni2.f gamln.f cuchk.f cunhj.f cunik.f cbknu.f crati.f cairy.f ckscl.f cshch.f cacai.f cs1s2.f) しかし、a.outを実行するとエラーコードIERR=4が返ってきます。 このエラーコードの意味は、cbesj.fの冒頭の説明によると IERR=4, CABS(Z) OR FNU+N-1 TOO LARGE - NO COMPUTATION BECAUSE OF COMPLETE LOSSES OF SIGNIFICANCE BY ARGUMENT REDUCTION だそうです。でも、何が悪いのか全くわかりません。いろいろメインプログラムを変えてみても、 やはりエラーコードIERR=4が返ってくるだけで、全く受け付けてくれません。 以上に関して、私のやり方のどこがどう悪いのかご教授ください。 また、別のライブラリを用いる方法でもよいので、C言語やFORTRANで(第1種)ベッセル関数 を高速計算する方法をご存知の方は、その方法を詳しくご教授ください。 なお、http://oshiete1.goo.ne.jp/qa2300727.html において回答者:grothendieckさんが、 やはりAmosのプログラムを用いて複素変数ベッセル関数を計算されているようです。 しかし、そこには詳細なやり方は説明されていないので、計算素人の私には使い方がわかりません。 もしもgrothendieckさんがこの質問をご覧になられた場合、 私のやり方のどこがどう悪いのかご教授くださると有り難いです。 長い質問ですが、是非お願い致します。

  • 複素数

    複素数について質問させて頂きます。 参考書には、 「複素数zが実数でない場合つまり、虚部が0でないときzは虚数である」という。 というように記載されていました。 私は複素数は常に虚数だと認識していましたがそうでない場合もあるのでしょうか? 複素数zが実数でない場合と記載されていたので複素数が実数の場合もあるのでは ないかと考えた次第です。 つまり、 z=x+iy (z:複素数、x,y:実数、i:虚数単位) において、y=0の場合でもzを複素数と呼ぶのですか? 上記の場合、zは虚数ではないですが複素数とは言えるのでしょうか? 複素数の定義は、 実数x,yと虚数単位iを用いてz=x+iyの形で表すことのできる数です。 (定義にy≠0は特に記載されていませんでした。) なので、z=x+iyにおいてy=0の場合は複素数とは言わないと考えています。 質問内容を整理しますと、 (1)複素数は常に虚数である (2)z=x+iyにおいて、y=0のときzは複素数ではない   複素数の定義にy≠0は必要なのでしょうか? 以上、ご回答よろしくお願い致します。

  • Fortranでベッセル関数のべき級数展開が正しく計算できない!!!

    Fortranでベッセル関数のべき級数展開が正しく計算できない!!! タイトルの通りです。ベッセル関数のべき級数展開は画像に添付した通りです。 この計算をFortranで行っているのですが、式中のzが30以上になると、正しく 計算できません。zが30以下のときは、ベッセル関数の値と完全に一致しています。 どうも、(z/2)^2nの項が大きくなりすぎることが原因です。 これの解決法をどなたかご存知ですか? もしご存知でしたらご教授願います。 ちなみに∞はn=100までで計算をしています。 ほんと死にそうです。。。助けて下さい。

  • 3次方程式の根の複素数平面上の三角形

    次の問題はどう攻めたらよいのでしょうか。 「3次関数 f(z)=0 を満たす3つの解が複素数平面上で三角形を成すとき、 f'(z)=0 の2つの解を焦点とし、上の三角形の一辺の中点を通る楕円は他の辺の中点も通り、かつ三角形に内接することを示せ。」 3次方程式の解が3実数でないときは1個の実数と2個の共役な複素数なので、複素数平面上で三角形を成すときは実数軸を対称軸する2等辺三角形ということは分かります。また、3次関数のグラフは変曲点が2個所あるから f'(z)=0 の2つの解は実数で、複素数平面の実数軸上にあると思います。しかし、実軸上にある三角形の頂点および底辺の中点と、f'(z)=0 の解との複素数平面上での位置関係が分からないので、その先が進みません。どういうふうに考えを進めたらよいのでしょうか。よろしくお願いします。