タグ付けされた質問 「special-functions」

4
困難な振動積分の数値積分の方法
以下の積分を数値的に評価する必要があります。 ∫∞0s i n c′(x r )r E(r )−−−−√dr∫0∞sinc′(xr)rE(r)dr\int_0^\infty \mathrm{sinc}'(xr) r \sqrt{E(r)} dr ここで、、と。ここで、は第2種の修正ベッセル関数です。私の特定のケースでは、、およびです。のx∈R+λ、κ、ν>0Kλ=0.00313κ=0.00825ν=0.33E(r )= r4(λ κ2+ r2−−−−−−√)- ν- 5 / 2K- ν- 5 / 2(λ κ2+ r2−−−−−−√)E(r)=r4(λκ2+r2)−ν−5/2K−ν−5/2(λκ2+r2)E(r) = r^4 (\lambda\sqrt{\kappa^2+r^2})^{-\nu-5/2} K_{-\nu-5/2}(\lambda\sqrt{\kappa^2+r^2})X ∈ R+x∈R+x \in \mathbb{R}_+λ 、κ 、ν> 0λ,κ,ν>0\lambda, \kappa, \nu >0KKKλ = 0.00313λ=0.00313\lambda = 0.00313κ = 0.00825κ=0.00825\kappa = 0.00825ν= …

2
超幾何関数の評価のための効率的で正確なアルゴリズムは何ですか?
一般化された超幾何関数(または級数)の評価のために、次のように定義される優れた数値アルゴリズムが存在することを知りたい pFq(a1,…,ap;b1,…,bq;z)=∑k=0∞(a1)k⋯(ap)k(b1)k⋯(bq)kzkk!pFq(a1,…,ap;b1,…,bq;z)=∑k=0∞(a1)k⋯(ap)k(b1)k⋯(bq)kzkk!{}_pF_q(a_1,\ldots,a_p;b_1,\ldots,b_q;z) = \sum_{k=0}^{\infty} \frac{(a_1)_k\cdots(a_p)_k}{(b_1)_k\cdots(b_q)_k}\frac{z^k}{k!} 一般に、このシリーズは必ずしも非常に高速に収束する(またはまったく収束する)わけではないため、用語を1つずつ合計するのは理想的ではないようです。より適切に動作する代替方法はありますか?具体的には、妥当な数の計算で4桁または5桁の精度が得られるものを探しています。 私が通常使用する最も一般的なケースはおよびp = 2 、q = 1ですが、私が取り組んでいる特定のプロジェクトでは、p = 1 、q = 2が必要です。明らかに、任意のための一般的なアルゴリズムのpとqが理想的ですが、私は私が得ることができるものかかります。p=1,q=1p=1,q=1p=1,q=1p=2,q=1p=2,q=1p=2,q=1p=1,q=2p=1,q=2p=1,q=2pppqqq

2
関数への合理的な近似のオープンソース実装
関数への合理的な近似のオープンソース実装(Python、C、C ++、Fortranのいずれでも構いません)を探しています。記事に沿った何か[1]。私はそれに関数を与え、それは私に2つの多項式を返します。その比は与えられた間隔での近似であり、誤差は同じ振幅で振動し、最適な近似、またはそれに近いです。 ここに私が見つけたものがあります: chebfunでできるように見えますが、Matlab *にアクセスできません。 数値レシピ(NR)のセクション5-13「合理的なチェビシェフ近似」に簡単なプログラムがあります。 MathematicaにはEconomizedRationalApproximationとMiniMaxApproximationがあります 私は、NRコードよりも新しい(おそらくテスト済みの)ものがあるかどうか疑問に思いました。 私のアプリケーションは、特別な関数のセットを持っています。これは、超幾何級数として、または数値キャンセルを含む数式として与えられます。そして、堅牢で、高速で、正確な評価関数が必要です。 Hartree Fock計算で2つの粒子行列要素を計算する最も内側のループ。[2]に、自分に合った関数の簡単な例を示します。ご覧のとおり、SymPyを使用して計算したのは、直接式を使用するか、x = 0を中心とするシリーズのいずれかです。これは一種の働きをしますが、精度はそれほど高くありません。x= 1の場合、有効数字の約半分が失われます(ただし、x = 1e5と同様にx = 0.1の場合、ほぼすべての有効数字に対して正確です)。より良い近似値を探しています。 [1] Deun、J。、およびTrefethen、LN(2011)。合理的な近似のためのCarathéodory-Fejér法の堅牢な実装。BIT数値数学、51(4)、1039〜1050。doi:10.1007 / s10543-011-0331-7(2010年6月e-print) [2] https://gist.github.com/3831580 (*)chebfunウェブサイトにも404が表示されますが、Pedroはそれが私のプロバイダーの問題であるに違いないと示唆しました。

