![]() |
求高手请教
%优化设计约束问题
%外点罚函数法利用梯度法求极小值 %输入初始值 %a=0.0001; a=1; X=[1;5]; n=0; m=10; c=80; q1=0.0001; q2=0.0001; %u=1; X1=[0;0]; %建立罚函数方程 syms x1 x2 fm=x2^3*((x1-3)^2-9)/(27*3^0.5); g1=x2-x1/3^0.5; g2=-x1+x2/3^0.5; g3=x1+(x2/3^0.5)-6; g4=-x1; g5=-x2; df1=diff(fm,x1); df2=diff(fm,x2); G1=inline(g1); G2=inline(g2); G3=inline(g3); G4=inline(g4); G5=inline(g5); f=inline (fm); df_1=inline(df1); df_2=inline(df2); %tf=((df_1(X(1)))^2+(df_2(X(2)))^2)^0.5; %迭代循环开始 while a>0 n=n+1; %建立外点罚函数方程 if n>=2 m=c*m; end; if G1(X(1),X(2))>0 gm1=(g1)^2; else gm1=0; end; if G2(X(1),X(2))>0 gm2=(g2)^2; else gm2=0; end if G3(X(1),X(2))>0 gm3=(g3)^2; else gm3=0; end; if G4(X(1))>0 gm4=(g4)^2; else gm4=0; end; if G5(X(2))>0 gm5=(g5)^2; else gm5=0; end; QXM=fm+m*(gm1+gm2+gm3+gm4+gm5); qxm=inline(QXM); %建立罚函数梯度方程 dQXM1=diff(QXM,'x1'); dQXM2=diff(QXM,'x2'); dfx=sqrt(dQXM1^2+dQXM2^2); dqxm1=inline(dQXM1); dqxm2=inline(dQXM2); Hdfx=inline(dfx); x1=X(1); x2=X(2); while Hdfx(x1,x2)>q1 n=n+1; nf1=dqxm1(x1,x2); nf2=dqxm2(x1,x2); syms e x1=x1+e*nf1; x2=x2+e*nf2; Ee=qxm(x1,x2); dfe=diff(Ee); e=eval(solve(dfe)); x1=x1+e*nf1; x2=x2+e*nf2; end; X1(1,1)=x1; X1(2,1)=x2; if (((X(1)-X1(1))^2+(X(2)-X1(2))^2 )^0.5)>q1 n=n+1; x1=X1(1,1); x2=X1(2,1); m=c*m; else U=abs((qxm(X(1),X(2))-qxm(X1(1),X1(2)))/qxm(X(1), X(2))); if U>q2 n=n+1; x1=X1(1,1); x2=X1(2,1); m=c*m; else a=-a; end; end; %迭代停止 X=X1; %pause; end; %输出X和y及循环次数n X y=f(X(1),X(2)) n m 本人初学matlab此程序为本人所写但运行的时候提示错误“Error in ==> gt at 18 [varargout{1:nargout}] = builtin('gt', varargin{:}); Error in ==> U9 at 88 end;”不知道是怎么回事,希望高手指点!!!十分感谢 |
回复: 求高手请教
求高手指点,小弟不胜感激!!!
|
所有时间均为北京时间。现在的时间是 05:24。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.