matlab的fmincon函数系数改变情况下的优化问题进行求解问题

最近在用matlab中的fmincon解决多变量非线性约束的优化问题,大部分资料都拿目标函数或者约束函数系数为固定值进行了求解,如下所示:
function main
clear
x0=[-1 1];
options=optimset('largescale','off','display','iter');
[x,fval,exitflag,output]=fmincon('exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)',x0,[],[],[],[],[],[],@confun,options)
end
约束条件的文件为:
function[c,ceq]=confun(x)
c=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];
ceq=[];
这种求解可以由matlab算出。
但是事实上的应用都是基于外部系数的改变来计算最优值。
例如将上面问题改为:
function main
clear
x0=[-1 1];
a = 4;
options=optimset('largescale','off','display','iter');
[x,fval,exitflag,output]=fmincon('exp(x(1))*(a*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)',x0,[],[],[],[],[],[],@confun,options)
end
约束条件的文件不变
则用matlab跑的时候会出错,显示未声明变量a。但是我已经在主程序前面给a赋了值。
若将目标函数写为子函数用于主函数的调用,即
function f=objfun(x,a)
f=exp(x(1))*(a*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
也会出错!
希望大神给与指导,如何这种系数改变情况下的优化问题进行求解。

    定义目标函数时,用function f=objfun(x,a)

    调用fmincon时,事先定义好变量a,然后:.. = fmincon(@(x) objfun(x,a), ...)

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