1
転換ん
数値的に形式の積分を行おうとしているとき、私は逸話的に聞いたことがあります ∫∞0f(x )J0(x )d x∫0∞f(バツ)J0(バツ)dバツ\int_0^\infty f(x) J_0(x)\,\mathrm{d}x (例えば、それ自体高い振動、正則、等)を滑らかにし、行儀、それはとしてそれを書き換える精度を助けますf(x )f(バツ)f(x) 1π∫π0∫∞0f(x )cos(x sinθ )d xD θ1π∫0π∫0∞f(バツ)cos⁡(バツ罪⁡θ)dバツdθ\frac{1}{\pi}\int_0^\pi \int_0^\infty f(x) \cos(x\sin\theta) \,\mathrm{d}x\,\mathrm{d}\theta そして、最初に内部積分を数値的に実行します。これが機能すると期待すべき理由はわかりませんが、数値メソッドの精度はほとんど明らかではありません。 もちろん、実際にそれを行う最良の方法は、このような振動積分に最適化された方法を使用することです。この変換を行うと積分の精度が向上する傾向があることを誰もが確認または反論できますか?そして/またはそれを説明する情報源に私を向けますか?

4
不完全でガンマ関数の高速かつ正確な倍精度実装
倍精度特殊関数を実装する最新の方法は何ですか?:私は、次の積分必要 ため、M=0、1、2、。。。そして、t>0で、これは下側の不完全ガンマ関数で書くことができます。これが私のFortranとCの実装です。Fm(t)=∫10u2me−tu2du=γ(m+12,t)2 トンm + 12Fメートル(t)=∫01あなた2メートルe−tあなた2dあなた=γ(メートル+12、t)2tメートル+12 F_m(t) = \int_0^1 u^{2m} e^{-tu^2} d u = {\gamma(m+{1\over 2}, t)\over 2 t^{m+{1\over 2}}} M = 0 、1 、2 、。。。メートル=0、1、2、。。。m=0, 1, 2, ...t > 0t>0t>0 https://gist.github.com/3764427 これは級数展開を使用し、指定された精度になるまで項を合計し、再帰関係を使用してより低い値を効率的に取得します。私はそれをうまくテストし、必要なすべてのパラメーター値に対して1e-15の精度を取得しました。詳細については、Fortranバージョンのコメントを参照してください。メートルメートルm それを実装するより良い方法はありますか?以下は、gfortranでのガンマ関数の実装です。 https://github.com/mirrors/gcc/blob/master/libgfortran/intrinsics/c99_functions.c#L1781 私がしている無限級数を合計する代わりに、有理関数近似を使用しています。均一な精度を得る必要があるので、これはより良いアプローチだと思います。これらのものにアプローチするためのいくつかの標準的な方法はありますか、または各特別な関数の特別なアルゴリズムを理解する必要がありますか? アップデート1: コメントに基づいて、SLATECを使用した実装を次に示します。 https://gist.github.com/3767621 おおよそ1e-15の精度で、私自身の関数の値を再現します。ただし、t = 1e-6およびm = 50の場合、項は1e-303に等しくなり、より高い "m"の場合は、誤った答えを出し始めます。Fmに直接級数展開/再帰関係を使用するため、関数にこの問題はありません。正しい値の例を次に示します。tm + 12tメートル+12t^{m+{1\over2}}FメートルFメートルF_m 、F100F100F_{100}(1e-6)=4.97511945200351715E-003 しかし、分母が爆発するため、SLATECを使用してこれを取得することはできません。ご覧のとおり、実際の値は小さく、小さくなっています。FメートルFメートルF_m アップデート2: 上記の問題を回避するために、1機能を使用することができますdgamit(Tricomiの不完全ガンマ関数)を、そしてF(m, …

1
複素平面の曲線上で直交する多項式
さまざまな重要な多項式のセット(Legendre、Chebyshevなど)は、いくつかの重みを付けて実際の区間で直交しています。複素平面の他の曲線と直交する既知の多項式のファミリーはありますか? たとえば、私は、たとえば円上で直交する次数nの多項式の基底を求めています − 1 + 経験(I T )−1+exp⁡(私t)-1 + \exp(it) 以下のための 。0 ≤ T &lt; 2 π0≤t&lt;2π0\le t< 2\pi 私がこれをここに投稿する理由は、複雑な平面の点上の多項式値の行列を含む数値問題があるためです。単項式の基準を使用すると、ほとんどのポイントセットで条件が非常に悪くなります。条件付けを改善するために別の基準を使用したいのですが、たとえばルジャンドルまたはチェビシェフ多項式を使用すると、複雑な平面の一般的な曲線の条件付けが改善されることは明らかではありません。

3
C ++でpolylogarithm関数を使用する方法
polylog関数を使用するために使用できるプリプロセッサディレクティブはありますか?それともcmathに含まれていますか?もしそうなら、あなたはそれを李またはポリログのどちらで呼びますか? 編集:私が本当にやろうとしていることは、関数の不定積分の分析値を与えることです x3ex−1x3ex−1 \frac{x^3}{e^{x} -1} これは多対数関数を含みます。しかし、誰かがこの機能を分析的に統合する別の方法について提案があれば、どんなアイデアでも歓迎します。

