Function 倍频程,求数值函数的最大值

Function 倍频程,求数值函数的最大值,function,octave,numeric,Function,Octave,Numeric,我试图用倍频程计算两个常微分方程系统解的最大值。我首先解决了系统本身: 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) =

我试图用倍频程计算两个常微分方程系统解的最大值。我首先解决了系统本身:

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)));