問題タブ [numerical-methods]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - MATLABコードヘルプ。後方オイラー法
これは、後方オイラー法を使用してODEを数値的に解くために取得したMATLAB / FreeMatコードです。しかし、結果は私の教科書の結果と一致せず、時にはばかげて一貫性がないことさえあります。コードの何が問題になっていますか?
floating-point - 非常に小さくなり、ゼロになる可能性のある浮動小数点数をどのように処理する必要がありますか
したがって、次のコードで興味深いバグを修正しましたが、私が最善を尽くしたアプローチがわかりません。
結果は正確である必要はないので、ゼロ以外の最小値を保持し、pが0になった場合にそれを使用することで、これを解決しました。
これは機能しますが、私には少し厄介なようです。私はこの種の数値プログラミングをあまり行っていません。これが人々が使用する種類の修正なのか、それとももっと良いものがあるのかはわかりません。
python - Python+Scipy+統合: スパイクのある関数の精度エラーの処理
scipy.integrate.quad を使用して、非常に広い範囲 (0..10,000) で関数を統合しようとしています。関数はその範囲のほとんどでゼロですが、非常に狭い範囲 (1,602..1,618 など) でスパイクがあります。
統合すると、出力が正であると予想されますが、どういうわけかクワッドの推測アルゴリズムが混乱してゼロを出力していると思います。私が知りたいのは、これを克服する方法はありますか (たとえば、別のアルゴリズムや他のパラメーターを使用するなど)? 通常、どこでスパイクが発生するかはわかりません。そのため、積分範囲を分割して部分を合計することはできません (誰かがそれを行う方法について良いアイデアを持っていない限り)。
ありがとう!
出力例:
algorithm - アルゴリズムの正確な複雑さを計算する方法は?
漸近表記に頼ることなく、アルゴリズムの時間計算量を取得する唯一の方法を数える退屈なステップですか?そして、コードの各行のステップ数がなければ、任意のプログラムのビッグO表現に到達できますか?
詳細:特定の問題を解決するのに最適なアルゴリズムを決定するために、いくつかの数値解析アルゴリズムの複雑さを見つけようとしています。たとえば、eqnsを解くためのRegula-Falsi法またはNewton-Rhapson法の中から、各方法の正確な複雑さを評価してから、どちらの方法がそれほど複雑でないかを決定します('n'の値または任意の引数を入れます)。
computational-geometry - 同じ平面に埋め込まれた既知のベクトルに対する垂直ベクトルを 3D (R^3) で計算します。
これは非常に簡単な質問のように思えますが、今日、自分で合理的な答えを見つけられないようです。平面 PI に属する R^3 (3D) に A と B の 2 つの点があります。ベクトル v = A - B に垂直な PI のベクトル r を見つけたいと思います。平面 PI の法線であるベクトル n を知っています。数学的には、vr = 0 と vxr = n を解くことができますが、r に関するこのシステムの解には、いくつかの除算が含まれており、数値的な不安定性をもたらす可能性があると思われます。この問題に対する数値的/計算的に優れた解決策を教えてもらえますか?
前もって感謝します、
フェデリコ
language-agnostic - 多変量二分法
2x2の非線形問題を解くための2D二分法を実行するアルゴリズムが必要です。例:2つの方程式f(x,y)=0
をg(x,y)=0
同時に解きたい。私は1D二分法(および他の数値的方法)に非常に精通しています。解が境界x1 < x < x2
との間にあることを私がすでに知っていると仮定しy1 < y < y2
ます。
グリッドでは、開始境界は次のとおりです。
そして私は値f(A), f(B), f(C) and f(D)
と同様に知っていますg(A), g(B), g(C) and g(D)
。二等分線を開始するには、ポイントを中央だけでなくエッジに沿って分割する必要があると思います。
f(G)*f(M)<0 AND g(G)*g(M)<0
今、圧倒されるかどうかをチェックするなどの組み合わせの可能性を検討しています。これを少し複雑にしすぎているかもしれませんが、ニュートンラプソン法を勾配演算子を使用して簡単に多次元化できるように、二等分線の多次元バージョンが必要だと思います。
手がかり、コメント、またはリンクを歓迎します。
c - Cコードでグラフを自動的にプロットする
データのリストを「.dat」ファイルに書き込むプログラムを作成しました。これは、gnuplotを使用して個別にプロットすることを目的としています。コードに自動的にプロットさせる方法はありますか?私の出力は次の形式です。
理想的には、コードを実行すると、グラフはxラベル、yラベル、およびタイトル(Cコードから変更される可能性があります)で印刷されます。どうもありがとう。
algorithm - 全期間/全サイクルの乱数または順列の生成LCGと同様ですが、奇数/偶数はありません
範囲内の全期間または全サイクルを「占める」疑似乱数/順列を生成したいと思います。通常、「線形合同法」(LCG)を使用して、次のような式を使用してこのようなシーケンスを生成できます。
Xsがシード、Xが結果、aとcが互いに素の定数、Rが最大(範囲)です。
(全期間/全サイクルとは、任意のXがランダム/順列シーケンスで1回だけ発生し、0からR-1または1からRの範囲内になるように定数を選択できることを意味します)。
LCGは私のニーズのほとんどすべてを満たしています。私がLCGで抱えている問題は、奇数/偶数の結果がランダムでないことです。つまり、シードXnの場合、結果Xは奇数/偶数を交互に繰り返します。
質問:
奇数/偶数を交互にしない類似のものを作成する方法を知っている人はいますか?
「複合LCG」を構築できると思いますが、詳細はわかりません。誰かがこのCLCGの例を挙げてもらえますか?
上記の詳細と以下の制約を満たす可能性のある代替式はありますか?
制約:
- 単純なシードベースの式に基づいたものが欲しいです。つまり、次の番号を取得するために、シードを提供し、並べ替えられたシーケンスで次の「乱数」を取得します。具体的には、事前に計算された配列を使用できません。(次のポイントを参照)
- シーケンスは絶対に「フル期間/フルサイクル」である必要があります
- 範囲Rは、数百万、さらには32ビット/4億になる可能性があります。
計算はオーバーフローを起こさず、効率的/高速である必要があります。つまり、大きな指数や数十の乗算/除算がないことです。
シーケンスは、ひどくランダムまたは安全である必要はありません-暗号化されたランダム性は必要ありません(ただし、実行可能な場合は使用できます)。奇数/偶数シーケンスなしで、「良好な」ランダム性または見かけのランダム性だけです。
どんな考えでもありがたいです-事前に感謝します。
更新:理想的には、範囲変数は正確な2の累乗ではない可能性がありますが、どちらの場合でも機能するはずです。
math - 非標準の分析で計算を行うための超現実的なデータ型の実装はありますか?
非標準の数学的分析は、実数直線を拡張して「超実数」 (無限小と無限数) を含めます。ハイパーリアルを使用して計算を実装するためのデータ型の (仕様の) 実装はありますか? Python や Fortran などで見られる複素数データ型に類似したものを探しています。そのような計算が有用かどうかは実際にはわかりません。ただ興味があるだけです。私はこの概念を少しいじりましたが、おそらく間違いを犯したので、すべての詳細は省略します。ハイパーリアルに関するウィキペディアのページを参照してください。
c - 単純なCコードをCUDAコードに変換する
単純な数値解析コード(台形公式の数値積分)を、CUDA対応のGPUで実行できるものに変換しようとしています。そこにはたくさんの文献がありますが、それはすべて、ここで必要とされるものよりもはるかに複雑に思えます!私の現在のコードは次のとおりです。
これは、Nが非常に大きくなるまでうまく機能します。私はより高速なopenMPを使用して実装を行いましたが、CUDAについても少し知っておくと便利だと思います。どこから始めればいいのか、このコードを簡単に変換する方法があるのか、誰か提案がありますか?どうもありがとう、ジャック。