• ベストアンサー

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

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

  • KUZUY
  • お礼率19% (60/308)

質問者が選んだベストアンサー

  • ベストアンサー
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

ベッセル関数も第二種ベッセル関数も数式はまったく理解できないのですが ネット検索で見たこのベッセル関数式の場合、セルに書き出すのですが 100行目まで、I列までだと 当方の7年ほど前の古いノートPC(CeleronM 1.86Ghz)でも グラフ描画を含めて0.2秒かからずに終わります。 http://homepage3.nifty.com/rikei-index01/excel/excelbessel.html 科学技術計算などで膨大な量だとだめかもしれませんが 計算結果だけなら0.1秒でセルに書き出されます。  マクロの記録だけくらいなのでもっときちんと書いたほうがいいのですが。  dim i as single Application.ScreenUpdating = False Range("C6:I100").ClearContents ' Range("c6").Activate ActiveCell.FormulaR1C1 = "=BESSELJ(RC2,R5C)" Range("C6").Select Selection.AutoFill Destination:=Range("C6:C100") Range("C6").Select Selection.AutoFill Destination:=Range("C6:I6"), Type:=xlFillDefault Range("C6:I6").Select Selection.AutoFill Destination:=Range("C6:I100") Range("B5").Select Application.ScreenUpdating = True For i = 0.1 To 1 Step 0.1 Range("b7").Value = i Range("B6:B7").AutoFill Destination:=Range("B6:B100") Next 10回書き換えで2.1秒ほどかかりました。 関数も得られたデータもどうつかうのかわかりませんが お役に立てれば。

関連するQ&A

  • ベッセル関数の近似式

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

  • ベッセル関数

    周波数変調波の式を第一種ベッセル関数を用いて表わすにはどうすればいいのか分かりません。何かいいサイトなどあればよろしくお願いします。

  • ベッセル関数って、

    大学生です。 最近、勉強していると、振動の分野で「ベッセル関数」なるものが現れました。 振動の分野は全く専門外で、突然ベッセル関数を使われて、こまってます。 また、やさしく説明してくれる本も、探してますが、あまり時間がありません。  この「ベッセル関数」は、    いったいどんな関数で、    この関数をなぜ使うのか?    この関数を使うと、何が出てくるのか、    この関数は何を意味しているのか、  教えてください。 (ちなみに、円筒形の固有振動数を求める式でベッセル関数が出てきました。)

  • ベッセル関数の計算

    ベッセル関数の計算 νについてnへの極限をとった際に、添付の式のように求まるというらしいのですが、 どういう計算で下の式になっているのか分かりません。 漸化式などを使っているのでしょうか? よろしくお願いいたします。

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

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

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

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

  • 空洞共振器とベッセル関数の根

    空洞共振器の共振周波数を求める問題で躓いています。 直方体の共振器はようやく理解出来たつもりですが、 円筒形の共振器の計算で出てくるベッセル関数の根というのが全く解りません。 例えばTE011モードの場合、式の途中にベッセル関数の根y'01というのが出てきますが、 テキストを読み進みますとこの値は「2.4」となってます。 エクセルの関数にある「BESSELJ」で計算すると「BESSELJ(0.1)」は「0.76…」となるなど 全く異なります。 これとは別の関数なのでしょうか? どうやって求めたらよいか解らず、他のモードでの計算が出来ず困っています。 よろしくお願いします。

  • ベッセル関数

    特殊関数の基礎的な公式については一通り導出を理解したつもりなのですが、次の式が導けないでいます。 cos(m_fsinω_st)=J_0(m_f)+2Σ_{n=1}^{∞}J_{2n}cos2nω_st sin(m_fsinω_st)=2Σ_{n=1}^{∞}J_{2n+1}(m_f)sin(2n+1)ω_st J_n(m_f)などは第一種ベッセル関数です。

  • ベッセル関数の微分計算

    ベッセル関数の微分計算 添付画像の式変形で2項目の変形について、この式変形は正しいのでしょうか? 自分で計算したところ、上の式の2mのうち、2が余分に残るような気がします。総和の範囲をm=0からm=1のする時に 余分な2を消しているのでしょうか? 出典もとは以下のファイルのp9となります。 www.sci.hyogo-u.ac.jp/maths/master/h11/kunimasa.pdf よろしくお願いいたします。

  • ベッセル関数の微分公式について。

    ベッセル関数の微分を行いたいのですが、どの式を使って良いかわかりません。 微分する場合は真ん中の漸化式を使うべきなのでしょうか? それとも、一番下の式(単純に一番上の式から導いた関係)でしょうか? 一番下で計算するとどうも上手くいきません。 さらに、真ん中の式を使うこともできればしたくありません。 ν=0の場合は非常に簡単な公式があるのですが、それ以外の場合の公式がんくて困っています。 それとも、そもそも微分は一番上の積分公式みたいな簡単に公式化できないでしょうか? どなたか教えて下さい。

専門家に質問してみよう