我正在尝试使用Octave计算具有两个ODE的系统解的最大值。我首先解决了系统本身:
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);
但是现在我不知道如何计算作为系统解决方案获得的两个函数(数字函数)的最大值。我在互联网上搜索过但我还没找到我想要的东西......我只发现函数fminbnd是一个间隔函数的最小值...
是否可以使用Octave计算数值函数的最大值?
答案 0 :(得分: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)));