• 締切済み

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

grothendieckの回答

回答No.1

高速と言えるかどうかは分かりませんが、前の回答にも書いたように、ベッセル関数の積分表示を実部と虚部に分けて数値積分してしまえばよいのではないでしょうか。 Jn(z) =((z/2)^n/√πΓ(n+1/2))×∫[0~π]exp(iz cosθ)sin^(2n)θdθ 例えば1次のベッセル関数実部を数値積分の台形公式で計算するRの関数の1例は complexbessel <- function(x,y) { h <- 0.00001*3.1415926358 s <- 0 a <- 0 for(i in 1:100000){ s<- s+x*(exp(-y*cos(a))*cos(x*cos(a))*(sin(a))^2 + exp(-y*cos(a+h))*cos(x*cos(a+h))*(sin(a+h))^2 )/2 s<- s-y*(exp(-y*cos(a))*sin(x*cos(a))*(sin(a))^2 + exp(-y*cos(a+h))*sin(x*cos(a+h))*(sin(a+h))^2 )/2 a <- h*i } s*0.00001 } これでJ1(1.7+0.5i)の実部は0.6301477となりました。 http://keisan.casio.jp/has10/SpecExec.cgi で計算したものと一致していますから、たぶん正しいでしょう。(上のサイトでどのように計算しているかは知りません)

tateyama3
質問者

お礼

ご解答ありがとうございます。 積分表示は私も試したことがあります。 確かに正確な値が計算できます。 しかし、・・・、積分するのに時間がかかりますね。 ベッセル関数の値が大量に必要なため、 これでは全く使い物にならないのです。

関連するQ&A

  • 第1種変形ベッセル関数

    第1種変形ベッセル関数をFortranで書くとどのようなプログラムになるのでしょうか。 Fortran初心者です。よろしくお願いします。

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

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

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

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

  • 1変数関数と2変数関数について

    2つの1変数関数 z(x)=2x+1, z(y)=3y+5 から z(x,y)=axy+bx+cyの形を持つ2変数関数の導出をしたいのですが、どのように計算すればよいのか教えて頂けないでしょうか。 また、2変数関数を2つの1変数関数へ分解することは可能なのでしょうか? 以上、お手数をお掛け致しますが何卒宜しくお願い致します。 先日類似の質問をさせて頂いていたのですが、一部誤記もありましたので 再度質問をさせて頂きます。

  • ベッセル関数の近似式

    VBAを使っていて、ベッセル関数を使いたいのですが、 worksheetfunctionを使わずに計算したいので、近似式を探しています。 第一種0次ベッセル関数に関してはこのページで見つけることができました。 http://soudan1.biglobe.ne.jp/qa5670519.html 他のベッセル関数や特殊関数の近似式が書かれてある webページがあれば教えていただけないでしょうか?

  • ベッセル関数のゼロ点を求めるプログラム

    ベッセル関数のゼロ点(x軸との交点)を小さい順に10個求めるプログラムを作りたいのですが、プログラム作成に不慣れなもので困っています。 参考程度でもいいのでどなたかお教え願えませんでしょうか? よろしくお願いします。 ちなみにベッセル関数は第1種でして、プログラムはMatlabを使おうと思います。

  • ベッセル関数について

    x^2*y''+x*y'+(4*x^4-1/4)*y=0の一般解をz=x^2の変数変換を行って求めてください。 yをzで1回微分したものをY'とすると、 z^2*Y''+1/2*z*Y'+(z^2-1/16)*y=0 ここまでは計算できるのですが、1/2*z*Y'の項の係数1/2のせいで式がベッセル方程式の形にならず、困っています。よろしくお願いします。

  • 平面波exp(-jx)をベッセル関数を用いてあらわすと・・・

    円筒波動関数について勉強しています。 今、平面波exp(-jx)を円筒座標系で表そうとしているのですが、その変換式が Σa*Jn(ρ)*exp(jnΦ) (Σはn=-∞~n=∞まで)と表されています。 aは定数、Jn(ρ)はn次の第一種ベッセル関数、ρは円筒座標系の原点から外に伸びていく変数、Φは円筒座標系のxy面上の角度 この式について、わからないことがあります。 なぜこの式がx方向に進む平面波を表すのでしょうか?定性的なことが理解できません。 しかも第一種ベッセル関数は進行波でないのに進行波をあらわしている。 このこともさらに混乱を深めています。 どのように理解すればよいのでしょうか? あまりベッセル関数に関する知識がないのでできれば優しくおねがしします。 勉強している本はR.F.Harringtonのtime-harmonic electromagnetic fields です。

  • 整数次の第二種ベッセル関数(ノイマン関数)の微分

    第二種ベッセル関数Nn(x)のxに関する微分を計算することを考えています。整数次のとき、極限が現れますが,ノイマン関数のxに関する微分の計算はどのように行えばよいのでしょうか。 第一種ベッセル関数の値とその微分値,ノイマン関数の値を用いた計算はできています。数値計算で計算することを考えていますので、これらの値を再利用する手法などがあれば、ぜひ教えて頂ければ幸いです。 ご存じの方がいらっしゃいましたら、ご教授よろしくお願い致します。

  • VBAでベッセル関数を使う方法

    VBAを使っていて第二種ベッセル関数を使いたいのですが worksheetfunctionだと計算に時間がかかるため これを使わずに計算する方法を教えてください、 以前、どこかのwebページで近似式を見かけたような気がするのですが どこかに書かれてあるページがあれば教えてください。