Buscar

Sistemas de Potência - Gauss Seidel - 2 barras

Prévia do material em texto

Programação no MATLAB:
%[v2,s1, iter] = func_GS_2b (tensao_barra_1,impedancia_12, Y, ...
%carga_barra_2,epsilon,lim_interacoes)
%As entradas são:
%	. V1 = Tensao_barra_1 número complexo
%	. Z12 = Impedancia_12 (número complexo, em pu)
%	. Y = admitância total da linha no modelo Pi (número complexo)
%	. s2 = Carga_barra_2 número complexo (sinal já ajustado)
%	. epsilon = tolerância da iteração (número real maior que zero)
%	. lim_iterações = quantidade máxima de iterações (número real maior
%	que zero)
%As saídas (v2,s1, iter):
%	. v2 = deve ser uma matriz coluna com o valor de v2 em dada iteração.
%	. s1 = um número complexo com a potência do gerador swing ou [] se não
%convergir
%	. iter = número de iterações para convergir ou Inf se não convergir
% funções testes:
%caso 1: [v2, s1, iter] = func_GS_2b (1,0.01+1i*0.10,0,-1-0.0*1i,0.001,25)
%caso 2: [v2, s1, iter] = func_GS_2b (1,0.01+1i*0.35,0,-1-0.0*1i,0.00001,25)
%caso 3: [v2, s1, iter] = func_GS_2b (1,0.01+1i*0.10,0,-1-0.5*1i,0.00001,25)
%caso 4: [v2, s1, iter] = func_GS_2b (1,0.01+1i*0.10,0,-1+0.5*1i,0.00001,25)
%caso 5: [v2, s1, iter] = func_GS_2b (1,0.01+1i*0.10,0,-3.220-1.372*1i,0.00001,25)
%caso 6: [v2, s1, iter] = func_GS_2b (1,1i*0.10,1i*1.0,-0.8-0.4*1i,0.001,25)
 function [v2, s1, iter] = func_GS_2b (V1,Z12,Y,s2,epsilon,lim_iter)
 clc
 tic % iniciar contagem do tempo decorrido do processamento do programa - inserir no início do programa
 v2 = []; % saída: tensao_barra_2
 s1 = []; % saída: carga_barra_1
 iter = inf; % saída: quantidade de iterações para convergência
% check dos inputs do usuário
 if V1<=0
 disp ('Tensão na barra 1 deve ser maior que 0')
 return
end
 if Z12==0
 disp ('Impedância da linha deve ser diferente de 0')
 return
end
 if epsilon<=0
 disp ('Tolerância (epsilon) deve ser maior que 0')
 return
end
 if lim_iter<=0
 disp ('Lim de iterações deve ser maior que 0')
 return
end
% definição da matriz Ybus 2x2 (para 2 barras)
 Ybus = [(1/Z12)+(Y/2) (-1/Z12);(-1/Z12) (1/Z12)+(Y/2)];
 v2 = zeros (1,lim_iter);
 iter = 1;
 v2(iter) = 1;
 iter = iter+1;
 erro = [1 1];
% Método Gauss-Seidel
 while prod(erro<=epsilon)==0 && iter<lim_iter
	 v2(iter) = (1/Ybus(2,2))*(conj(s2)/...
 conj(v2(iter-1))-V1*Ybus(2,1));
	
	 erro = [abs((real(v2(iter))-...
 (real(v2(iter-1))))) ...
 abs((imag(v2(iter))-...
 (imag(v2(iter-1)))))];
	 iter = iter +1;
end
% Caso não haja convergência no número limite de iterações
 if iter>lim_iter || (erro (1,1)>epsilon && erro(1,2)>epsilon)
 s1 = [];
 iter = inf;
else
% Caso ocorra convergência no número limite de iterações
	 v2=v2(1:iter-1).';
	 s1=conj(conj(V1)*...
 (V1*Ybus(1,1) + v2(iter-1)...
 *Ybus(1,2)));
	 iter=iter-1;
end
 tic % fim da contagem do tempo total do programa - inserir ao final do programa
 end % fim do programa

Continue navegando