⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fdpf.m

📁 电力系统计算软件
💻 M
字号:
function [V, converged, i] = fdpf(Ybus, Sbus, V0, Bp, Bpp, ref, pv, pq, mpopt)%FDPF  Solves the power flow using a fast decoupled method.%   [V, converged, i] = fdpf(Ybus, Sbus, V0, Bp, Bpp, ref, pv, pq, mpopt)%   solves for bus voltages given the full system admittance matrix (for%   all buses), the complex bus power injection vector (for all buses),%   the initial vector of complex bus voltages, the FDPF matrices B prime%   and B double prime, and column vectors with the lists of bus indices%   for the swing bus, PV buses, and PQ buses, respectively. The bus voltage%   vector contains the set point for generator (including ref bus)%   buses, and the reference angle of the swing bus, as well as an initial%   guess for remaining magnitudes and angles. mpopt is a MATPOWER options%   vector which can be used to set the termination tolerance, maximum%   number of iterations, and  output options (see 'help mpoption'%   for details). Uses default options if this parameter is not given.%   Returns the final complex voltages, a flag which indicates whether it%   converged or not, and the number of iterations performed.%   MATPOWER%   $Id: fdpf.m,v 1.5 2004/08/23 20:56:18 ray Exp $%   by Ray Zimmerman, PSERC Cornell%   Copyright (c) 1996-2004 by Power System Engineering Research Center (PSERC)%   See http://www.pserc.cornell.edu/matpower/ for more info.%% default argumentsif nargin < 7    mpopt = mpoption;end%% optionstol     = mpopt(2);max_it  = mpopt(4);verbose = mpopt(31);%% initializej = sqrt(-1);converged = 0;i = 0;V = V0;Va = angle(V);Vm = abs(V);%% set up indexing for updating Vnpv = length(pv);npq = length(pq);j1 = 1;         j2 = npv;           %% j1:j2 - V angle of pv busesj3 = j2 + 1;    j4 = j2 + npq;      %% j3:j4 - V angle of pq busesj5 = j4 + 1;    j6 = j4 + npq;      %% j5:j6 - V mag of pq buses%% evaluate initial mismatchmis = (V .* conj(Ybus * V) - Sbus) ./ Vm;P = real(mis([pv; pq]));Q = imag(mis(pq));%% check tolerancenormP = norm(P, inf);normQ = norm(Q, inf);if verbose > 1    fprintf('\niteration     max mismatch (p.u.)  ');    fprintf('\ntype   #        P            Q     ');    fprintf('\n---- ----  -----------  -----------');    fprintf('\n  -  %3d   %10.3e   %10.3e', i, normP, normQ);endif normP < tol & normQ < tol    converged = 1;    if verbose > 1        fprintf('\nConverged!\n');    endend%% reduce B matrices%% this is slow in Matlab 5 ...% Bp = Bp([pv; pq], [pv; pq]);% Bpp = Bpp(pq, pq);%% ... so we do this instead ...temp = Bp(:, [pv; pq])';Bp = temp(:, [pv; pq])';temp = Bpp(:, pq)';Bpp = temp(:, pq)';%% factor B matrices[Lp, Up, Pp] = lu(Bp);[Lpp, Upp, Ppp] = lu(Bpp);%% do P and Q iterationswhile (~converged & i < max_it)    %% update iteration counter    i = i + 1;    %%-----  do P iteration, update Va  -----    dVa = -( Up \  (Lp \ (Pp * P)));    %% update voltage    Va([pv; pq]) = Va([pv; pq]) + dVa;    V = Vm .* exp(j * Va);    %% evalute mismatch    mis = (V .* conj(Ybus * V) - Sbus) ./ Vm;    P = real(mis([pv; pq]));    Q = imag(mis(pq));        %% check tolerance    normP = norm(P, inf);    normQ = norm(Q, inf);    if verbose > 1        fprintf('\n  P  %3d   %10.3e   %10.3e', i, normP, normQ);    end    if normP < tol & normQ < tol        converged = 1;        if verbose            fprintf('\nFast-decoupled power flow converged in %d P-iterations and %d Q-iterations.\n', i, i-1);        end        break;    end    %%-----  do Q iteration, update Vm  -----    dVm = -( Upp \ (Lpp \ (Ppp * Q)) );    %% update voltage    Vm(pq) = Vm(pq) + dVm;    V = Vm .* exp(j * Va);    %% evalute mismatch    mis = (V .* conj(Ybus * V) - Sbus) ./ Vm;    P = real(mis([pv; pq]));    Q = imag(mis(pq));        %% check tolerance    normP = norm(P, inf);    normQ = norm(Q, inf);    if verbose > 1        fprintf('\n  Q  %3d   %10.3e   %10.3e', i, normP, normQ);    end    if normP < tol & normQ < tol        converged = 1;        if verbose            fprintf('\nFast-decoupled power flow converged in %d P-iterations and %d Q-iterations.\n', i, i);        end        break;    endendif verbose    if ~converged        fprintf('\nFast-decoupled power flow did not converge in %d iterations.\n', i);    endend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -