八度,求数字函数的最大值



我正在尝试使用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); 

但是现在我不知道如何计算作为系统解决方案获得的两个函数(数值函数)的最大值。我在互联网上搜索过,但我没有找到我想要的东西......我只找到函数 fminbnd 用于区间函数的最小值......

是否可以用八度计算数值函数的最大值?

一般来说,如果你知道如何找到函数的最小值,你也知道如何找到它的最大值:只需查找 -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)));

最新更新