找到最佳的输入组合,使非线性ODE数学模型的输出最大化
10次观看(过去30天)
显示旧注释
如何找到输入(3个输入)的最佳组合,从而获得最大的输出。请注意,我有一个非线性ODE模型的输出也作为微分eqn。另外,我有SBML文件,如何处理?
接受的答案
艾伦·韦斯
2021年9月6日
在ODE计算中添加要优化的参数作为向量:
函数rest = scrt1 (t,X,params)
x2 = X(1);
x3 = X(2);
%的参数
如果t < 15
X1 = params(1);输入1可以从1e-9到1e-6不等
其他的
X1 = 0;
结束
X5 = params(2);%输入2(输入2是一个状态变量,在执行优化时可以在4到15的范围内变化)
KST = params(3);%输入3(输入3是速率常数,它可以从0.1到2)
Xo = params(4);%输入4(输入4是一个状态变量,可以在4到10的范围内变化)
K1 = 6e7;
Km1 = 0.20;
Km4 = 0.003;
K3 = 2500.00;
K4 = km4/9;
Km3 = km1;
Lap = 1.5;
%微分方程
dx2dt = km1*x3 + km3*LAP - k1*x1*x2 + km4*x3 - k4*x2;
Dx3dt = k1*x1*x2 - km1*(x3+x5+xo) - k3*x3*kst;
Rest = [dx2dt;dx3dt];
结束
写出目标函数如下所示:
函数Y = objfun(params)
选项= odeset(“InitialStep”, 0.0001,“RelTol”1 e-09);
(~ Y) = ode15s (@ (t, X) Scrpt1 (t, X, params), 60 [0], [e-13 9,0],选项);
y = -Y(end,2);%负的,因为你想最大化
我假设你要求的是Y在最后一次的值。
结束
获取解决方案:
Lb = [1e-9,4,0.1,4];
Ub = [1e-6,15,2,10];
X0 = [1e-7,5,1,4];
Opts = optimoptions(“fmincon”,“PlotFcn”,“optimplotfval”);
[溶胶,fval] = fmincon (x0 @objfun ,[],[],[],[], 磅,乌兰巴托,[],选择)
函数的真实值是-fval,因为你减去了y
艾伦·韦斯
MATLAB数学工具箱文档