再次请教MATLAB约束非线性规划/一M文件的调试

来源:百度知道 编辑:UC知道 时间:2024/06/17 15:02:56
M文件如下,本人是MATLAB菜鸟也是英盲,只好求助大家了,老师催作业了,谢谢各位.
M文件如下:
function jiansuqi
% 两级斜齿轮传动中心距优化设计

% 1---减速器中心距优化设计主程序
% 设计变量的初始值
x0=[4;4;22;19;5];
% 设计变量的下界与上界
lb=[2;3;16;16;4];
ub=[5;6;22;22;6];

% 使用多维约束优化命令fmincon(调用目标函数jsqyh_f和非线性约束函数jsqyh_g)
% 不定义线性不等式约束中设计变量的系数矩阵a=[]和常数项向量b=[]
% 没有等式约束,侧参数:系数矩阵Aeq=[]和常数项向量beq=[]
[x,feval,exitflag]=fmincon(@jsqyh_f,x0,[],[],[],[],lb,ub,@jsqyh_g)
disp ' ******** 两级斜齿轮传动中心距优化设计最优解 ********'
fprintf(1,' 高速级齿轮副模数 Mn1=%3.4f mm\n',x(1))
fprintf(1,' 低速级齿轮副模数 Mn2=%3.4f mm\n',x(2))
fprintf(1,' 高速级小齿轮齿数 z1=%3.4f \n',x(3))
fprintf(1,' 低速级小齿轮齿数 z3=%3.4f \n',x(4))
fprintf(1,' 高速级齿轮副传动比 i1=%3.4f \n',x(5))
fprintf(1,' 减速器中心距 a12=%3.4f mm\n',fn)

% 调用多维约束优化非线性约束函数(jsqyh_g)计算最优点x*的性能约束函数值g=jsqyh_g(x);
g=jsqyh_g(x)
di

你这不都已经做出来了么?一共有三个独立的文件,jsqyh_f.m ,jsqyh_g.m, jiansuqi.m

直接运行jiansuqi.m就应该可以啊~有什么不懂的问我, 把你的问题说清楚一点。。。

我试了一下,你要设置一下:
options=optimset('LargeScale','off');

[x,feval,exitflag]=fmincon(@jsqyh_f,x0,[],[],[],[],lb,ub,@jsqyh_g,options);

我大概知道怎么回事了,函数g里面最后你加一句话:
......
g(7)=x(1)*(x(3)*x(5)+2)-x(2)*x(4)*(1+20/x(5))+25.76*(x(5)^(1/3));

g = -g;
ceq=0;

我认为g应该是负的,否则无法满足优化设定的条件,解不出来。jsqyh_g这个函数要求满足:g < 0, ceq = 0

这样的话你再试一次,结果就出来了!

First-order optimality measure less than options.TolFun and
maximum constraint violation is less than options.TolCon
Active inequalities (to within options.TolCon = 1e-006):
lower upper ineqlin ineqnonlin
1 5
2
3
4

x =

2