matlab里 两个fmincon同时使用,用由第一个fmincon求出的最优x值带入第二个fmincon函数内的极值,急!

functionmain2xmin=zeros(9,1);amin=xmin;xmax=ones(9,1);amax=xmax;x0=(1/2000)*ones(9,1)... function main2
xmin=zeros(9,1);
amin=xmin;
xmax=ones(9,1);
amax=xmax;
x0=(1/2000)*ones(9,1);
a0=x0;
D=0:0.1:1;
F=zeros(size(D));
for i=1:length(D);
data=D(i);
[x,fval,flag,c]=fmincon(@ning,x0,[],[],[],[],xmin,xmax,@ning1);
[a,fval,flag,c]=fmincon(@ning2,a0,[],[],[],[],amin,amax,@ning3);
F(i)=-fval;

end

plot(D,F,'*-');

function y=ning(x)
y=x(9)*((x(1)+x(5))/(x(1)+x(2)+x(5)+x(6))*log2((x(1)+x(5))/(x(1)+x(2)+x(5)+x(6)))...
+(x(2)+x(6))/(x(1)+x(2)+x(5)+x(6))*log2((x(2)+x(6))/(x(1)+x(2)+x(5)+x(6))))...
+((1-x(9)))*log2((x(2)+x(6))/(x(1)+x(2)+x(5)+x(6))*x(9)+(x(4)+x(8))/(x(3)+x(4)+x(7)+x(8))*(1-x(9)));
y=-y;
end
function [c,ceq]=ning1(x)
c(1)=x(9)*((x(1)+x(5))/(x(1)+x(2)+x(5)+x(6))*log2((x(1)+x(5))/(x(1)+x(2)+x(5)+x(6)))+
x(9)))*log2((x(2)+x(6))/(x(1)+x(2)+x(5)+x(6))*x(9)+(x(4)+x(8))/(x(3)+x(4)+x(7)+x(8))*(1-x(9)))-data;
ceq(1)=x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7)+x(8)-1;
end
function s=ning2(a)

s=-(((a(1)+a(2)+a(3)+a(4))*a(1)/(a(1)+a(2))+(a(5)+a(6)+a(7)+a(8))*a(5)/(a(5)+a(6)))*a(9)...
+((a(1)+a(2)+a(3)+a(4))*a(3)/(a(3)+a(4))+(a(5)+a(6)+a(7)+a(8))*a(7)/(a(7)+a(8)))*(1-
+(a(5)+a(6)+a(7)+a(8))*a(5)/(a(5)+a(6))))...
/(a(3)+a(4))+(a(5)+a(6)+a(7)+a(8))*a(8)/(a(7)+a(8))));

s=-s;
end
function [c,ceq]=ning3(a,x)
c(1)=-a(9);
c(2)=a(9)-1;
ceq(1)=a(1)-x(1);
。。。。。
ceq(8)=a(8)-x(8);
end
end
由于篇幅限制,两个目标函数没有输入完整。限制就是想用由第一个fmincon得到的x(1)-x(8)带入第二个fmincon的a(1)-a(8),然后看a(9)在(0,1)间变化时使目标函数达最大,然后画出这个最值随D变化的曲线。一直报错是第二个函数的调用不对。求高手指教!!!
展开
 我来答
dukinkin
2014-09-25 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:924万
展开全部
你要搞清楚,你的调用函数的方式
目标函数是ning和ning2
而ning1和ning3只是非线性约束函数

你这样调用优化的解过是让ning和ning2输出最小,而不是你想要的优化a(9)的值
追问
我不是优化a(9),我就是要求极值,不过是一个极值是在另一个极值的约束下产生。
追答
[x,fval,flag,c]=fmincon(@ning,x0,[],[],[],[],xmin,xmax,@ning1);
[a,fval,flag,c]=fmincon(@ning2,a0,[],[],[],[],amin,amax,@(a) ning3(a,x));
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式