El código es el siguiente:
Código:
procedure ModificarJacobianaConTRFS(var Jacobiana:TRealMatriz;Y:TVariantMatriz;Vi,Di:TRealVector;var TapAnterior:Double);
var IndiceTRFs:TIntegerArray;
vectorEcuacionTRF:TRealVector;
i,j,NumBarraReg,NumBarraNR,NumeroBarraPosTap:integer;
Vk,Vm,Ykm,Ykk,Ykm2,Ymm:Variant;
dPmDTk,dPkDTk,dQmDTk,dQkDTk,Nkm,Lmk2,Lkm,Nmk,Lmk,Radio,Theta,Radio1,Theta1,Tap2:Double;
puta:integer;
begin
IndiceTRFs:=BuscarIndicesTRFs();
for j:=0 to length(IndiceTRFs)-1 do
begin
Setlength(VectorEcuacionTRF,Length(jacobiana));
with form2.Components[IndiceTRFs[j]] as TTransformador do
begin
Tap2:=(form2.Components[IndiceTRFs[j]] as TTransformador).Tap;
NumBarraReg:=BuscarNroDeBarraDadoUsrNumBarra(NumeroBarraARegular);
NumBarraNR:=BuscarNroDeBarraDadoUsrNumBarra(NumeroBarraNoRegulada);
NumeroBarraPosTap:=BuscarNroDeBarraDadoUsrNumBarra(NumeroBarraLadoTap);
Vk:=VarcomplexCreate(TensionARegular,Di[NumBarraReg]);
Vm:=VarcomplexCreate(Vi[NumBarraNR],Di[NumBarraNR]);
Ykm:=Admy;
Nmk:=(Vm*Ykm*conjugado(Vk)).Real;
Lmk:=(Vm*Ykm*conjugado(Vk)).imaginary;
Nkm:=(Vk*Ykm*conjugado(Vm)).Real;
Lkm:=(Vk*Ykm*conjugado(Vm)).imaginary;
if NumBarraReg = NumeroBarraPosTap then
begin
DPkDTk:=Nkm-2*Tap*TensionARegular*TensionARegular*Ykm.real;
DQkDTk:=Lkm+2*Tap*TensionARegular*TensionARegular*(Ykm.Imaginary);
DPmDTk:=Nmk;
DQmDTk:=Lmk;
Y[NumBarraReg][NumBarraReg]:=Y[NumBarraReg][NumBarraReg]+(Tap*Tap*Ykm)-(TapAnterior*TapAnterior*Ykm);
Y[NumBarraNR][NumBarraReg]:=-Tap*Ykm;
Y[NumBarraReg][NumBarraNR]:=-Tap*Ykm;
end
else
begin
DPmDTk:=Nmk-2*Tap*Vi[NumBarraNR]*Vi[NumBarraNR]*Ykm.Real;
DQmDTk:=Lmk+2*Tap*Vi[NumBarraNR]*Vi[NumBarraNR]*(Ykm.Imaginary);
DPkDTk:=Nkm;
DQkDTk:=Lkm;
Y[NumBarraNR][NumBarraNR]:=Y[NumBarraNR][NumBarraNR]+(Tap*Tap*Ykm)-(TapAnterior*TapAnterior*Ykm);
Y[NumBarraNR][NumBarraReg]:=-Tap*Ykm;
Y[NumBarraReg][NumBarraNR]:=-Tap*Ykm;
end;
TapAnterior:=Tap;
end;
for i:=0 to NroDeBarras-2 do
begin
vectorEcuacionTRF[i]:=0;
if (NumBarraReg-1)= i then
begin
vectorEcuacionTRF[i]:=DPkDTk;
vectorEcuacionTRF[i+NroDeBarras-1]:=DQkDTk;
end;
if (NumBarraNR-1)= i then
begin
vectorEcuacionTRF[i]:=DPmDTk;
vectorEcuacionTRF[i+NroDeBarras-1]:=DQmDTk;
end;
end;
for i:=0 to NroDeBarras-2 do
begin
Jacobiana[i][NumBarraReg-1]:=vectorEcuacionTRF[i];
end;
end;
end;