ipmthreephasese/SolveIt.m

63 lines
2.1 KiB
Matlab

function XX=SolveIt(deltF,deltG,Init_L,Init_Z,Init_U,Init_W,deltdeltF,ddh,ddg,deltH,Init_Y,Ly,Lz,ContrlCount,Lw,Lul,Luu,Lx,Balance,Busnum,Loadi)
LxComa=FormLxComa(deltF,deltG,deltH,Init_L,Luu,Lul,Init_Z,Init_Y,Lz,Init_U,Init_W,Lw,Lx);
H=-deltdeltF+ddh;
%t1=diag(Init_L.\Init_Z-Init_U.\Init_W);
t1=diag(Init_Z./Init_L-Init_W./Init_U);
t2=-deltG*( t1 )*deltG';
aa=[
(H+t2),deltH;
deltH',zeros(size(Init_Y,2));
];
yy=[LxComa;-Ly];
%% ƽºâ½Úµãµçѹ²»±ä
t=size(Loadi,1)*2;
aa(t+(Balance-1)*3+1,:)=0;
aa(t+(Balance-1)*3+2,:)=0;
aa(t+(Balance-1)*3+3,:)=0;
aa(:,t+(Balance-1)*3+1)=0;
aa(:,t+(Balance-1)*3+2)=0;
aa(:,t+(Balance-1)*3+3)=0;
%aa(t+Balance,t+Balance)=1;
aa=aa+sparse(t+(Balance-1)*3+1,t+(Balance-1)*3+1,ones(length(Balance),1),ContrlCount+2*Busnum*3,ContrlCount+2*Busnum*3);
aa=aa+sparse(t+(Balance-1)*3+2,t+(Balance-1)*3+2,ones(length(Balance),1),ContrlCount+2*Busnum*3,ContrlCount+2*Busnum*3);
aa=aa+sparse(t+(Balance-1)*3+3,t+(Balance-1)*3+3,ones(length(Balance),1),ContrlCount+2*Busnum*3,ContrlCount+2*Busnum*3);
deltG(t+(Balance-1)*3+1,:)=0;
deltG(t+(Balance-1)*3+2,:)=0;
deltG(t+(Balance-1)*3+3,:)=0;
%%
t=size(Loadi,1)*2+Busnum*3;
aa(t+(Balance-1)*3+1,:)=0;
aa(t+(Balance-1)*3+2,:)=0;
aa(t+(Balance-1)*3+3,:)=0;
aa(:,t+(Balance-1)*3+1)=0;
aa(:,t+(Balance-1)*3+2)=0;
aa(:,t+(Balance-1)*3+3)=0;
%aa(t+Balance,t+Balance)=1;
aa=aa+sparse(t+(Balance-1)*3+1,t+(Balance-1)*3+1,ones(length(Balance),1),ContrlCount+2*Busnum*3,ContrlCount+2*Busnum*3);
aa=aa+sparse(t+(Balance-1)*3+2,t+(Balance-1)*3+2,ones(length(Balance),1),ContrlCount+2*Busnum*3,ContrlCount+2*Busnum*3);
aa=aa+sparse(t+(Balance-1)*3+3,t+(Balance-1)*3+3,ones(length(Balance),1),ContrlCount+2*Busnum*3,ContrlCount+2*Busnum*3);
deltG(t+(Balance-1)*3+1,:)=0;
deltG(t+(Balance-1)*3+2,:)=0;
deltG(t+(Balance-1)*3+3,:)=0;
%%
dxdy=aa\yy;
%% KLU
%spy(aa)
%dxdy = klu(aa,'\',full(yy));
%%
dX=dxdy(1:ContrlCount);
dY=dxdy(ContrlCount+1:ContrlCount+2*Busnum*3);
dL=Lz+deltG'*dX;
dU=-Lw-deltG'*dX;
dZ=-diag(Init_L)\Lul-diag(Init_L)\diag(Init_Z)*dL;
dW=-diag(Init_U)\Luu-diag(Init_U)\diag(Init_W)*dU;
XX=[
dX;
dY;
dZ;
dW;
dL;
dU;
];
end