問題タブ [odeint]
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.
python - lsoda警告を出すScipy odeint
私はコーディングがまったく初めてで、これらの 5 つの微分方程式を数値的に解きたいと思っています。Python テンプレートを使用して、自分のケースに適用しました。これが私が書いたものの簡略化されたバージョンです:
次のエラーが表示されます。
いくつかのパラメーターのセットについて、mxstep
in odeint で遊んでみると (これも試しhmin
てみhmax
ましたが違いに気づきませんでした)、エラーは解決しませんが、私のグラフは見栄えがよく、影響を受けていませんが、ほとんどの場合は影響を受けています。odeint オプションfull_output=1
を指定して実行するように要求されるエラーが表示されることがあります。
検索しても意味がわかりません。
どこに問題があり、どのように解決するのかを理解したいと思います。odeint は私がやろうとしていることにも適していますか?
c++ - 「controld_runge_kutta」はクラス テンプレートではありません
これは、次のコードの既知のエラーです。
「controld_runge_kutta」はクラス テンプレートではありません
次のコードでは:
このエラーが発生する理由はわかっています。しかし、私の質問は、 146 行目のgithubの元のブースト ライブラリでどのように機能するかということです。
ありがとうございました。
python - Python odeint で配列を渡す
私はPythonを初めて使用するので、次の質問に「当たり前」の答えがある場合はすみません。
そのため、odeint を使用して ODE を解こうとしていて、配列を渡したいと考えています。しかし、 TypeError: can't duplicate sequence by non-int of type 'float' は次の行で発生し続けます:
したがって、コードは次のとおりです。
助けてください。
c++ - ブースト ODEINT における get_unit_value の役割
Boost ライブラリの次のコードでは、次のようになります。
...
の役割はget_unit_value
私には不明です。それは何をするためのものか?何かを渡すと、同じ値が返されます。なぜ誰かがそれを構造にラップする必要があるのですか? 実行時間を遅くする以外に何かしますか?
このコードはここから呼び出されます:
python - odeint の許容範囲を変更しようとしましたが、「不正な入力が検出されました」と「無限ループ」が発生しました
次の微分方程式 y'' + a y' − y + by^3 = c cos(kx) が与えられ、初期条件は y(0) = y'(0) = 0 で、パラメーター値は a = 0.05、b = k = 1 および c = 0.5。
ここで、私がやろうとしているのは、前の反復からの数値解 y(t) の変化が x = x_max で 10^−8 未満になるまで、ソルバーの相対許容誤差を減らすことです。
これが私のコードです:
そして、私は出力を得ています:
異なるR1値で繰り返し...
「不正な入力が検出されました」と「明らかな無限ループ」が発生する理由がわかりません。後者は新しいもので、なぜそれが起こっているのかわかりません。
どんな助けでも大歓迎です。
PSフォーマットについては申し訳ありません。私はこれが初めてで、問題を見栄えよくするために変更する方法がわかりません。
-編集-
提案された「full_output = 1」を試し、Ydiffの5行目を次のように変更しました
そして、私は次のようなものを得るでしょう
また
とても奇妙です。今日、無限ループ エラーは発生しませんでしたが、これらのメッセージは引き続き表示されます。何が起こっているのかを確認するために、同じ行を次のように編集しました。
私は出力として得ました(「nje」が0であることに加えて):
可能であれば、これをどのように修正できるのだろうか。
python - odeint のボーデッド ローレンツ パラメーター
パラメータの 1 つが変調されるローレンツ ソリューションを作成しようとしています。
ローレンツ方程式の簡単なセットを作成する場合、odeint を使用するのは簡単です。
上記のコードは、単純なローレンツ システムを作成するのに完全に機能します。ここで、変調されたパラメーター ローレンツ システムを作成して、通信におけるその有効性を調べたいと思います。これは、パラメータ Beta を変調することで実行できます。Beta(t) は、「0」または「1」を表す 4.0 または 4.4 の 2 つの値のいずれかを取ることができます。
ベータを変調するために、ランダムな 1 と 0 を選択し、「1」または「0」あたり 500 サンプルで、それらをベータの 2 つの値 4.0 と 4.4 に割り当てました。
次に、パラメーターの odeint セットへの呼び出しを次のように変更しました。 param = [Sigma, Rho, Bauded_Beta]
これを実行すると、次のようなエラー メッセージが表示されます。 float の適切な配列ではありません。ValueError: 配列要素をシーケンスで設定しています。odepack.error: 関数呼び出しの結果は float の適切な配列ではありません。"
このエラーは、ベータ版が一定ではなくなったことによるものです。しかし、変調されたパラメーターを odeint に渡すにはどうすればよいですか?
c++ - Rcpp NumericalMatrix データ型、グローバル宣言
私は C++ にかなり慣れていないので、Rcpp 経由で使用して R コードを高速化しようとしています。
以下のコードは、t0 から t1 までを統合します。これは「lorenz」関数で行われます。Test4 は、「lorenz」「counts」回数を使用して統合します。ただし、時間「t1」で、システムが再実行される前にシステムの状態が「write_lorenz」で変更され、これが問題の場所です。Rからtest4を呼び出して同じプログラムを何度も実行すると、画面への出力は常に同じ結果になりますが、返された行列「u」はそうではなく、最終的に「t1」が何であるかに収束するようです問題。
入力値が変わらないので、メモリリークがあるのか、それとも何か他のことが起こっているのか、どうすれば修正できるのか疑問に思っています。また、「u」の初期化が正しくないので、「new」コマンドを使用する必要があるのではないかと考えています。
私が試したのは NumericMatrix* u = NULL; です。*u = 新しい NumericMatrix; 次に、たとえば *u(1,2) として行列の要素にアクセスしようとしましたが、この方法で要素にアクセスすると、u が関数ではないというエラーが発生しました。
どんな助けでも大歓迎です
このコードを次のサイトから変更しました
http://headmyshoulder.github.io/odeint-v2/examples.html
だから私はRcppでそれを使うことができました