2017-01-10 7 views
0

タイトルに指定されているように、関数を常に正の値にする必要があります(負になる場合は0にする必要があります)。これは私が正常にODEの関数内の非負のオプション

function [ func2 ] = func2 (mumax,Qmin,Q) 

func2=mumax*(1-Qmin/Q); 

end 

を維持したい機能があり、これがある

clear 
t=[0,276]; 
Tie=0.3; 
mumax=2; 
Qmin=1; 
X0=[4,2]; 
[t,X]=ode45(@(t,X) odeset(mumax,Qmin,Tie,X),t,X0); 

:これは私がODE呼び出すところからスクリプトがある

:この機能は、ODE内にありますODE

function [ dXdt ] = odeset(mumax, Qmin, Tie,X) 

dXdt=zeros(2,1); 
dXdt(1)=func2(mumax,Qmin,X(1))-X(2)*Tie; 
dXdt(2)=func2(mumax,Qmin,X(1))-X(2)*Tie; 
end 
+0

堅牢な方法でこれを行う組み込みオプションがあります。 [こちらをご覧ください](https://www.mathworks.com/help/matlab/math/nonnegative-ode-solution.html)。しかし、Matlabの['odeset'](https://www.mathworks.com/help/matlab/ref/odeset.html)もオーバーロードされています。これはパラメータとオプションを設定するために使われます。さまざまなODEソルバーODE機能の名前を変更する必要があります。最後に、ODE関数の2つの導関数が同じであるように見えます。 – horchler

+0

ODEは意味をなさない例に過ぎず、私はそれを扱っていません。 また、あなたのリンクはODEの解決策を常に肯定的にすることですが、私はそれを望んでいません、私はfunc2を常に正にしたいだけです。 – kumbu

答えて

1

変更func2の出力に

function [ out ] = func2 (mumax,Qmin,Q) 
    out=max(mumax*(1-Qmin/Q),0); 
end 

これは出力を正または0に強制します。

+0

こんにちは、お寄せいただきありがとうございますが、私は最大機能の角括弧内の式は、他の方法でなければならないと思う: 'function [out] = func2(mumax、Qmin、Q) out = max(mumax *(1) -Qmin/Q)、0)となる。 end' このようにして、許容される最小値は0(または式のその部分に書いた他の数)と言います。私はこの情報を[link](https://de.mathworks.com/help/matlab/ref/max.html#bupr915)で見つけました。 私が間違っている場合は私を確認してください。正しい答えとしてあなたのコメントを記入します。 – kumbu

+0

@kumbu、他の方法ではどういう意味ですか? func2の出力をどこで負でないように変更しますか? – lucianopaz

+0

はい、申し訳ありません私はコメントを終わらせる前にイントロを押して、編集したコメンテントを見てください。基本的に 'out = max(mumax *(1-Qmin/Q)、0)'を書く。 'out = max(0、mumax *(1-Qmin/Q))'の代わりに '; – kumbu

関連する問題