1

私は、化学反応ネットワークを統合するために c++ ブースト/デイントを使用しています。一部の反応を排除する場合を除いて、すべて正常に機能します。次に、出力に -nan が含まれることがあります。これはその出力のごく一部です。最初の列は時間で、他の列は種の濃度です。

0.0 2.8701 3.4354 3.48348 4.30509 5.43538 5.35687 2.9138 5.31905 3.51382
0.0268472 -ナン 2.93435 -ナン -ナン -ナン -ナン 2.9138 -ナン -ナン
0.0695729 -ナン 2.28324 -ナン -ナン -ナン -ナン 2.9138 -ナン -ナン
0.112299 -ナン 1.77661 -ナン -ナン -ナン -ナン 2.9138 -ナン -ナン
0.155024 -ナン 1.3824 -ナン -ナン -ナン -ナン 2.9138 -ナン -ナン
0.19939 -ナン 1.06535 -ナン -ナン -ナン -ナン 2.9138 -ナン -ナン

2 番目の種はそれ自体にのみ依存し、7 番目の種は定数です。

だから私の質問は: odeint はいつ出力として -nan を与えるのですか? どこかに 0/0 除算があるかもしれませんが、すべての方程式には積しか含まれていません。

dxdt[5] = - c[2] * x[5] + c[3] * x[9] * x[3];

アドバイスをありがとうございました。

4

2 に答える 2

1

ステップサイズが問題になる可能性があることをどこかで読みました。そのため、初期ステップ サイズ dt を 10 分の 1 に減らしたところ、現在は機能しています。種によっては最初の勾配が大きすぎたのかもしれません。返信ありがとうございます。

答えに何日も苦労し、stackoverflowで尋ねるとすぐに自分で見つけるのはなぜですか? :D

于 2014-06-05T07:48:13.543 に答える