2

多くの異なるパラメーター (これらのパラメーターは微分方程式の係数) に対して ode45 を使用して ODE 系を解いており、解が特定の値よりも小さい (大きくない) パラメーターを見つけたいと考えています。

ode45 に条件を設定して、システムの解決中に (これらのパラメーターの一部の) 解がその (指定された) 値よりも大きくなった場合に自動的に「検出」し、それ以降のステップの解決を停止するにはどうすればよいですか?

Jan は、入力関数の定義に次の条件を入れることを提案したので、int. 私はこれを試しましたが、うまくいきません: いくつかのステップの後 (条件はまだ正しくありませんが)、反復はすぐに終了し、出力はある数値で一定に保たれます。(誤った出力)

( qm 、 U 、 V などは定数で、 X には 4 つの列があります)

[T,X]=ode45(@acceleration,tspan,x0);


function xprime=acceleration(T,X)
   size_X=length(X);
    xprime=zeros (4,1);
        if X(size_X,1)>threshold

  xprime(1)=0;
  xprime(2)=0;
  xprime(3)=0;
  xprime(4)=0;

        else

  xprime(1)=X(3);
  xprime(2)=X(4);
  xprime(3)=X(1)*X(4)^2 - 2*qm*(U+V*(cos(w*T)))*F1(num,X(1),X(2));
  xprime(4)= -2*X(3)*X(4)/X(1) - qm*((U+V*(cos(w*T)))/(X(1)))*F2(num,X(1),X(2));

        end
  end
  • 上記のコードの問題は何ですか?
  • ode45 に監視機能を追加することを誰かが提案しました。(ここ) . 誰もこれを行う方法を知っていますか? ありがとう
4

2 に答える 2

1

Matlab ODE ソルバーには、目的のために (誤って) 使用される可能性のある組み込みオプションがありません。

y' = f(t,y)ただし、それに応じて右側を変更できます。私は考えるかもしれません

  • IF y > threshold THEN f(t,y) = 0-- これにより、ODE45 のステップ サイズ制御により、反復が迅速に終了するはずです。
  • または、現在の反復のみをキャンセルする例外を発生させます(これを行う方法がわからない;)
于 2013-03-28T17:10:40.927 に答える
0

一連の方程式を解いているか、時間をかけて積分しようとしていますか? 詳細情報がなければ、fsolve または fmincon を使用する必要があるように思えますか?

本当に統合している場合は、イベント機能を使用して、ode45 に停止したいことを示すことができると思います。バロードの例が参考になるかもしれません。

于 2013-03-29T15:38:02.097 に答える