使用matlab的fmincon优化解决非线性问题,一直报错,求大神解答,小白在线求解答!
建立目标函数的M文件:functionm=fun1(x)m=cos(x)*4/(3*pi);约束条件:function[g,h]=fun2(x)g=[cos(5*x(1)...
建立目标函数的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')
弄了半天多了···求大神出现,求解答小弟的问题,感激不尽! 展开
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个,而优化问题要求得出一个标题值,而不是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')
%建立目标函数的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应是等式。没有的,可为空。
展开全部
你的目标函数是什么?
根据你的代码可知x具有三个分量,而你的目标函数 m=cos(x)*4/(3*pi); 并没有表示使用哪些分量啊,应该类似fun2(x)那样,用x(1),x(2)等表示。
根据你的代码可知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)的最小值?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
引用learneroner的回答:
你的目标函数是什么?
根据你的代码可知x具有三个分量,而你的目标函数 m=cos(x)*4/(3*pi); 并没有表示使用哪些分量啊,应该类似fun2(x)那样,用x(1),x(2)等表示。
你的目标函数是什么?
根据你的代码可知x具有三个分量,而你的目标函数 m=cos(x)*4/(3*pi); 并没有表示使用哪些分量啊,应该类似fun2(x)那样,用x(1),x(2)等表示。
展开全部
很明显目标函数是fun1啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询