- 积分
- 0
- 注册时间
- 2012-2-13
- 仿真币
-
- 最后登录
- 1970-1-1
|
悬赏30仿真币未解决
用matlab中工具箱写的一个优函数 不过最后的变量的取值有问题 希望能给我解答下
目标函数
function f=myfun(x)
z(1)=x(8)*x(9)*x(12)/(2*cos(x(13)/57.3));
z(2)=x(12)*(x(8)+x(8)*x(9))/(2*cos(x(13)/57.3));
z(3)=x(3)/2;
y(1)=z(1)+z(2)+z(3);
y(2)=x(1)*x(6)/(2*cos(x(7)/57.3));
y(3)=(x(3)+x(10))/2;
f=y(1)*y(2)*y(3);
取值范围
clear;
x0=[38;0.55;73.5;30;20;3.5;30.22;59;0.48;56;49;2;23.5];
lb=[31,0.45,58.8,24,16,2.8,24.18,47,0.38,44.8,39.2,1.6,18.8];
ub=[46,0.67,88.2,46,24,4.2,36.27,71,0.57,67.2,58.8,2.4,28.2];
options=[];
[x,fval,exitflag,output]=fmincon(@myfun1,x0,[],[],[],[],lb,ub,@confun,options)
约束条件
function[c,ceq]=confun(x)
c(1)=0.46-(2*x(4)*sin(atan(1/x(2))/57.3))/x(3);
c(2)=(2*x(4)*sin(atan(1/x(2))/57.3))/x(3)-1.12;
c(3)=0.26-(2*x(11)*cos(x(13)/57.3))/(x(12)*(x(8)+x(8)*x(9)));
c(4)=(2*x(11)*cos(x(13)/57.3))/(x(12)*(x(8)+x(8)*x(9)))-1.13;
c(5)=0.11-x(4)*x(6)^(-1)*((x(1)^2+(x(1)*x(2))^2)^0.5)^(-1);
c(6)=x(4)*x(6)^(-1)*((x(1)^2+(x(1)*x(2))^2)^0.5)^(-1)-0.37;
c(7)=17-x(2)*x(1);
c(8)=x(2)*x(1)-26;
c(9)=23-x(9)*x(8);
c(10)=x(9)*x(8)-34;
c(11)=0.12*x(3)-x(5);
c(12)=x(5)-0.2*x(3);
ceq=[];
matlab运算的结果为
x =
38.0000
-12.7535
44.3686
60.4246
20.0000
3.5000
30.2200
59.0000
0.4800
56.0000
49.0000
2.0000
23.5000
fval =
5.7267e+005
exitflag =
0
output =
iterations: 46
funcCount: 1305
stepsize: -6.1035e-005
algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
firstorderopt: 4.9673e+005
cgiterations: []
message: [1x79 char]
这个结果是不对的, x(2)、x(3)、X(4)的取值范围分别应该是0.45-0.67, 58.8-88.2, 24-46, 而优化过后的x(2)、x(3)、和x(4)取值在结果中分别是-12.7535, 44.3686, 60.4246 显然不在设定的范围内
找了很久很久很久都没找到问题的根源 希望有人给解答下 万分感谢!!!
|
|