


D2IMIS_DVDSG Computes 2nd derivatives of current balance w.r.t. V and Sg.
The derivatives can be take with respect to polar or cartesian coordinates
of voltage, depending on the 4th argument.
GSV = D2IMIS_DVDSG(CG, V, LAM)
GSV = D2IMIS_DVDSG(CG, V, LAM, 0)
Returns a matrix containing the partial derivatives w.r.t. voltage angle
and magnitude of the product of a vector LAM with the 1st partial
derivatives of the real and reactive power generation.
GSV = D2IMIS_DVDSG(CG, V, LAM, 1)
Returns a matrix containing the partial derivatives w.r.t. real and
imaginary parts of voltage of the product of a vector LAM with the 1st
partial derivatives of the real and reactive power generation.
Takes the generator connection matrix, complex voltage vector V and
nb x 1 vector of multipliers LAM. Output matrices are sparse.
Examples:
Cg = sparse(gen(:, GEN_BUS), 1:ng, -, nb, ng);
Gsv = d2Imis_dVdSg(Cg, V, lam);
Here the output matrix corresponds to:
Gsv = [ Gpa Gpv;
Gqa Gqv ];
Gpa = d/dVa (dImis_dPg.' * lam)
Gpv = d/dVm (dImis_dPg.' * lam)
Gqa = d/dVa (dImis_dQg.' * lam)
Gqv = d/dVm (dImis_dQg.' * lam)
[Grr, Gri, Gir, Gii] = d2Imis_dVdSg(Cg, V, lam, 1);
Here the output matrices correspond to:
Gsv = [ Gpr Gpi;
Gqr Gqi ];
Gpr = d/dVr (dImis_dPg.' * lam)
Gpi = d/dVi (dImis_dPg.' * lam)
Gqr = d/dVr (dImis_dQg.' * lam)
Gqi = d/dVi (dImis_dQg.' * lam)
For more details on the derivations behind the derivative code used
in MATPOWER, see:
[TN2] R. D. Zimmerman, "AC Power Flows, Generalized OPF Costs and
their Derivatives using Complex Matrix Notation", MATPOWER
Technical Note 2, February 2010. [Online]. Available:
https://matpower.org/docs/TN2-OPF-Derivatives.pdf
doi: 10.5281/zenodo.3237866
[TN3] B. Sereeter and R. D. Zimmerman, "Addendum to AC Power Flows and
their Derivatives using Complex Matrix Notation: Nodal Current
Balance," MATPOWER Technical Note 3, April 2018. [Online].
Available: https://matpower.org/docs/TN3-More-OPF-Derivatives.pdf
doi: 10.5281/zenodo.3237900
[TN4] B. Sereeter and R. D. Zimmerman, "AC Power Flows and their
Derivatives using Complex Matrix Notation and Cartesian
Coordinate Voltages," MATPOWER Technical Note 4, April 2018.
[Online]. Available: https://matpower.org/docs/TN4-OPF-Derivatives-Cartesian.pdf
doi: 10.5281/zenodo.3237909

0001 function Gsv = d2Imis_dVdSg(Cg, V, lam, vcart) 0002 %D2IMIS_DVDSG Computes 2nd derivatives of current balance w.r.t. V and Sg. 0003 % 0004 % The derivatives can be take with respect to polar or cartesian coordinates 0005 % of voltage, depending on the 4th argument. 0006 % 0007 % GSV = D2IMIS_DVDSG(CG, V, LAM) 0008 % GSV = D2IMIS_DVDSG(CG, V, LAM, 0) 0009 % 0010 % Returns a matrix containing the partial derivatives w.r.t. voltage angle 0011 % and magnitude of the product of a vector LAM with the 1st partial 0012 % derivatives of the real and reactive power generation. 0013 % 0014 % GSV = D2IMIS_DVDSG(CG, V, LAM, 1) 0015 % 0016 % Returns a matrix containing the partial derivatives w.r.t. real and 0017 % imaginary parts of voltage of the product of a vector LAM with the 1st 0018 % partial derivatives of the real and reactive power generation. 0019 % 0020 % Takes the generator connection matrix, complex voltage vector V and 0021 % nb x 1 vector of multipliers LAM. Output matrices are sparse. 0022 % 0023 % Examples: 0024 % Cg = sparse(gen(:, GEN_BUS), 1:ng, -, nb, ng); 0025 % Gsv = d2Imis_dVdSg(Cg, V, lam); 0026 % 0027 % Here the output matrix corresponds to: 0028 % Gsv = [ Gpa Gpv; 0029 % Gqa Gqv ]; 0030 % Gpa = d/dVa (dImis_dPg.' * lam) 0031 % Gpv = d/dVm (dImis_dPg.' * lam) 0032 % Gqa = d/dVa (dImis_dQg.' * lam) 0033 % Gqv = d/dVm (dImis_dQg.' * lam) 0034 % 0035 % [Grr, Gri, Gir, Gii] = d2Imis_dVdSg(Cg, V, lam, 1); 0036 % 0037 % Here the output matrices correspond to: 0038 % Gsv = [ Gpr Gpi; 0039 % Gqr Gqi ]; 0040 % Gpr = d/dVr (dImis_dPg.' * lam) 0041 % Gpi = d/dVi (dImis_dPg.' * lam) 0042 % Gqr = d/dVr (dImis_dQg.' * lam) 0043 % Gqi = d/dVi (dImis_dQg.' * lam) 0044 % 0045 % For more details on the derivations behind the derivative code used 0046 % in MATPOWER, see: 0047 % 0048 % [TN2] R. D. Zimmerman, "AC Power Flows, Generalized OPF Costs and 0049 % their Derivatives using Complex Matrix Notation", MATPOWER 0050 % Technical Note 2, February 2010. [Online]. Available: 0051 % https://matpower.org/docs/TN2-OPF-Derivatives.pdf 0052 % doi: 10.5281/zenodo.3237866 0053 % [TN3] B. Sereeter and R. D. Zimmerman, "Addendum to AC Power Flows and 0054 % their Derivatives using Complex Matrix Notation: Nodal Current 0055 % Balance," MATPOWER Technical Note 3, April 2018. [Online]. 0056 % Available: https://matpower.org/docs/TN3-More-OPF-Derivatives.pdf 0057 % doi: 10.5281/zenodo.3237900 0058 % [TN4] B. Sereeter and R. D. Zimmerman, "AC Power Flows and their 0059 % Derivatives using Complex Matrix Notation and Cartesian 0060 % Coordinate Voltages," MATPOWER Technical Note 4, April 2018. 0061 % [Online]. Available: https://matpower.org/docs/TN4-OPF-Derivatives-Cartesian.pdf 0062 % doi: 10.5281/zenodo.3237909 0063 0064 % MATPOWER 0065 % Copyright (c) 2019, Power Systems Engineering Research Center (PSERC) 0066 % by Baljinnyam Sereeter, Delft University of Technology 0067 % and Ray Zimmerman, PSERC Cornell 0068 % 0069 % This file is part of MATPOWER. 0070 % Covered by the 3-clause BSD License (see LICENSE file for details). 0071 % See https://matpower.org for more info. 0072 0073 %% default input args 0074 if nargin < 4 0075 vcart = 0; %% default to polar coordinates 0076 end 0077 0078 nb = length(V); 0079 0080 if vcart 0081 D = Cg' * sparse(1:nb,1:nb, lam./conj(V.^2), nb, nb); 0082 0083 G_Pg_Vr = D; 0084 G_Pg_Vi = -1j * D; 0085 G_Qg_Vr = G_Pg_Vi; 0086 G_Qg_Vi = -D; 0087 0088 Gsv = [ G_Pg_Vr G_Pg_Vi; 0089 G_Qg_Vr G_Qg_Vi ]; 0090 else 0091 D = sparse(1:nb, 1:nb, 1./abs(V), nb, nb); 0092 E = sparse(1:nb, 1:nb, lam./conj(V), nb, nb); 0093 K = Cg' * E; 0094 L = K * D; 0095 0096 G_Pg_Va = -1j * K; 0097 G_Pg_Vm = L; 0098 G_Qg_Va = -K; 0099 G_Qg_Vm = -1j * L; 0100 0101 Gsv = [ G_Pg_Va G_Pg_Vm; 0102 G_Qg_Va G_Qg_Vm ]; 0103 end