感谢大家的帮助。我沿着@Erwin Kalvelagen 建议的路走。对于其他任何人来说,这也是一个非常好的方法。我就是这样做的
创建一个空问题
prob1 = optimproblem
定义带边界的优化变量
x1 = optimvar("x1", "LowerBound",0);
x2 = optimvar("x2","LowerBound",0,"UpperBound",1);
x3 = optimvar("x3","LowerBound",0);
x4 = optimvar("x4","LowerBound",0,"UpperBound",1);
x5 = optimvar("x5","LowerBound",0,"UpperBound",1);
创建目标函数
edit function
创建优化表达式
obj = fcn2optimexpr(@function,x1,x2,x3,x4,x5)
分配目标函数
prob1.Objective = obj
设置约束
constr1 = x1 - (x4*x3) - x2 <=0;
prob1.Constraints.optim1 = constr1;
constr2 = x2 - ((2-x3)/3) <=0;
prob1.Constraints.optim2 = constr2;
constr3 = (x4*(x3))*(x2-((1-x3)/2))-(x1*(x2-x1+(x4*x3)))<=0;
prob1.Constraints.optim3 = constr3;
再看问题检查
showproblem(prob1)
设置初始条件
x0.x1 = 0.01;
x0.x2 = 0.15;
x0.x3 = 0.20;
x0.x4 = 0.20;
x0.x5 = 0.5;
解决问题
[sol,fval,exitflag] = solve(prob1,x0)
希望这会有所帮助。谢谢@Mansour Torabi,尤其是@rosewc 的帮助。