早教吧 育儿知识 作业答案 考试题库 百科 知识分享

matlab中的fmincon函数的用法!急x0=[1;1;1;1];A=[]b=[]Aeq=[1111];beq=[100000];VLB=[0;0;0;0];VUB=[];w=[100000];[x,favl]=fmincon('100000/(x(1)*0.971/33.5+x(2)*0.445/5.39+x(3)*0.3659/9.2+x(4)*0.195/9.05)',x0,A,b,Aeq,beq,VLB,VUB);xsum

题目详情
matlab中的fmincon函数的用法!急x0=[1;1;1;1]; A=[] b=[] Aeq=[1 1 1 1]; beq=[100000]; VLB=[0;0;0;0]; VUB=[]; w=[100000]; [x,favl]=fmincon('100000/(x(1)*0.971/33.5+x(2)*0.445/5.39+x(3)*0.3659/9.2+x(4)*0.195/9.05)',x0,A,b,Aeq,beq,VLB,VUB); x sum=100000+100000/favl 我想在fmincon中加入一个变量,以便以后做循环,比如将100000/(x(1)*0.971/33.5+x(2)*0.445/5.39+x(3)*0.3659/9.2+x(4)*0.195/9.05)中的100000变成一个数组,每循环一次,它都将取数组中的下一个数,这个在matlab中怎么实现啊!!!!!急急急急急急急急急急急啊!!!!!!!@#¥%……&
▼优质解答
答案和解析
可以把'10000/(x(1).......'这个写成如下形式: w=[100000,w(2),...,w(n)]; for i=1:length(w) y=@(x)w(i)/(x(1)*0.971/33.5.........; [x,favl]=fmincon(y,x0,A,b,Aeq,beq,VLB,VUB); end 或者:可以写一个函数myfun.m function f=myfun(x) global p f=p/(x(1)*0.971/33.5..............; ------------------------------------ 主函数调用部分写成 global p ... ... w=[w(1),w(2),....w(n)]; for i=1:n p=w(i); [x,favl]=fmincon(@myfun,x0,A,b,Aeq,beq,VLB,VUB); end