用fmincon求目标函数最小值 其中有多个非线性不等式约束,还有参数大于零的正整数约束

2025-03-13 09:23:33
推荐回答(2个)
回答1:

转换成小于零的约束例如
2000=x(1)*x(4)-8000<=0和2000-x(1)*x(4)=<0

回答2:

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
nonlcon就是非线性约束可以是函数可以是m文件,里面要有ce[],ceq[]
举个例子,写法:
function [ce,ceq]=myfunc(x)
ce[1]=x1+sin(x2);%表示x1+sin(x2)<=0的约束
ce[2]=x1-cos(x2);%表示x1-cos(x2)<=0的约束
ceq[1]=fun1;%表示fun1=0的约束
ceq[2]=fun2;%表示fun2=0的约束,这里fun1、fun2可以在其他M文件里提前写好。
%如果没有约束就直接ce[],ceq[]表示
求解的时候就直接
x = fmincon(@(x)myfun(x),x0,[],[],[],[],[],[],@(x) myfunc(x))%myfun(x)是提前写好的目标函数