Home > matpower6.0 > dIbr_dV.m

dIbr_dV

PURPOSE ^

DIBR_DV Computes partial derivatives of branch currents w.r.t. voltage.

SYNOPSIS ^

function [dIf_dVa, dIf_dVm, dIt_dVa, dIt_dVm, If, It] = dIbr_dV(branch, Yf, Yt, V)

DESCRIPTION ^

DIBR_DV   Computes partial derivatives of branch currents w.r.t. voltage.
   [DIF_DVA, DIF_DVM, DIT_DVA, DIT_DVM, IF, IT] = DIBR_DV(BRANCH, YF, YT, V)
   returns four matrices containing partial derivatives of the complex
   branch currents at "from" and "to" ends of each branch w.r.t voltage
   magnitude and voltage angle respectively (for all buses). If YF is a
   sparse matrix, the partial derivative matrices will be as well. Optionally
   returns vectors containing the currents themselves. The following
   explains the expressions used to form the matrices:

   If = Yf * V;

   Partials of V, Vf & If w.r.t. voltage angles
       dV/dVa  = j * diag(V)
       dVf/dVa = sparse(1:nl, f, j * V(f)) = j * sparse(1:nl, f, V(f))
       dIf/dVa = Yf * dV/dVa = Yf * j * diag(V)

   Partials of V, Vf & If w.r.t. voltage magnitudes
       dV/dVm  = diag(V./abs(V))
       dVf/dVm = sparse(1:nl, f, V(f)./abs(V(f))
       dIf/dVm = Yf * dV/dVm = Yf * diag(V./abs(V))

   Derivations for "to" bus are similar.

   Example:
       [Ybus, Yf, Yt] = makeYbus(baseMVA, bus, branch);
       [dIf_dVa, dIf_dVm, dIt_dVa, dIt_dVm, If, It] = ...
           dIbr_dV(branch, Yf, Yt, V);

   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

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [dIf_dVa, dIf_dVm, dIt_dVa, dIt_dVm, If, It] = dIbr_dV(branch, Yf, Yt, V)
0002 %DIBR_DV   Computes partial derivatives of branch currents w.r.t. voltage.
0003 %   [DIF_DVA, DIF_DVM, DIT_DVA, DIT_DVM, IF, IT] = DIBR_DV(BRANCH, YF, YT, V)
0004 %   returns four matrices containing partial derivatives of the complex
0005 %   branch currents at "from" and "to" ends of each branch w.r.t voltage
0006 %   magnitude and voltage angle respectively (for all buses). If YF is a
0007 %   sparse matrix, the partial derivative matrices will be as well. Optionally
0008 %   returns vectors containing the currents themselves. The following
0009 %   explains the expressions used to form the matrices:
0010 %
0011 %   If = Yf * V;
0012 %
0013 %   Partials of V, Vf & If w.r.t. voltage angles
0014 %       dV/dVa  = j * diag(V)
0015 %       dVf/dVa = sparse(1:nl, f, j * V(f)) = j * sparse(1:nl, f, V(f))
0016 %       dIf/dVa = Yf * dV/dVa = Yf * j * diag(V)
0017 %
0018 %   Partials of V, Vf & If w.r.t. voltage magnitudes
0019 %       dV/dVm  = diag(V./abs(V))
0020 %       dVf/dVm = sparse(1:nl, f, V(f)./abs(V(f))
0021 %       dIf/dVm = Yf * dV/dVm = Yf * diag(V./abs(V))
0022 %
0023 %   Derivations for "to" bus are similar.
0024 %
0025 %   Example:
0026 %       [Ybus, Yf, Yt] = makeYbus(baseMVA, bus, branch);
0027 %       [dIf_dVa, dIf_dVm, dIt_dVa, dIt_dVm, If, It] = ...
0028 %           dIbr_dV(branch, Yf, Yt, V);
0029 %
0030 %   For more details on the derivations behind the derivative code used
0031 %   in MATPOWER information, see:
0032 %
0033 %   [TN2]  R. D. Zimmerman, "AC Power Flows, Generalized OPF Costs and
0034 %          their Derivatives using Complex Matrix Notation", MATPOWER
0035 %          Technical Note 2, February 2010.
0036 %             http://www.pserc.cornell.edu/matpower/TN2-OPF-Derivatives.pdf
0037 
0038 %   MATPOWER
0039 %   Copyright (c) 1996-2016, Power Systems Engineering Research Center (PSERC)
0040 %   by Ray Zimmerman, PSERC Cornell
0041 %
0042 %   This file is part of MATPOWER.
0043 %   Covered by the 3-clause BSD License (see LICENSE file for details).
0044 %   See http://www.pserc.cornell.edu/matpower/ for more info.
0045 
0046 %% define
0047 nb = length(V);
0048 
0049 Vnorm = V ./ abs(V);
0050 if issparse(Yf)             %% sparse version (if Yf is sparse)
0051     diagV       = sparse(1:nb, 1:nb, V, nb, nb);
0052     diagVnorm   = sparse(1:nb, 1:nb, Vnorm, nb, nb);
0053 else                        %% dense version
0054     diagV       = diag(V);
0055     diagVnorm   = diag(Vnorm);
0056 end
0057 dIf_dVa = Yf * 1j * diagV;
0058 dIf_dVm = Yf * diagVnorm;
0059 dIt_dVa = Yt * 1j * diagV;
0060 dIt_dVm = Yt * diagVnorm;
0061 
0062 %% compute currents
0063 if nargout > 4
0064     If = Yf * V;
0065     It = Yt * V;
0066 end

Generated on Fri 16-Dec-2016 12:45:37 by m2html © 2005