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

📄 fdpf.m

📁 关于电力系统的计算程序!最新的改进法计算潮流程序!用matlab实现的! 适用于电力行业的相关从业人员!
💻 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 Version 2.0
%   by Ray Zimmerman, PSERC Cornell    12/23/97
%   Copyright (c) 1996, 1997 by Power System Engineering Research Center (PSERC)
%   See http://www.pserc.cornell.edu/ for more info.

%% default arguments
if nargin < 7
	mpopt = mpoption;
end

%% options
tol		= mpopt(2);
max_it	= mpopt(4);
verbose	= mpopt(31);

%% initialize
j = sqrt(-1);
converged = 0;
i = 0;
V = V0;
Va = angle(V);
Vm = abs(V);

%% set up indexing for updating V
npv	= length(pv);
npq	= length(pq);
j1 = 1;			j2 = npv;			%% j1:j2 - V angle of pv buses
j3 = j2 + 1;	j4 = j2 + npq;		%% j3:j4 - V angle of pq buses
j5 = j4 + 1;	j6 = j4 + npq;		%% j5:j6 - V mag of pq buses

%% evaluate initial 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('\niteration     max mismatch (p.u.)  ');
	fprintf('\ntype   #        P            Q     ');
	fprintf('\n---- ----  -----------  -----------');
	fprintf('\n  -  %3d   %10.3e   %10.3e', i, normP, normQ);
end
if normP < tol & normQ < tol
	converged = 1;
	if verbose > 1
		fprintf('\nConverged!\n');
	end
end

%% 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 iterations
while (~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 > 1
			fprintf('\nPower 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 > 1
			fprintf('\nFast-decoupled power flow converged in %d P-iterations and %d Q-iterations.\n', i, i);
		end
		break;
	end
end

if verbose
	if ~converged
		fprintf('\nFast-decoupled power flow did not converge in %d iterations.\n', i);
	end
end

⌨️ 快捷键说明

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