用matlab可以解决这个问题吗:有f1(x1,x2,x3,x4),......,fn(x1,x2,x3,x4) n个函数式,约束条件是任意2个函数之差(也是关于x1,x2,x3,x4)小于常熟C.我的意思是这样的约束条件应该怎么输入谢谢 syhjjhpy@163.com 希望可以给我资料
约束条件Matlab下输入:edit opt_con1.m,将下述两行百分号间复制进去,并保存%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [c,ceq]=opt_con1(x)n=4; %你的f的个数f=zeros(1,n);f(1)=x(1)+x(2)+x(3)+x(4);f(2)=x(1)+2*x(2)-3*x(3)+4*x(4);f(3)=sqrt(abs(x(1)*x(1)-x(2)*x(2)+x(3)*x(3)-x(4)*x(4)));f(4)=sqrt(abs(x(1)*x(1)+x(2)*x(2)-x(3)*x(3)-x(4)*x(4)));c=[];Const=15; %你所谓的常数Cfor i=1:n for j=i+1:n c=[c;f(i)-f(j)-Const]; endendceq = [];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%目标函数Matlab下输入:edit opt_fun1.m,将下述两行百分号间复制进去,并保存%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function y=opt_fun1(x) y=x(1)*x(2)-x(3)*x(4);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%在Matlab下输入:x0=[1;1;1;1]; %x1,x2,x3,x4初值xm=[1;1;1;1]; %x1,x2,x3,x4最小值xM=[10;10;10;10]; %x1,x2,x3,x4最大值,如果是无穷大的话,用infA=[]; %线性约束的矩阵B=[]; %线性约束的右边项Aeq=[]; %等式约束Beq=[];[x,f_opt,c,d]=fmincon('opt_fun1',x0,A,B,Aeq,Beq,xm,xM, 'opt_con1');x,f_opt,c %注意,当c>0时才收敛。%fmincon的用法,我发了一点点资料给你。你到邮箱看一下吧。 |
|