1
除算なしの立方根のニュートン反復
Newtonの方法を検索1 / x−−√1/バツ1/\sqrt{x}に適用するために平方根を計算する際に除算を回避することはかなりよく知られたトリックであり、おそらく除法なしで逆数を見つけるためにNewtonの方法を使用します。 StackOverflowスレッドを救出する際、リンクの腐敗から立方根のニュートン反復を効率的にシードすることで、立方根の除算なしの反復も可能であるはずだと考えました。 たとえば、次のように解決するとします。 バツ− 3= a2バツ−3=a2 x^{-3} = a^2 次に、およびです。上記の方程式のニュートン反復は単純です:x = a- 2 / 3バツ=a−2/3x = a^{-2/3}a−−√3= a xa3=aバツ\sqrt[3]{a} = ax バツn + 1= xん− x− 3ん− a2− 3 x−4ん=43バツん−13a2バツ4んxn+1=バツん−バツん−3−a2−3バツん−4=43バツん−13a2バツん4 x_{n+1} = x_n - \frac{ x_n^{-3} - a^2 }{-3x_n^{-4}} = \frac{4}{3}x_n - \frac{1}{3}a^2 x_n^4 ここでも、少なくとも分数定数がFP乗算用に事前評価されている場合は、除算演算を回避します。 だから、ある種のことは可能ですが、私は(確かに浅い)Webの検索でそのような方法についての具体的な議論を見つけられませんでした。要するに、賢い人はすでにより良いアイデアを発見しており、あなたの大切な同僚の1人がそれを見て、または考え抜いていたのではないかと思います。

1
ベッセルウェイトを使用した高価な関数の放射状積分
積分を計算する必要があります 私= ∫R0f(r )Jん(zn mrR) rdrI=∫0Rf(r)Jn(znmrR)rdrI = \int_0^R f(r)J_n\left(\frac{z_{nm}r}{R}\right)rdr ここで、は第1種の次のベッセル関数であり、はそのゼロであり、はやや類似した実数関数です(同じではない、それは非常に複雑であり、通常で用語を伴う時には)。JんJnJ_nんトンの時間nthn^{\mathrm{th}}zn mznmz_{nm}メートルトンの時間mthm^{\mathrm{th}}f(r )f(r)f(r)JんJnJ_nJ2んJn2J_n^2exp(Jん)exp⁡(Jn)\exp(J_n) 非常に高価であり、この積分は非常に多くの時間を評価しなければならない、私はそれを解決するための最良の(非常に速いが、それでもかなり正確に)数値法を探しています。現在、私は11ポイントの台形ルールを使用しています。しかし、私はClenshaw–CurtisやGauss–Kronrod(低次数)などの他の方法を調査しています。f(r )f(r)f(r) しかし、特にハンケル変換の計算に必要なものと同様であることを考えると、そのような積分に特に適した方法があるかどうか疑問に思っています。

1
関連ルジャンドル関数の2次導関数
高速多重極法を使用したラプラス方程式の解の一部として、関連する第1種ルジャンドル関数の 2次導関数を計算したいと思います。具体的には、私はCの実装、または自分で関数を記述するために使用する正しい繰り返し関係を探しています。 私は再発の関係を探してみて、これを見つけましたが、それが正しくないのではないかと思います。 また、これらのようなすぐに使用できる関数を検索しようとしましたが、関連する関数の1次導関数の関数だけに出くわしました。2番目の関数ではありません。 誰かが私を正しい方向に向けることができれば、私は本当に感謝します!どうもありがとう!

2
三角関数の比率の計算
関数を計算する必要があります: および g(x)=sinaxf(x )= 罪− 1バツバツf(x)=sin−1⁡xx f(x) = \frac{\sin^{-1}x}{x} ここで∈[0、1]とのx∈[0、πg(x )= 罪X罪バツg(x)=sin⁡axsin⁡x g(x) = \frac{\sin a x}{\sin x} ∈ [ 0 、1 ]a∈[0,1]a\in[0,1]及び(しばしば非常に小さいX«1)。これらのような「特別な」機能のための非常に正確なアルゴリズムを生成する一般的な方法はありますか?x∈[0,π2]x∈[0,π2] x\in[0,\frac{\pi}{2}]x≪1x≪1x\ll 1

3
角度の整数倍の正弦と余弦の評価
円筒調和関数を評価する場合、三角関数とを評価する必要があります。これは、大きな整数とます。Cコードでこれを行う最良の方法は何ですか?現在、私はの角度評価しているだけですが、標準ライブラリは大きな引数で精度を失うと思われます。引数の大きさを再帰的に減らすために、ダブルアングルの数式などを使用することを検討していましたが、結果的にエラーが増えるかどうか疑問に思っています。罪(M θ )M θ ∈ [ - π 、π ] M θcos(M θ )cos⁡(mθ)\cos(m\theta)罪(M θ )sin⁡(mθ)\sin(m\theta)メートルmmθ ∈ [ - π、π]θ∈[−π,π]\theta\in[-\pi,\pi]M θmθm\theta
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.