ncp_sigmoid/Sigmoid函数法/midResult.m

62 lines
1.9 KiB
Matlab
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function [H1,N1,diagE,diagF,hx,Gap,max_hx,fx,Pg,Qg,xz1,dmaxOut1,xz2,dmaxOut2,xz3,dmaxOut3,xz4,dmaxOut4,PGR]=midResult(nodeNum,pgNode,opfGoal,z,l,u,w,...
Pg,Qg,e,f,G,B,a,b,c,PG,Pd,Qd,k,xz1,dmaxOut1,xz2,dmaxOut2,xz3,dmaxOut3,xz4,dmaxOut4,times,accuracy,mismatch)
%程序功能:计算每次迭代后的目标函数值和等式约束的最大不平衡量,并根据每步迭代结果修正光滑参数
%编写时间2010年10月
Gap=l'*z-u'*w; %计算互补间隙
PGR=PG;
if(opfGoal==2)
sumP=sum(Pg);
sumPd=sum(Pd);
fx=sumP-sumPd;
else if(opfGoal==1)
fx=sum(a(pgNode).*PGR(pgNode).*PGR(pgNode)+b(pgNode).*PGR(pgNode)+c(pgNode));
else if(opfGoal==3)
EE=e*ones(1,nodeNum);
FF=f*ones(1,nodeNum);
fx=-0.5*sum(sum(G.*((EE-EE').^2+(FF-FF').^2),2));
else if(opfGoal==4)
EE=e*ones(1,nodeNum);
FF=f*ones(1,nodeNum);
fx=0.5*sum(sum(B.*((EE-EE').^2+(FF-FF').^2),2));
end
end
end
end
H1=G*e-B*f;
N1=G*f+B*e;
diagE=sparse(1:nodeNum,1:nodeNum,e,nodeNum,nodeNum);
diagF=sparse(1:nodeNum,1:nodeNum,f,nodeNum,nodeNum);
P=Pg-Pd;
Q=Qg-Qd;
dP=P-diagE*H1-diagF*N1;
dQ=Q-diagF*H1+diagE*N1;
hx=[dP;dQ];
fx=full(fx);
max_hx=full(max(abs(hx)));
fprintf('%4.0f %4.4e %4.4e %7.6f\n',k,Gap,max_hx,fx); %输出每次迭代结果
firstOK=0;
if Gap<accuracy&&max_hx<mismatch&& times==1 %判断互补间隙和最大不平衡量是否达到精度
firstOK=1;
end
%% 保留每次迭代的互补间隙和最大不平衡量
if times==1
xz1=[xz1 k];
dmaxOut1=[dmaxOut1 Gap];
xz3=[xz3 k];
dmaxOut3=[dmaxOut3 max_hx];
end
if times==2
if firstOK==1
xz1=[xz1 k];
dmaxOut1=[dmaxOut1 Gap];
xz3=[xz3 k];
dmaxOut3=[dmaxOut3 max_hx];
else
xz2=[xz2 k];
dmaxOut2=[dmaxOut2 Gap];
xz4=[xz4 k];
dmaxOut4=[dmaxOut4 max_hx];
end
end