matlab非线性约束条件function [c,ce] = nonlcon1(x)

非线性优化时要把非线性约束条件编成m文件:function [c,ce] = nonlcon1(x) ,,然后发现条件里需要一些其他参数,比如说:c(1)=a(1)*x(1)+a(2)*cos(x(2));;;这里a是之前算出来的该怎么加到这个m文件里去。我试过function [c,ce] = nonlcon1(x,a) 但不行,怎么弄

有以下几种方式:

1、用全局变量,不建议;

 

2、传递附加参数:把非线性约束条件定义成函数

function [c,ce] = nonlcon1(x,a)

并且调用fmincon的时候用:

fmincon(FUN,X,A,B,Aeq,Beq,LB,UB,@nonlcon1,options,a)

其中,附加参数aoptions后面,options以及前面的参数都不能缺,如果不需要,可以用空数组([ ])占位。

 

3、使用嵌套函数,也就是说把约束条件作为主函数的嵌套函数,大致结构如下:

function main
a = 1;
fmincon(FUN,X,A,B,Aeq,Beq,LB,UB,@nonlcon1)

    function [c,ce] = nonlcon1(x) 
        c(1)=a(1)*x(1)+a(2)*cos(x(2));
        ...
    end
end

温馨提示:答案为网友推荐,仅供参考