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;
}