問題タブ [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.
numerical-methods - 数値法を教える上でより良い結果をもたらす言語または環境に関するヒント
私は、電気工学の数値計算法に関する最初のコースを準備しています。学生の学習に関して、どの言語または環境がより良い結果を生み出したかについて、この分野の経験を持つ同僚からのフィードバックを収集したいと思います。MATLAB/オクターブ?、Python? C/C++? Rを使うのは面白いでしょうか?質問がサイトの範囲外である場合は申し訳ありません。
フィードバックをお寄せいただきありがとうございます
clojure - Scheme / Common Lisp / Clojure の自動微分ライブラリ
マッカーシーが Lisp を発明した当初の動機の 1 つは、自動微分のシステムを書くことだったと聞いたことがあります。それにもかかわらず、私の Google 検索では、これを行うためのライブラリ/マクロは得られませんでした。関数 F を取り、F の導関数を計算する関数 dF/dx を返すための Scheme/Common Lisp/Clojure ライブラリ (マクロ) はありますか?
複数の引数を持つ F をサポートしたいと思います。ユーザーは、これらのうちどれを x として微分するかを選択します。理想的には、微分器はベクトル値の F と x に対しても機能します。
編集:何人かの人々が象徴的な微分について言及しています。シンボリック微分と自動微分の違いは微妙ですが、ウィキペディア、特にこの図によくまとめられています。この区別は、シンボリック式をそのまま動作するプログラムに変換できる Lisp ではそれほど強力ではありませんが、潜在的な問題が残っています。
シンボリック微分では、微分される式が既知の導関数を使用した操作で構成される必要があります。たとえば、誰かが のような単純な sexp をかき回すマクロの SICP の例に言及し、微分を表す sexp を返す(+ y (* (x y)))
方法の知識とともに、チェーン ルールを使用します。、 whereおよびmay のような式で作業するには、微分時に導関数が不明な他の関数を呼び出す必要があります。+
*
(* (foo x y) (bar x))
foo
bar
(foo x y)
のような式を取り、それを関数本体に置き換えて、引数の言及を衛生的な方法で and に置き換えるx
方法があれば、これは問題ありませんy
。ある?
また、上記のいずれも、ベクトル値の引数に関してベクトル値の関数を微分するときに発生する複雑さに対処していません...これは、ほとんどの自動微分の実装が対象とされているものです。
c - (3 次) 多項式の実根を見つける簡単な方法は何ですか?
これは私には明らかな質問のように思えますが、SO のどこにも見つかりませんでした。3 次多項式があり、関数の実根を見つける必要があります。これを行う方法は何ですか?
3 次関数の根の閉じた形式の公式をいくつか見つけましたが、それらはすべて複素数または多くのゴニオメトリック関数を使用しており、好きではありません (また、どれを選択すればよいかわかりません)。
シンプルなものが必要です。速いほど良いです。そして、最終的には高次の多項式を解く必要があることを知っているので、数値ソルバーも役立つでしょう。ライブラリを使用して難しい作業を行うことができることはわかっていますが、これを演習として行いたいとしましょう。
私はCでコーディングしているので、いいえimport magic_poly_solver
、お願いします。
おまけの質問: 与えられた区間内のルートのみを見つけるにはどうすればよいですか?
math - ルートを見つけるためのこれらのわずかに異なる方法で、異なる結果が得られるのはなぜですか?
5 乗根を計算するための次の 2 つのわずかに異なる方法を検討してください。
x の 5 乗根は写像 y -> x/(y^4) の不動点であるため、どちらも不動点の平均減衰検索によって 5 乗根を計算しようとします。定義しました
両方の方法を試すと、
2 番目の方法で 5 乗根を正しく計算できないのはなぜですか? 奇妙なことに、この間違った方法を 4 乗根または 3 乗根で試しても、正しく機能します。
参考までに、このコードは「コンピューター プログラムの構造と解釈」の演習 1.45を解こうとしています。正しい方法ができたので、コードは機能しますが、間違った方法が間違っている理由がわかりません。
matlab - 数値積分関数間の MATLAB の違い
MATLAB を使用して式を統合する必要があります。これらの機能の違いは何ですか?
QUAD
、QUAD8
、QUADL
、DBLQUAD
matlab - Newton-Raphson 反復法の実装
Newton Raphson 反復を使用して後方オイラー スキームを実装しようとしています。各反復で、最初の推測を行い、残差を計算し、変化を解くことを理解しています。私の場合、変更は del w です。その後、値を w^m に追加し、次の m 反復で w の更新値を取得することを知っています。反復が進むにつれて解の収束を確認することを知っています。私が抱えている問題は、時間ステップ dt を t=0:Tmax/dt として実装する方法です。ここで、Tmax は 10 です。時間ステップがどのように行われるかについて混乱しています。その間、どんな助けも大歓迎です。ありがとうございました!
python - 2 の平方根の数字の生成
二百万から三百万桁の平方根の桁を生成したい。
私はNewton-Raphsonを認識していますが、biginteger がサポートされていないため、C または C++ でそれを実装する方法がわかりません。誰かが私を正しい方向に向けることができますか?
また、誰かがPythonでそれを行う方法を知っていれば(私は初心者です)、私も感謝します。
c - 固定小数点乗算のアルゴリズム
タイムスタンプ (秒の小数部のみ) をナノ秒 (10^-9 秒単位) から NTP タイムスタンプの下半分 (2^-32 秒単位) に再スケーリングしようとしています。事実上、これは 4.2949673 を掛けることを意味します。しかし、浮動小数点演算や 32 ビットを超える整数を使用せずにそれを行う必要があります (実際、これは実際には 8 ビット マイクロコントローラー用に書いているため、32 ビット演算でさえ、特に除算ではコストがかかります)。
かなりうまく機能するいくつかのアルゴリズムを思いつきましたが、数値的方法に実際の根拠がないため、それらを改善する方法、またはより正確で他のアルゴリズムに関する提案をいただければ幸いです。 /またはより高速。
アルゴリズム 1
最初の 2 つの定数は、正しい数値をオーバーシュートするのではなく、わずかにアンダーシュートするように選択され、最終的な係数 67078 はこれを修正するために経験的に決定されました。正しい値の +/- 4 NTP 単位内の結果を生成します。これは +/- 1 ns です。許容範囲ですが、残差はns
. 別の用語を追加できると思います。
アルゴリズム 2
4.2949673 の 2 進展開に基づいています (実際には 2.14748365 の 2 進展開に基づいています。これは、丸めを行うために 2 倍にして 1 を追加することから始めているためです)。おそらくアルゴリズム 1 よりも高速です (まだベンチマークを取得していません)。+3 は、すべての下位ビットを切り捨てることによるアンダーシュートを相殺するために経験的に決定されましたが、可能な限り最善の仕事をするわけではありません。
c++ - 多重積分の評価
多次元積分を評価するためのライブラリはありますか?私は少なくとも4つ(一般的にはそれよりはるかに多い)を持っていますが、被積分関数は変数の組み合わせであるため、それらを分離することはできません。数値評価用のライブラリを知っていますか?私は特にmatlabまたはc++のいずれかを探していますが、作業を行うものは何でも使用します。
c - 多項式の根を推定する反復プログラムの作成
ニュートンラフソン法を使用して10次多項式の根を推定することを想定しているcでプログラムを作成しています。ユーザーは 10 個の係数を入力し、方程式の根を推定することを想定しています。絶対相対誤差は 0.00000001 で、許容される反復の最大数は 70 です。サンプル コードは以下のとおりです。
関数 poly と poly_der は、それぞれ多項式とその導関数の値を計算します。定義は以下のとおりです。
deri は、多項式の項の導関数を計算する関数です。残念ながら、このプログラムは予期しない結果をもたらします。コンパイルして正常に実行されるため、どこが間違っているのかわかりません。ニュートン法を使用してルートを推定できる別の方法はありますか? 必要な結果が得られるようにプログラムを改善するにはどうすればよいですか。