function [HSB,dhx,dgx,dgxT,N1,H1,diagE,diagF,GIJ,BIJ,L1,U1,LZ,UW]=formHSB(nodeNum,balNode,balNum,opfGoal,lineNum,transNum,lineI,lineJ,... transI,transJ,T,transG,transB,pgNode,pvNode,G,B,e,f,pgNum,pvNum,pgvNum,xNum,capNum,capI,a,m,r,l,u,z,w,y,H1,N1,diagE,diagF) %程序功能:预计算过程,形成修正方程系数矩阵 %编写时间:2010年11月 %% 形成等式约束雅可比矩阵 ef1=e(transI).*e(transJ)+f(transI).*f(transJ); ef2=e(transI).*f(transJ)-e(transJ).*f(transI); ef3=e(transI).*e(transI)+f(transI).*f(transI); ef1G=ef1.*transG; ef1B=ef1.*transB; ef2G=ef2.*transG; ef2B=ef2.*transB; dhPTi=-ef1G+ef2B+2*ef3.*transG.*T; dhPTj=-ef1G-ef2B; dhPT=sparse(1:transNum,transI,dhPTi,transNum,nodeNum)+sparse(1:transNum,transJ,dhPTj,transNum,nodeNum);%有功平衡方程P对变压器变比求偏导 dhQTi=ef1B+ef2G-2*ef3.*transB.*T; dhQTj=ef1B-ef2G; dhQT=sparse(1:transNum,transI,dhQTi,transNum,nodeNum)+sparse(1:transNum,transJ,dhQTj,transNum,nodeNum);%无功平衡方程Q对变压器变比求偏导 dhP=sparse(1:pgNum,pgNode,ones(pgNum,1),pgNum,m); dhQ1=sparse(1:pvNum,pvNode,ones(pvNum,1),pvNum,nodeNum); dhQ=[sparse(pvNum,nodeNum) dhQ1]; dhcapK1=sparse(1:capNum,capI,(e(capI).^2+f(capI).^2),capNum,nodeNum); %功率平衡方程对电容电抗器组数求偏导 dhcapK=[sparse(capNum,nodeNum) dhcapK1]; %功率方程雅可比矩阵 deG=diagE*G; dfB=diagF*B; deB=diagE*B; dfG=diagF*G; dH1=sparse(1:nodeNum,1:nodeNum,H1,nodeNum,nodeNum); dN1=sparse(1:nodeNum,1:nodeNum,N1,nodeNum,nodeNum); Hij=-dH1-deG-dfB; Nij=-dN1+deB-dfG; Jij=dN1-dfG+deB; Lij=-dH1+dfB+deG; %合并形成功率方程雅可比矩阵 dhJacb=[Hij Nij;Jij Lij]'; %合并形成等式约束雅可比矩阵h(x) dhx=[dhPT dhQT;dhP;dhQ;dhcapK;dhJacb]; %% 形成不等式约束雅可比矩阵▽g(x) dgT1=sparse(1:transNum,1:transNum,ones(transNum,1),transNum,r-lineNum); dglT=(e(transI).^2+f(transI).^2-e(transI).*e(transJ)-f(transI).*f(transJ)).*transG+(e(transI).*f(transJ)-e(transJ).*f(transI)).*transB; dgT2=sparse(1:transNum,lineNum-transNum+1:lineNum,dglT,transNum,lineNum); dgT=[dgT1 dgT2]; %所有不等式对变比求导的模块 dgP=sparse(1:pgNum,transNum+1:transNum+pgNum,ones(pgNum,1),pgNum,r); %所有不等式约束对PG求导的模块 dgQ=sparse(1:pvNum,transNum+pgNum+1:transNum+pgvNum,ones(pvNum,1),pvNum,r); %所有不等式约束对QR求导的模块 dgcapK=sparse(1:capNum,transNum+pgvNum+1:transNum+pgvNum+capNum,ones(capNum,1),capNum,r);%所有不等式约束对capK求导的模块 dgve=2*diagE; dgvf=2*diagF; sizeG=size(G); GIJ=G(sub2ind(sizeG,lineI,lineJ)); BIJ=B(sub2ind(sizeG,lineI,lineJ)); dgleI=(2*e(lineI)-e(lineJ)).*GIJ+f(lineJ).*BIJ; dgleJ=-e(lineI).*GIJ-f(lineI).*BIJ; dglfI=(2*f(lineI)-f(lineJ)).*GIJ-e(lineJ).*BIJ; dglfJ=-f(lineI).*GIJ+e(lineI).*BIJ; dgle=sparse(lineI,(1:lineNum),dgleI,nodeNum,lineNum)+sparse(lineJ,(1:lineNum),dgleJ,nodeNum,lineNum); dglf=sparse(lineI,(1:lineNum),dglfI,nodeNum,lineNum)+sparse(lineJ,(1:lineNum),dglfJ,nodeNum,lineNum); dg0=sparse(m,transNum+pgvNum+capNum); dgvl=[dgve dgle;dgvf dglf]; dgef=[dg0 dgvl]; %所有不等式约束对电压实部、虚部求偏导的模块 dgx=[dgT;dgP;dgQ;dgcapK;dgef]; %不等式约束雅克比矩阵 %% 形成对角阵 Z=sparse(1:r,1:r,z,r,r); W=sparse(1:r,1:r,w,r,r); L1=sparse(1:r,1:r,1./l,r,r); U1=sparse(1:r,1:r,1./u,r,r); LZ=L1*Z; UW=U1*W; %% 形成海森伯矩阵 %目标函数的海森伯矩阵▽2f(x) if(opfGoal==2) HSdfx=sparse(xNum,xNum); else if(opfGoal==1) HSdfx=sparse(transNum+1:transNum+pgNum,transNum+1:transNum+pgNum,2*a(pgNode),xNum,xNum);%仅目标函数对PG求偏导处的对角元为非零元素,其他都为0 else if(opfGoal==3) d2ftei=-2*transG.*(e(transI)-e(transJ)); d2ftej=-d2ftei; d2ftfi=-2*transG.*(f(transI)-f(transJ)); d2ftfj=-d2ftfi; d2fte=sparse(1:transNum,transI,d2ftei,transNum,nodeNum)+sparse(1:transNum,transJ,d2ftej,transNum,nodeNum); d2ftf=sparse(1:transNum,transI,d2ftfi,transNum,nodeNum)+sparse(1:transNum,transJ,d2ftfj,transNum,nodeNum); d2fT0=sparse(transNum,transNum+pgvNum+capNum); d2fT=[d2fT0 d2fte d2ftf]; d2fPGQR=sparse(pgvNum,xNum); d2fcapK=sparse(capNum,xNum); d2fee=2*(G-sparse(1:nodeNum,1:nodeNum,sum(G,2),nodeNum,nodeNum)); d2fff=d2fee; zero_nodeNum=sparse(nodeNum,nodeNum); d2f_ef_ef=[d2fee zero_nodeNum;zero_nodeNum d2fff]; d2efT=[d2fte d2ftf]'; d2f_ef=[d2efT sparse(2*nodeNum,pgvNum+capNum) d2f_ef_ef]; HSdfx=[d2fT;d2fPGQR;d2fcapK;d2f_ef]; else if(opfGoal==4) d2ftei=2*transB.*(e(transI)-e(transJ)); d2ftej=-d2ftei; d2ftfi=2*transB.*(f(transI)-f(transJ)); d2ftfj=-d2ftfi; d2fte=sparse(1:transNum,transI,d2ftei,transNum,nodeNum)+sparse(1:transNum,transJ,d2ftej,transNum,nodeNum); d2ftf=sparse(1:transNum,transI,d2ftfi,transNum,nodeNum)+sparse(1:transNum,transJ,d2ftfj,transNum,nodeNum); d2fT0=sparse(transNum,transNum+pgvNum+capNum); d2fT=[d2fT0 d2fte d2ftf]; d2fPGQR=sparse(pgvNum,xNum); d2fcapK=sparse(capNum,xNum); d2fee=-2*(B-sparse(1:nodeNum,1:nodeNum,sum(B,2),nodeNum,nodeNum)); d2fff=d2fee; zero_nodeNum=sparse(nodeNum,nodeNum); d2f_ef_ef=[d2fee zero_nodeNum;zero_nodeNum d2fff]; d2efT=[d2fte d2ftf]'; d2f_ef=[d2efT sparse(2*nodeNum,pgvNum+capNum) d2f_ef_ef]; HSdfx=[d2fT;d2fPGQR;d2fcapK;d2f_ef]; end end end end %等式约束海森伯矩阵与拉格朗日乘子y的乘积▽2h(x)*y y1=y(1:nodeNum,1); y2=y(nodeNum+1:2*nodeNum,1); dhT2=2*ef3.*(transG.*y1(transI)-transB.*y2(transI)); %功率方程对变压器变比求二次偏导所得的列向量 HSdhT=sparse(1:transNum,1:transNum,dhT2,transNum+pgvNum+capNum,transNum+pgvNum+capNum); eiG=e(transI).*transG; ejG=e(transJ).*transG; eiB=e(transI).*transB; ejB=e(transJ).*transB; fiG=f(transI).*transG; fjG=f(transJ).*transG; fiB=f(transI).*transB; fjB=f(transJ).*transB; ejG_fjB=ejG-fjB; ejGfjB=ejG+fjB; fjGejB=fjG+ejB; ejB_fjG=ejB-fjG; eiGfiB=eiG+fiB; eiG_fiB=eiG-fiB; eiB_fiG=eiB-fiG; fiGeiB=fiG+eiB; dP2_ei_t=(4*eiG.*T-ejG_fjB).*y1(transI)-ejGfjB.*y1(transJ); dP2_ej_t=-eiGfiB.*y1(transI)-eiG_fiB.*y1(transJ); dQ2_ei_t=(-4*eiB.*T+fjGejB).*y2(transI)+ejB_fjG.*y2(transJ); dQ2_ej_t=eiB_fiG.*y2(transI)+fiGeiB.*y2(transJ); HSdh_et=sparse(1:transNum,transI,dP2_ei_t+dQ2_ei_t,transNum,nodeNum)+sparse(1:transNum,transJ,dP2_ej_t+dQ2_ej_t,transNum,nodeNum);%功率方程先对变比求偏导,再对电压实部求偏导模块 dP2_fi_t=(4*fiG.*T-fjGejB).*y1(transI)+ejB_fjG.*y1(transJ); dP2_fj_t=eiB_fiG.*y1(transI)-fiGeiB.*y1(transJ); dQ2_fi_t=(-4*fiB.*T-ejG_fjB).*y2(transI)+ejGfjB.*y2(transJ); dQ2_fj_t=eiGfiB.*y2(transI)-eiG_fiB.*y2(transJ); HSdh_ft=sparse(1:transNum,transI,dP2_fi_t+dQ2_fi_t,transNum,nodeNum)+sparse(1:transNum,transJ,dP2_fj_t+dQ2_fj_t,transNum,nodeNum);%功率方程先对变比求偏导,再对电压虚部求偏导模块 HSdh_eft=[HSdh_et HSdh_ft]; HSdh_tef=HSdh_eft'; HSdhPQ=sparse(pgvNum,2*nodeNum); %功率方程先对PG、QR求偏导,再对其他变量求偏导的部分 d2hcap_e=sparse(1:capNum,capI,2*e(capI).*y2(capI),capNum,nodeNum); %功率方程先对capK求偏导,再对e求偏导的部分 d2hcap_f=sparse(1:capNum,capI,2*f(capI).*y2(capI),capNum,nodeNum); %功率方程先对capK求偏导,再对f求偏导的部分 HSdhcap_ef=[d2hcap_e d2hcap_f]; d2htPQ_ef=[HSdh_eft;HSdhPQ;HSdhcap_ef]; HSdhtPQ=[HSdhT d2htPQ_ef]; HSdhx1=sparse(m,pgvNum); %潮流方程海森矩阵 diagy1=sparse(1:nodeNum,1:nodeNum,y1,nodeNum,nodeNum); diagy2=sparse(1:nodeNum,1:nodeNum,y2,nodeNum,nodeNum); HSdhey=-diagy1*G+diagy2*B+(-G*diagy1+B*diagy2); HSdhefy=diagy1*B+diagy2*G-(B*diagy1+G*diagy2); HSdhx2=[HSdhey HSdhefy;HSdhefy' HSdhey]; HSdhx=[HSdhtPQ;HSdh_tef HSdhx1 HSdhcap_ef' HSdhx2]; %形成不等式约束二阶偏导的矩阵▽2g(x)*(z+w) ZWcl=z(transNum+pgvNum+capNum+nodeNum+1:end)+w(transNum+pgvNum+capNum+nodeNum+1:end); ZWv=z(transNum+pgvNum+capNum+1:transNum+pgvNum+capNum+nodeNum)+w(transNum+pgvNum+capNum+1:transNum+pgvNum+capNum+nodeNum); dgeiT=((2*e(transI)-e(transJ)).*transG+f(transJ).*transB).*ZWcl(lineNum-transNum+1:end); dgejT=(-e(transI).*transG-f(transI).*transB).*ZWcl(lineNum-transNum+1:end); dgeT=sparse(1:transNum,transI,dgeiT,transNum,nodeNum)+sparse(1:transNum,transJ,dgejT,transNum,nodeNum);%不等式约束先对变比求偏导,再对e求偏导的模块 dgfiT=((2*f(transI)-f(transJ)).*transG-e(transJ).*transB).*ZWcl(lineNum-transNum+1:end); dgfjT=(-f(transI).*transG+e(transI).*transB).*ZWcl(lineNum-transNum+1:end); dgfT=sparse(1:transNum,transI,dgfiT,transNum,nodeNum)+sparse(1:transNum,transJ,dgfjT,transNum,nodeNum);%不等式约束先对变比求偏导,再对f求偏导的模块 HSdgefT=[dgeT dgfT]; HSdgT=[sparse(transNum,transNum+pgvNum+capNum) HSdgefT]; HSdgee=sparse(lineI,lineI,2*GIJ.*ZWcl,nodeNum,nodeNum)-sparse(lineI,lineJ,GIJ.*ZWcl,nodeNum,nodeNum)... -sparse(lineJ,lineI,GIJ.*ZWcl,nodeNum,nodeNum)+sparse(1:nodeNum,1:nodeNum,2*ZWv,nodeNum,nodeNum); HSdgff=HSdgee; HSdgef=sparse(lineI,lineJ,BIJ.*ZWcl,nodeNum,nodeNum)-sparse(lineJ,lineI,BIJ.*ZWcl,nodeNum,nodeNum); HSdgfe=HSdgef'; HSdgx1=[HSdgee HSdgef;HSdgfe HSdgff]; %所有不等式约束对e、f求二次偏导模块 HSdgxtPQ_0=sparse(pgvNum+capNum,xNum); HSdgef_0=[HSdgefT' sparse(2*nodeNum,pgvNum+capNum)]; HSdgx=[HSdgT;HSdgxtPQ_0;HSdgef_0 HSdgx1]; %合成不等式约束海森矩阵 %求和形成H(.)矩阵. dgxT=dgx'; %求dgx的转置 MULdgx=dgx*(UW-LZ)*dgxT; H=HSdhx+HSdgx-HSdfx+MULdgx; %求和形成H(.)矩阵. %% 根据以上所求的各个矩阵合成海森伯矩阵 HSB0=sparse(m,m); HSB=[H dhx;dhx' HSB0]; balN=transNum+pgvNum+capNum+nodeNum+balNode; HSB(balN,:)=0; %保持平衡节点电压虚部不变,始终为0,即将海森矩阵中平衡节点虚部所对应的行列元素置0,对角元素置1 HSB(:,balN)=0; HSB_balN=sub2ind(size(HSB),balN,balN); HSB(HSB_balN)=ones(balNum,1); balN1=transNum+pgvNum+capNum+balNode; HSB(balN1,:)=0; %保持平衡节点电压实部不变,始终为0,即将海森矩阵中平衡节点实部所对应的行列元素置0,对角元素置1 HSB(:,balN1)=0; HSB_balN1=sub2ind(size(HSB),balN1,balN1); HSB(HSB_balN1)=ones(balNum,1); HSB=sparse(HSB);