ncp_sigmoid/NCP函数法/midResult.m

125 lines
4.9 KiB
Mathematica
Raw Normal View History

function [mut,mub,dNCPT,dNCPT_dt,d2NCPT_dt2,dT_Zt,transGmut,transBmut,dNCPcap,dNCP_dcap,d2NCP_dcap2,capBi_dBci,H1,N1,diagE,diagF,hx,Gap,max_hx,fx,...
Pg,Qg,xz1,dmaxOut1,xz2,dmaxOut2,xz3,dmaxOut3,xz4,dmaxOut4,PGR,Tn,kt0,capKn,q0,Tn1,capKn1,T,G]=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,mut,mub,oneTrans,oneCap,para3,accuracy,T,capK,transKmin,transKmax,...
capKmin,capBi,mu,transNum,transG,transB,Tn,Tn1,capKn,capKn1,kt0,q0,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>11<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;
firstOK=0;
hx=[dP;dQ];
tmpmax_hx=max(abs(hx));
if Gap<accuracy&&tmpmax_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;
times=2;
maxTap=5; %<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>λ
K=1./T;
Kmax=1./transKmin;
Kmin=1./transKmax;
kt0=(Kmax-Kmin)/(maxTap-1); %<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD>
Kn=fix((K-Kmin)./kt0).*kt0+Kmin; %<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>
Kn1=Kn+kt0;
Tn=1./Kn1;
Tn1=1./Kn;
q0=1; %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ĵ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD>
capQmin=capKmin.*capBi;
capKn=fix((capK-capQmin)./capBi).*capBi+capQmin; %<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>ɢֵ
capKn1=capKn+capBi;
end
if times==2
%% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t
tmpmu=para3;
tmpmut=mut;
tmpmub=mub;
Ezu=exp(-(T-Tn)./tmpmut);
Ezu_1=exp(-(Tn1-T)./tmpmut);
dNCPT=-tmpmut.*log(Ezu+Ezu_1); %<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ezbu=exp((capKn-capK)./tmpmub);
Ezbu_1=exp((capK-capKn1)./tmpmub);
dNCPcap=-tmpmub.*log(Ezbu+Ezbu_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><EFBFBD><EFBFBD>
dNCP=[dNCPT;dNCPcap];%ֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
oneTC=[oneTrans;oneCap];
mutb=[mut;mub];
mutb=min(max(mu,max(abs(dNCP)))*oneTC,tmpmu*mutb.*oneTC); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mut=mutb(1:transNum);
mub=mutb(transNum+1:end);
%% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>
Ezu=exp(-(T-Tn)./mut);
Ezu_1=exp(-(Tn1-T)./mut);
dNCPT=-mut.*log(Ezu+Ezu_1); %<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dT_Zt=1;
dNCPT_dt=(Ezu-Ezu_1)./(Ezu+Ezu_1); %<EFBFBD><EFBFBD><EFBFBD>ۺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tij<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
d2NCPT_dt2=-(oneTrans-dNCPT_dt.^2)./mut; %<EFBFBD><EFBFBD><EFBFBD>ۺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>,ԭ<EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD>ʽ<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>d2NCPT_dt2=-(oneTrans+dNCPT_dt.^2)./mut;3<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
transGmut=transG;
transBmut=transB;
Ezbu=exp((capKn-capK)./mub);
Ezbu_1=exp((capK-capKn1)./mub);
dNCPcap=-mub.*log(Ezbu+Ezbu_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><EFBFBD><EFBFBD>
dcapK_Zb=1;
dNCP_dcap=(Ezbu-Ezbu_1)./(Ezbu+Ezbu_1); %<EFBFBD><EFBFBD><EFBFBD>ۺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>capK<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
d2NCP_dcap2=-(oneCap-dNCP_dcap.^2)./mub; %<EFBFBD><EFBFBD><EFBFBD>ۺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>capK<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
capBi_dBci=capBi.*dcapK_Zb;
end
if times==1
dNCPT=[];dNCPT_dt=[];d2NCPT_dt2=[];dT_Zt=[];transGmut=[];transBmut=[];dNCPcap=[];dNCP_dcap=[];d2NCP_dcap2=[];capBi_dBci=[];
end
hx=[dP;dQ;dNCPT;dNCPcap];
fx=full(fx);
max_hx=full(max(abs(hx)));
if firstOK==1
max_hx=full(tmpmax_hx);
end
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>
%% <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];
firstOK=0;
else
xz2=[xz2 k];
dmaxOut2=[dmaxOut2 Gap];
xz4=[xz4 k];
dmaxOut4=[dmaxOut4 max_hx];
end
end