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

最近在用matlab中的fmincon解决多变量非线性约束的优化问题,大部分资料都拿目标函数或者约束函数系数为固定值进行了求解,如下所示:functionmainclea... 最近在用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);
也会出错!
希望大神给与指导,如何这种系数改变情况下的优化问题进行求解。
展开
 我来答
WM_THU
2014-06-05 · TA获得超过7164个赞
知道大有可为答主
回答量:4285
采纳率:80%
帮助的人:3928万
展开全部
  1. 定义目标函数时,用function f=objfun(x,a)

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

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式