2016-03-19 58 views
2

Octaveを使って2つのODEを持つシステムの解の最大値を計算しようとしています。私はまず、システム自体解決した:Octave、数値関数の最大値を求める

function xdot = f (x,t) 

a1=0.00875; 
a2=0.075; 
b1=7.5; 
b2=2.5; 
d1=0.0001; 
d2=0.0001; 
g=4*10^(-8); 
K1=5000; 
K2=2500; 
n=2; 
m=2; 

xdot = zeros(2,1); 

xdot(1) = a1+b1*x(1)^n/(K1^n+x(1)^n)-g*x(1)*x(2)-d1*x(1); 
xdot(2) = a2+b2*x(1)^m/(K2^m+x(1)^m)-d2*x(2); 

endfunction 

t = linspace(0, 5000, 200)'; 
x0 = [1000; 1000]; 
x = lsode ("f", x0, t); 

set term dumb; 
plot(t,x); 

をしかし、今、私はシステムの解として得た(数値のもの)2つの関数の最大値を計算する方法がわかりません。私はインターネットで検索しましたが、私が望むものは見つけられませんでした...私は、インターバルの関数の最小値に対して関数fminbndを見つけました...

最大値を計算することは可能ですか? Octaveの数値関数ですか?

答えて

2

一般に、関数の最小値を見つける方法を知っている場合は、その最大値を見つける方法も知っています。最小値の-fを探してください。

ただし、fminbndは、任意の時点で評価できる関数用に設計されています。あなたが持っているものは、200ポイントのベクトルです。原則として、補間を使用して関数を取得し、それを最大化することができます。しかし、これは本当に必要なわけではありません。なぜなら、あなたが持っている情報はすべてその行列xにあるからです。そこで最大値を取るのが理にかなっています。このように:

[x1m, i1] = max(x(:,1)); 
[x2m, i2] = max(x(:,2)); 
disp(sprintf('Maximum of x1 is %f attained at t = %f', x1m, t(i1))); 
disp(sprintf('Maximum of x1 is %f attained at t = %f', x2m, t(i2))); 
+0

あなたは完全に正しいです!どうもありがとうございました!! –

関連する問題