問題タブ [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.
math - ルンゲクッタ。分離しにくい初期値問題を解く
次の初期値問題を 4 次のルンゲクッタを使って数値的に解くプログラムを書くことになっています。そのアルゴリズムは問題ではなく、終了したらソリューションを投稿できます。
問題は、Runge-Kutta に入れることができるものにきれいに分離することです。
これはどのタイプの ODE と呼ばれていますか? またはこれを解決する方法は?私は数学よりも、CS のスキルとプログラミングの数値手法に自信を持っています。この問題についての洞察は役に立ちます。
更新: 誰かがソリューションに興味がある場合は、コードを以下に示します。面白い問題だと思いました。
assembly - マイクロコントローラ上の2つの二乗和の平方根の近似
私は楽しみのために8ビットマイクロコントローラー(HCS08)でアセンブリにFFTアルゴリズムを実装することに取り組んでいます。アルゴリズムが完了すると、8ビットの実数/虚数のペアの配列ができます。これらの各値の大きさを調べたいと思います。つまり、xが複素数の 場合、
これで、16ビットレジスタと8ビットレジスタを使用できるようになりました。それらを二乗し、加算し、結果の平方根を取ることを考えましたが、それは問題を引き起こします。2つの8ビット数の二乗の合計の可能な最大値は約130kであり、これは16ビットレジスタが保持できる最大値(65.5k)。
16ビット数の整数平方根を計算するサブルーチンを思いついたので、これはうまく機能しているようですが、16ビットに収まる値で動作する保証はありません。今の私の考えでは、必要なものを直接近似するアルゴリズムがあるのですが、何も見つからないようです。任意のアイデアをいただければ幸いです。
要約すると、2つの8ビットコンポーネントを持つベクトルがあり、ベクトルの長さを見つけたいとします。実際に平方根や平方根を計算せずに、これを近似するにはどうすればよいですか?
ありがとう!
optimization - Haskell の有限の違い、または潜在的な最適化を無効にする方法
次の素朴な (一次) 有限差分関数を実装したいと思います。
ご存知かもしれませんが、微妙な問題があります。 とが正確に表現可能な数だけ異なることを確認する必要が(x + h)
あります。x
それ以外の場合、壊滅的なキャンセルを伴うという事実に影響されて、結果に大きなエラーが発生します(f $ x + h) - (f x)
(慎重に選択する必要がありますh
が、それは私の問題ではありません)。
C または C++ では、この問題は次のように解決できます。
volatile
修飾子は変数に関連する最適化を無効にするためtemp
、「賢い」コンパイラはこれらの 2 行を最適化しないことが保証されています。
これを解決する方法を知るには、まだ十分な Haskell を知りません。私はそれを恐れています
Haskell (または Haskell が使用するバックエンド) によって最適化されます。ここに相当するものを取得するにはどうすればよいですvolatile
か (怠惰を犠牲にすることなく可能であれば)? GHC固有の回答は気にしません。
python - Numpy で設定された多数の標準偏差をすばやく計算する方法
これを行うための最良の(最速の)方法は何ですか?
これは私が正しいと信じているものを生成しますが、明らかに N = 10e6 では非常に遅いです。標準偏差を正しく計算できるように Xi 値を保持する必要があると思いますが、これをより速く実行するためのテクニックはありますか?
c - OpenMPとreduction()
単純に3つの関数があります。1つは制御関数で、次の2つの関数はOpenMPを使用して少し異なる方法で実行されます。しかし、関数thread1はthread2とcontrolとは別のスコアを与え、その理由がわかりません。
ここに簡単な答えがあります:
アップデート:
わかりました。これをより迅速に実行し、期間の値を2回カウントしないようにしました。
しかし、いくつかのテストの結果、スコアは正しい値に近いが、等しくないことがわかりました。スレッドの1つが開始しない場合があります。OpenMpを使用していないときは、値は正しいです。
c - 数値レシピからの LU 分解が機能しない。私は何を間違っていますか?
インプレース LU 行列分解のために、C の Numerical Recipes の提供されたソース コードから文字どおりコピー アンド ペーストしましたが、問題は機能していません。
私は愚かなことをしていると確信していますが、誰かが私を正しい方向に向けることができれば幸いです。私は一日中取り組んできましたが、何が間違っているのかわかりません。
回答後の更新: プロジェクトは終了し、機能しています。皆様のご指導に感謝いたします。
WolframAlphaは、答えは
私は得ています:
これまでのところ、「同じ」アルゴリズムの少なくとも 3 つの異なるバージョンを見つけたので、完全に混乱しています。
PSはい、これを行うには少なくとも12の異なるライブラリがあることは知っていますが、正しい答えよりも自分が間違っていることを理解することに興味があります。
PPS LU 分解では、下の結果の行列は 1 であり、Crouts アルゴリズムを (私が思うに) 実装されているように使用すると、配列インデックスへのアクセスは依然として安全であり、L と U の両方をインプレースで重ね合わせることができます。したがって、これに対する単一の結果行列です。
arrays - 配列の最大数を2番目の配列の最小数に調整するためのロジック
みなさん、こんにちは
配列の最大数を2番目の配列の最小数に調整するためのロジック
配列「A」があります
そして、2番目の配列を「反対」方向に配置して、配列「A」の数値が高くなると、配列「B」の数値が低くなるようにします。
配列「B」がどのように見えるかの例(そして参考のためにAも)
このロジックを使ってみましたが、もちろんすべてがポジティブになります
しかし、それはうまくいきませんでした私はmatlabを使用していますが、誰かが正しいロジックを知っている場合は、matlab構文に変換できます
tia
数字は信号のさまざまな振幅を表しているため、一方の信号アレイAの振幅が増加している場合、もう一方の信号アレイBは減少している必要があります。「オーバーラップ」があります
c - ガウス除去のメモリ管理
行列はプロセッサ 0 で作成され、他のプロセッサに分散されます。行列は対称密行列です。そのため、プロセッサ 0 で初期化されます。
マトリックスは次のように作成されます。
A(i,j) は次のように定義されます。
アルゴリズムをテストするには、N を 100,000 にする必要があります。
ここでの問題は、N=100,000 の場合、必要なメモリが約 76GB になることです。Aマトリックスを保存するために何を提案しますか?
PS: N<20.000 で、クラスタが乱れたメモリ システム (プロセッサあたり 2GB RAM) の場合、アルゴリズムは非常にうまく機能します。
numerical-methods - 離散点で囲まれた領域上の特定の点セット (有限および離散) で既知の値を持つ関数の数値積分?
D を一連の点 {x_i,y_i} (1<=i<=N) で囲まれた領域とします (領域は凸面である必要はなく、点は境界曲線に沿っている必要があります)。
f を D で定義された関数としますが、与えられた点集合 (有限および離散) での値しか知りません。たとえば {x'_i,y'_i,f(x'_i,y'_i)} (1<= i<=N').(指定されたデータセットは、D では「密」である必要はありません。)
D 上の f の数値積分を行うにはどうすればよいですか?
これが私が思うことです:
1) まず、これらの一連の点の間のセグメントによって D の境界を近似する必要があります。
2) 次に、指定されたデータセットに対して何らかの補間を行う必要があります。ただし、2 次元での補間は常に可能であるとは限りません。それから私は立ち往生します。
助けていただけますか?ありがとうございました。