使用matlab的fmincon优化解决非线性问题,一直报错,求大神解答,小白在线求解答!

建立目标函数的M文件:
function m =fun1(x)
m=cos(x)*4/(3*pi);

约束条件:
function [g,h]=fun2(x)
g=[cos(5*x(1))+cos(5*x(2))+cos(5*x(3))
cos(7*x(1))+cos(7*x(2))+cos(7*x(3))];
h=[x(1)-x(2)

x(2)-x(3)

x(3)-pi/2];

操作函数:
[x,y]=fmincon('fun1',unifrnd(0,pi/2,3,1),[],[],[],[],zeros(3,1),[],'fun2')

一直报错:
错误使用 fmincon (line 637)
User supplied objective function must return a scalar value.
出错 fun3 (line 1)
[x,y]=fmincon('fun1',unifrnd(0,pi/2,3,1),[],[],[],[],zeros(3,1),[],'fun2')

弄了半天多了···求大神出现,求解答小弟的问题,感激不尽!

问题出在约束条件和初值个数都是3个,则会要求目标值也是3个,而优化问题要求得出一个标题值,而不是3个目标值。所以,可这样改:
%建立目标函数的M文件:
function m =fun1(x)
m=cos(x)*4/(3*pi);
%约束条件:
function [g,h]=fun2(x)
g=cos(5*x);%此处可改
h=[];%此处可改
%操作函数:
x0=unifrnd(0,pi/2,1,1);
[x,y]=fmincon('fun1',x0,[],[],[],[],zeros(1,1),[],'fun2')追问

可是约束条件g和h怎么改呢?g只有两个表达式,h的表达式是由0<x1<x2<x3<pi/2变形得到的····求大神指教,完全是小白,第一次用matlab。谢谢大神了

追答

g 应是不等式,h应是等式。没有的,可为空。

追问

请问a=6k±1这个表达式怎么在matlab里面表示?跪谢

追答

可这样:a=[6*k-1,6*k+1];

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-02-11
你的目标函数是什么?
根据你的代码可知x具有三个分量,而你的目标函数 m=cos(x)*4/(3*pi); 并没有表示使用哪些分量啊,应该类似fun2(x)那样,用x(1),x(2)等表示。追问

目标函数中的三个分量就是x(1),x(2),x(3)....求大神帮忙写一下。。。实在弄不了了,已经崩溃。。答案如果合适我会追加分数的

追答

你的目标函数是什么啊?难道是要同时求cosx(1)、cosx(2)、cosx(3)的最小值?

追问

不是的···是在0<x(1)<x(2)<x(3)<pi/2的 条件下,求解m的最大值和最小值。目标函数那里,x为x(1)x(2)x(3)的统称···求大神帮忙

不好意思,回复晚了。我先把分数给你。。求大神帮我改动一下。。

追答

不好意思,我还是不知道你的目标函数是什么,你干脆把原始问题发出来吧

本回答被提问者采纳
第2个回答  2018-01-17
很明显目标函数是fun1啊