Baixe o app para aproveitar ainda mais
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
Compartilhar