問題タブ [numerical-computing]

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.

0 投票する
1 に答える
176 参照

haskell - FFI と遅延全体で変更可能なデータ

はじめに

inline-cC 数値ライブラリを;でラップしています。一部の関数はステップ ルーチンにコールバックを渡すことができます。ODE の最適化または時間積分を考えてみてください。

特にネイティブ C の使用では、コールバックは連続した配列を操作し、ポインターを介してそれらを変更し、不透明な (分散された) データ構造にそれらを返すことができます。

したがって、これは変更可能なデータの問題であり、Haskell 側で表現したいと思います。私の理解では、コールバックで配列をフリーズし、たとえば aData.Vector.Storable.Vectorまたは withとして作業しrepa、結果を解凍し、外部ポインタを取得する必要があります。そしてそれを返します。

internals: newtype Vec = Vec (Ptr Vec) deriving Storable、およびinline-cContext 内の関連するエントリは、不透明な C データ構造へのポインタの型を表し、vecGetArray/vecRestoreArray隣接メモリへの同じポインタを生成/要求し、 を要求/生成しVecます。

Q:

Vector返されたものは正しいのですがVec、この関数から戻った後に変更された結果 (「副作用」) を使用すると、変更されていないことに気付きました。GHC はそれを再計算しません (怠惰?)。再計算するにはどうすればよいですか?FFI全体で変更可能なデータを操作するために、Haskellにはどのような慣用的な方法がありますか?


* 修理済み *

答えを見る


ありがとう!

Vec.hs :

InlineC.hs

さらに、IIUC、コードはベクターの 2 つの追加のコピーを作成します。1 つは凍結時、もう 1 つは解凍時です。、しかし、それは非効率的だと思います。誰かが改善や簡素化を提案できますか?

0 投票する
0 に答える
142 参照

c - MATLAB の LAPACK 呼び出しの実装は、直接呼び出しよりも効率的ですか?

私は MATLAB にあるものの多くの C バージョンを作成しようとしています。また、matlab の eig と dsyev 呼び出しを使用して固有値分解の時間を測定しました。MATLAB の方が高速です。例えば:

10 x 10: eig で 0.003246 秒、C の dsyev で 0.013897 秒

100 x 100: eig で 0.001516 秒、C の dsyev で 0.001764 秒

1000 x 1000: eig で 0.304438 秒、C の dsyev で 0.356483 秒

私は、MATLAB がこの低レベルのものに LAPACK 呼び出しを使用しているだけだという印象を受けました。写真にはもっとありますか?

ありがとう!

0 投票する
1 に答える
204 参照

math - 一次複素数 ODE を解く

一階複素微分方程式の解法について質問があります。Runge-Kutta を使用しましたが、答えが正しくないようです。

これは私の方程式です:

ODE の結果は問題ありませんが、複雑な方程式の場合は正しくないようです。

コードを gfortran でコンパイルし、gnuplot を使用して常微分方程式を使用せずに図をプロットしましたi。方程式の解について、図は正しかった。しかし、方程式を追加iすると、図は単なる直線になりました。また、gnuplot は実部を描画するだけです。

コードは、コンパイル時エラーなしでコンパイルされました。

これは私のコードです:

そして出力:

0 投票する
2 に答える
952 参照

python - python数値エラー:大きな数に小さな数を追加

これは、Udacity の深層学習コースの演習です。

最終的な答えが 1.0 ではない理由を説明できる人はいますか?

0 投票する
2 に答える
73 参照

c++ - パフォーマンス ライブラリの効率的なラッパーを作成するスマートな方法

倍精度浮動小数点数の配列に対して非常に高速に (ほとんどの場合マルチスレッドで) 計算を実行できる外部ライブラリがあるとします。便宜上、コードをオブジェクト指向の方法で記述して、オブジェクトの配列を取得します。各オブジェクトには、double 値を保持するプロパティがあります。強力な外部ライブラリを利用する単純なアプローチは、次のようなものです。

ただし、これには一時配列を保持するための時間と追加のメモリが必要です。それを行うより良い方法はありますか?

一般的な質問ですが、基本的にはC++でやりたいです。

0 投票する
1 に答える
433 参照

python - 正常なサンプルが特定の間隔に収まる確率のログを Python で計算する際のアンダーフローの防止

2 つの実数xとが与えられyた場合、Python で次の関数を計算したいと思います。

ここでt、正規分布からサンプリングされます。

単純な実装の 1 つは、 を使用することscipy.stats.normです。

残念ながら、これはxyが から離れている場合にアンダーフローを引き起こし0ます。このような数値エラーを防ぐにはどうすればよいでしょうか。

0 投票する
1 に答える
92 参照

c++ - 数値誤差は再現可能ですか?

おそらくこれはばかげた質問かもしれませんが、最近強制されるまで、私はそれについて考えたことはありませんでした.

プログラムがまったく同じ状態で初期化され、初期化されていない変数の方法で未定義の動作がないと仮定します。CPU のレジスタの状態は、コード実行前とは異なる場合があります。異様なビット フリッピングを引き起こす外部現象はないと仮定します。

数値計算の同じシーケンスは常に同じ結果を生成しますか? 言い換えれば、数値誤差は決定論的ですか?

編集: ポインター アドレスが毎回異なる可能性があることはわかっていますが、ポインター アドレスを計算で使用しないように抽象化しましょう。

0 投票する
1 に答える
526 参照

matrix - fortranの関数で2つ以上の配列を出力する方法は?

部分ピボットを使用して行列の LU 分解を計算するプログラムを作成しています。プログラムを複数回実行して各行列を個別に出力するのではなく、複数 (2 つまたは 3 つ) の行列を出力する関数が必要です。 1回の実行で必要なものすべてを手に入れてからの時間。これを行う方法はありますか?たとえば、ピボットを必要としない正方行列に対して、Doolittle のアルゴリズムを使用した関数を次に示します。出力を一度に行列 l と u にしたいのですが、それを行う方法がわかりません。