D2ASBR_DV2 Computes 2nd derivatives of |complex power flow|^2 w.r.t. V. [HAA, HAV, HVA, HVV] = D2ASBR_DV2(DSBR_DVA, DSBR_DVM, SBR, CBR, YBR, V, LAM) returns 4 matrices 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 square of the magnitude of branch complex power flows. Takes sparse first derivative matrices of complex flow, complex flow vector, sparse connection matrix CBR, sparse branch admittance matrix YBR, voltage vector V and nl x 1 vector of multipliers LAM. Output matrices are sparse. Example: f = branch(:, F_BUS); Cf = sparse(1:nl, f, ones(nl, 1), nl, nb); [Ybus, Yf, Yt] = makeYbus(baseMVA, bus, branch); [dSf_dVa, dSf_dVm, dSt_dVa, dSt_dVm, Sf, St] = ... dSbr_dV(branch, Yf, Yt, V); Cbr = Cf; Ybr = Yf; dSbr_dVa = dSf_dVa; dSbr_dVm = dSf_dVm; Sbr = Sf; [Haa, Hav, Hva, Hvv] = ... d2ASbr_dV2(dSbr_dVa, dSbr_dVm, Sbr, Cbr, Ybr, V, lam); Here the output matrices correspond to: Haa = (d/dVa (dASbr_dVa.')) * lam Hav = (d/dVm (dASbr_dVa.')) * lam Hva = (d/dVa (dASbr_dVm.')) * lam Hvv = (d/dVm (dASbr_dVm.')) * lam See also DSBR_DV. For more details on the derivations behind the derivative code used in MATPOWER information, see: [TN2] R. D. Zimmerman, "AC Power Flows, Generalized OPF Costs and their Derivatives using Complex Matrix Notation", MATPOWER Technical Note 2, February 2010. http://www.pserc.cornell.edu/matpower/TN2-OPF-Derivatives.pdf
0001 function [Haa, Hav, Hva, Hvv] = ... 0002 d2ASbr_dV2(dSbr_dVa, dSbr_dVm, Sbr, Cbr, Ybr, V, lam) 0003 %D2ASBR_DV2 Computes 2nd derivatives of |complex power flow|^2 w.r.t. V. 0004 % [HAA, HAV, HVA, HVV] = D2ASBR_DV2(DSBR_DVA, DSBR_DVM, SBR, CBR, YBR, V, LAM) 0005 % returns 4 matrices containing the partial derivatives w.r.t. voltage 0006 % angle and magnitude of the product of a vector LAM with the 1st partial 0007 % derivatives of the square of the magnitude of branch complex power flows. 0008 % Takes sparse first derivative matrices of complex flow, complex flow 0009 % vector, sparse connection matrix CBR, sparse branch admittance matrix YBR, 0010 % voltage vector V and nl x 1 vector of multipliers LAM. Output matrices 0011 % are sparse. 0012 % 0013 % Example: 0014 % f = branch(:, F_BUS); 0015 % Cf = sparse(1:nl, f, ones(nl, 1), nl, nb); 0016 % [Ybus, Yf, Yt] = makeYbus(baseMVA, bus, branch); 0017 % [dSf_dVa, dSf_dVm, dSt_dVa, dSt_dVm, Sf, St] = ... 0018 % dSbr_dV(branch, Yf, Yt, V); 0019 % Cbr = Cf; 0020 % Ybr = Yf; 0021 % dSbr_dVa = dSf_dVa; 0022 % dSbr_dVm = dSf_dVm; 0023 % Sbr = Sf; 0024 % [Haa, Hav, Hva, Hvv] = ... 0025 % d2ASbr_dV2(dSbr_dVa, dSbr_dVm, Sbr, Cbr, Ybr, V, lam); 0026 % 0027 % Here the output matrices correspond to: 0028 % Haa = (d/dVa (dASbr_dVa.')) * lam 0029 % Hav = (d/dVm (dASbr_dVa.')) * lam 0030 % Hva = (d/dVa (dASbr_dVm.')) * lam 0031 % Hvv = (d/dVm (dASbr_dVm.')) * lam 0032 % 0033 % See also DSBR_DV. 0034 % 0035 % For more details on the derivations behind the derivative code used 0036 % in MATPOWER information, see: 0037 % 0038 % [TN2] R. D. Zimmerman, "AC Power Flows, Generalized OPF Costs and 0039 % their Derivatives using Complex Matrix Notation", MATPOWER 0040 % Technical Note 2, February 2010. 0041 % http://www.pserc.cornell.edu/matpower/TN2-OPF-Derivatives.pdf 0042 0043 % MATPOWER 0044 % $Id: d2ASbr_dV2.m 1720 2010-11-16 16:05:47Z cvs $ 0045 % by Ray Zimmerman, PSERC Cornell 0046 % Copyright (c) 2008-2010 by Power System Engineering Research Center (PSERC) 0047 % 0048 % This file is part of MATPOWER. 0049 % See http://www.pserc.cornell.edu/matpower/ for more info. 0050 % 0051 % MATPOWER is free software: you can redistribute it and/or modify 0052 % it under the terms of the GNU General Public License as published 0053 % by the Free Software Foundation, either version 3 of the License, 0054 % or (at your option) any later version. 0055 % 0056 % MATPOWER is distributed in the hope that it will be useful, 0057 % but WITHOUT ANY WARRANTY; without even the implied warranty of 0058 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0059 % GNU General Public License for more details. 0060 % 0061 % You should have received a copy of the GNU General Public License 0062 % along with MATPOWER. If not, see <http://www.gnu.org/licenses/>. 0063 % 0064 % Additional permission under GNU GPL version 3 section 7 0065 % 0066 % If you modify MATPOWER, or any covered work, to interface with 0067 % other modules (such as MATLAB code and MEX-files) available in a 0068 % MATLAB(R) or comparable environment containing parts covered 0069 % under other licensing terms, the licensors of MATPOWER grant 0070 % you additional permission to convey the resulting work. 0071 0072 %% define 0073 nl = length(lam); 0074 0075 diaglam = sparse(1:nl, 1:nl, lam, nl, nl); 0076 diagSbr_conj = sparse(1:nl, 1:nl, conj(Sbr), nl, nl); 0077 0078 [Saa, Sav, Sva, Svv] = d2Sbr_dV2(Cbr, Ybr, V, diagSbr_conj * lam); 0079 Haa = 2 * real( Saa + dSbr_dVa.' * diaglam * conj(dSbr_dVa) ); 0080 Hva = 2 * real( Sva + dSbr_dVm.' * diaglam * conj(dSbr_dVa) ); 0081 Hav = 2 * real( Sav + dSbr_dVa.' * diaglam * conj(dSbr_dVm) ); 0082 Hvv = 2 * real( Svv + dSbr_dVm.' * diaglam * conj(dSbr_dVm) );