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