最近写matlab优化程序遇到的一点小问题
小弟我最近刚接触matlab软件,感觉其很强大,最近做一个优化实例编程遇到问题求大神帮助解决!编制优化设计的M文件(1)编写目标函数m文件并以myfun保存在matlab...
小弟我最近刚接触matlab软件,感觉其很强大,最近做一个优化实例编程遇到问题求大神帮助解决!
编制优化设计的M 文件
(1) 编写目标函数m文件并以myfun保存在matlab目录下的work文件夹中。
function f=myfun(x)
f=8.4265*x(1)^3*x(2)^3*x(3);
(2) 编写非线性约束函数的m文件并以文件名mycon保存在matlab目录下的work文件夹中。
function[c,ceq]=mycon(x)
c(1)=56150.8306/((x(1)*x(2))^3*x(3)*(1-0.5x(3)))^0.5-558;
c(2)=160.5079/x(1)*(1-0.5x(3))^2-300;
c(3)=50.3432/x(1)*(1-0.5x(3))^2-238.86;
ceq=[];
(3)在命令窗口调用优化程序。
X0=[3,25,0.33] %初始点
lb=[2,17,0.25] %下界
ub=[10,50,0.35] %上界
[x,fval]=fmincon(@myfun,x0,[],[],[],[],1b,ub,@mycon)
问题是总是提示错误,也运算不出结果,我也不知道怎么修改! 展开
编制优化设计的M 文件
(1) 编写目标函数m文件并以myfun保存在matlab目录下的work文件夹中。
function f=myfun(x)
f=8.4265*x(1)^3*x(2)^3*x(3);
(2) 编写非线性约束函数的m文件并以文件名mycon保存在matlab目录下的work文件夹中。
function[c,ceq]=mycon(x)
c(1)=56150.8306/((x(1)*x(2))^3*x(3)*(1-0.5x(3)))^0.5-558;
c(2)=160.5079/x(1)*(1-0.5x(3))^2-300;
c(3)=50.3432/x(1)*(1-0.5x(3))^2-238.86;
ceq=[];
(3)在命令窗口调用优化程序。
X0=[3,25,0.33] %初始点
lb=[2,17,0.25] %下界
ub=[10,50,0.35] %上界
[x,fval]=fmincon(@myfun,x0,[],[],[],[],1b,ub,@mycon)
问题是总是提示错误,也运算不出结果,我也不知道怎么修改! 展开
1个回答
2014-04-22
展开全部
看来真是初学者,存在大量的低级错误:
1、函数mycon里面:误用中文括号,缺少乘号。
c(1)=56150.8306/((x(1)*x(2))^3*x(3)*(1-0.5x(3)))^0.5-558;
c(2)=160.5079/x(1)*(1-0.5x(3))^2-300;
c(3)=50.3432/x(1)*(1-0.5x(3))^2-238.86;
应为
c(1)=56150.8306/((x(1)*x(2))^3*x(3)*(1-0.5*x(3)))^0.5-558;
c(2)=160.5079/x(1)*(1-0.5*x(3))^2-300;
c(3)=50.3432/x(1)*(1-0.5*x(3))^2-238.86;
2、主程序:
(1)把lb误写成1b;
(2)定义X0,却使用x0。
主要就这些问题,改正就可以了。
追答
前面橙色的字是警告信息,因为默认的信任域反射算法不能求解此类问题,改用了有效集算法。
可以不管这个警告,没影响。如果不希望看到这个警告,可以通过options参数指定算法,但具体做法不同版本有差异。
后面是提示优化完成,但有可能是局部最优点。
其实任何优化算法都不能保证全局最优,这一点也不必太担心。不放心的话,可以选择其它初值或者改用其它优化算法(比如遗传算法)试试。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询