ncp_sigmoid/Sigmoid函数法/midResult.m

62 lines
1.9 KiB
Mathematica
Raw Normal View History

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)
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>͵<EFBFBD>ʽԼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%<EFBFBD><EFBFBD>дʱ<EFBFBD>2010<EFBFBD><EFBFBD>10<EFBFBD><EFBFBD>
Gap=l'*z-u'*w; %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶
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); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
firstOK=0;
if Gap<accuracy&&max_hx<mismatch&& times==1 %<EFBFBD>жϻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
firstOK=1;
end
%% <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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