马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
最近在做一个优化问题,用matlab写的程序如下:
lb=[17,6,250,23.5,17.5];%设计变量下限
ub=[40,20,400,26.5,21.5];%设计变量上限
x0=[27,13,370,25.22,21.78];%变量初始值
options=optimset('LargeScale','off','display','off');
[x,fval,exitflag,output]=fmincon(@mubiao,x0,[],[],[],[],lb,ub,@yueshu,options)
约束条件 yueshu.m
function [C,Ceq]=yueshu(x)
zp=((4.333*x(1)*cosd(x(4))-(x(1)*cosd(x(5))))/(cosd(x(4))+cosd(x(5))))
zr=(4.333*x(1));
as=(acosd((x(1)*cosd(22.5))/(x(1)+2.8)));
ap=(acosd((zp*cosd(22.5))/(zp+2.8)));
ar=(acosd((zr*cosd(22.5))/(zr+2.8)));
e1=(((2*pi)^(-1))*(x(1)*(tand(as)-tand(x(4)))+zp*(tand(ap)-tand(x(4)))));
e2=(((2*pi)^(-1))*(zp*(tand(ap)-tand(x(5)))-zr*(tand(ar)-tand(x(5)))));
C(1)=x(1)*(4.333*cosd(x(4))-cosd(x(5)))/cosd(x(4)+cosd(x(5)))*(1-0.5*3^0.5)+3-(0.5*3^0.5)*x(1);
C(2)=0.4-(x(3)/(x(2)*x(1)));
C(3)=(x(3)/(x(2)*x(1)))-0.9;
C(4)=2.33-6.8587*log((2.4998e-004)/(((4.333*x(1)*cosd(x(4))-(x(1)*cosd(x(5))))/(cosd(x(4))+cosd(x(5)))+x(1))/(x(3)*(x(2)^2)*(x(1)^4)*(4.333*x(1)*cosd(x(4))-(x(1)*cosd(x(5))))/(cosd(x(4))+cosd(x(5))))^0.5));
C(5)=2.33-5.4213*log((2.27e-6)*x(3)*(x(2)^2)*x(1));
C(6)=2.33-5.4213*log((1.5895e-6)*x(3)*(x(2)^2)*(4.333*x(1)*cosd(x(4))-(x(1)*cosd(x(5))))/(cosd(x(4))+cosd(x(5))));
C(7)=1.2-e1;
C(8)=1.2-e2;
C(9)=e1-2.7;
C(10)=e2;
Ceq=[]
目标函数 mubiao.m
function f=mubiao(x);
zp=((4.333*x(1)*cosd(x(4))-(x(1)*cosd(x(5))))/(cosd(x(4))+cosd(x(5))))
zr=(4.333*x(1));
as=(acosd((x(1)*cosd(22.5))/(x(1)+2.8)));
ap=(acosd((zp*cosd(22.5))/(zp+2.8)));
ar=(acosd((zr*cosd(22.5))/(zr+2.8)));
e1=(((2*pi)^(-1))*(x(1)*(tand(as)-tand(x(4)))+zp*(tand(ap)-tand(x(4)))));
e2=(((2*pi)^(-1))*(zp*(tand(ap)-tand(x(5)))-zr*(tand(ar)-tand(x(5)))));
f=-(e1+e2)
我算出来的结果 x =
42.1760 12.7096 370.0277 27.3494 23.6760 超过了变量和约束限制范围,不知道为什么,有人可以帮忙看看么?
1stopt算的时候总有函数表达式错误是为什么呢?0.4-(x3/(x2*x1))<=0 这样的表达式都有错误为什么呢?
希望大家能帮帮忙,在这里先谢谢了
|