登录论坛

查看完整版本 : [MATLAB基础] 关于fmincon函数求极小值


jiang_hx4041
2009-04-10, 10:22
关于fmincon函数求极小值
function f =rod_obj(x) '目标函数
f=-pi*(Dw^2-x(1)^2)*(x(2)*cos((x(3)+x(4))*pi/(2*180))-m*x(5))*n*fi*cos((x(3)+x(4))*pi/(2*180)+bt*pi/180)/(4*cos(bt*pi/180));


function [C,Ceq]=rod_constr(x) '分线性约束
C=[0.3*m-x(2)*cos((x(3)+x(4))*pi/(2*180))];
Ceq=[pi*Dw*tan(x(3)*pi/180)-x(2);pi*x(1)*tan(x(4)*pi/180)-x(2)];


主程序:
Dw=0.4;bt=30;m=1;fi=0.4;n=60;
A=[-m -2 0 0 0;2.2*m 1 0 0 0];
b=[-m*Dw 2.2*m*Dw];
Aeq=[];beq=[];
vlb=[0.3*Dw 0 8 25 0.012];
ulb=[0.4*Dw pi*Dw*tan(pi/4-bt*pi/180) 22 40 0.02];
x0=[0.13; 0.44 ;16.3 ;30; 0.016];
options=optimset('largescale','off');
[x,fval]=fmincon('rod_obj',x0,A,b,[],[],vlb,ulb,'rod_constr',options)


我运行出错如下:
??? Error using ==> fmincon at 397
FMINCON cannot continue because user supplied objective function failed with the following error:
Undefined function or variable 'Dw'.
Error in ==> main at 9
[x,fval]=fmincon('rod_obj',x0,A,b,[],[],vlb,ulb,'rod_constr',options)

恳请高手指教

yhcode
2009-04-10, 13:09
从错误提示看,很明显
function f =rod_obj(x) '目标函数
f=-pi*(Dw^2-x(1)^2)*(x(2)*cos((x(3)+x(4))*pi/(2*180))-m*x(5))*n*fi*cos((x(3)+x(4))*pi/(2*180)+bt*pi/180)/(4*cos(bt*pi/180));


function [C,Ceq]=rod_constr(x) '分线性约束
C=[0.3*m-x(2)*cos((x(3)+x(4))*pi/(2*180))];
Ceq=[pi*Dw*tan(x(3)*pi/180)-x(2);pi*x(1)*tan(x(4)*pi/180)-x(2)];
这两个函数中的DW没有传入,也就是需要你在函数的输入中加入一个新的参数,用来传递DW就可以了