0% acharam este documento útil (0 voto)
70 visualizações7 páginas

Cálculo de Correntes com Gauss-Seidel

O documento apresenta o código para resolver um circuito elétrico com dois nós desconhecidos utilizando o método de Gauss-Seidel, fornecendo as soluções nas formas retangular e polar.

Enviado por

Viviane Noecir
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
70 visualizações7 páginas

Cálculo de Correntes com Gauss-Seidel

O documento apresenta o código para resolver um circuito elétrico com dois nós desconhecidos utilizando o método de Gauss-Seidel, fornecendo as soluções nas formas retangular e polar.

Enviado por

Viviane Noecir
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

VIVIANE NOECIR DOS SANTOS-SP3099415

LEONARDO DOS SANTOS LOPES – SP310401X


CANUA – Atividade 5 (Síncrona)

1. Determinar as correntes I1, I2 e I3 no circuito abaixo, utilizando o método de


Gauss-Jacobi ou o método de Gauss-Seidel, com tolerância de 0,5.10-3.
2. Determinar as correntes I1 e I2 no circuito abaixo, utilizando o método de
Gauss-Jacobi ou o método de Gauss-Seidel, com tolerância de 0,5.10-3.
LOGICA- CODIGO//// SEGUNDA QUESTÃO

#include <stdio.h>
#include <complex.h>
#include <math.h>

void gauss_seidel_2(double complex *res, double complex x1n, double complex x2n,
double epsi) {
double epsin = epsi + 1;
int i = 0;

printf("\nMétodo de Gauss-Seidel\n");
printf("======================\n\n");

while (epsin >= epsi) {


double complex x1 = x1n, x2 = x2n;
i++;

x1n = (4.1572 + 8.512*I - 4.0 * x2) / (-12.0 - 14.0*I);


x2n = (-11.818 + 2.084*I - 4.0 * x1n) / (-10.0 - 10.0*I);

double err1 = cabs((x1n - x1) / x1);


double err2 = cabs((x2n - x2) / x2);
epsin = fmax(err1, err2);

printf("Iteração = %d\n", i);


printf("x1 = %.6f + %.6fi x2 = %.6f + %.6fi\n", creal(x1n), cimag(x1n),
creal(x2n), cimag(x2n));
printf("d1 = %.6f d2 = %.6f\n\n", err1, err2);

if (i > 50) {
printf("Não houve convergência após 50 iterações.\n");
res[0] = res[1] = NAN + NAN*I;
return;
}
}

res[0] = x1n;
res[1] = x2n;
}

int main() {
double complex result[2];
double epsi = 1e-6;
double complex x1n = 0.0 + 0.0*I, x2n = 0.0 + 0.0*I;

gauss_seidel_2(result, x1n, x2n, epsi);

double magnitude[2];
double angle[2];

for (int i = 0; i < 2; i++) {


magnitude[i] = cabs(result[i]);
angle[i] = carg(result[i]) * (180.0 / M_PI); // Converte para graus
}

printf("Solução em números complexos:\n");


printf("x1 = %.6f + %.6fi\n", creal(result[0]), cimag(result[0]));
printf("x2 = %.6f + %.6fi\n", creal(result[1]), cimag(result[1]));

printf("\nSolução em forma polar (magnitude e fase em graus):\n");


printf("x1 = %.6f * exp(%.6fi°)\n", magnitude[0], angle[0]);
printf("x2 = %.6f * exp(%.6fi°)\n", magnitude[1], angle[1]);

return 0;
}

Você também pode gostar