Você está na página 1de 8

Viviane Noecir dos Santos-SP3099415

CANUA – Atividade 3

1. Para os sistemas lineares a seguir, determinar a matriz C e o vetor d e, utilizando


o Método de Gauss-Jacobi, as quatro primeiras estimativas da solução e o erro
relativo.
Viviane Noecir dos Santos-SP3099415
Viviane Noecir dos Santos-SP3099415

Resp.: Solução aproximada: {2, 2}; Erel=0,1395 Resp.: Solução aproximada: {2, -2, 2};
Erel=0,0457

2. Resolver o exercício 1, usando o Método de Gauss-Seidel.


Viviane Noecir dos Santos-SP3099415
Viviane Noecir dos Santos-SP3099415
Viviane Noecir dos Santos-SP3099415
Lógica/código para solução por método de Jacobi.

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

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

printf("\nMétodo de Jacobi\n");
printf("=================\n\n");

while (epsin >= epsi) {

double x1 = x1n, x2 = x2n, x3 = x3n;


i++;

x1n = (32 - 5 * x2 - x3) / 20;


x2n = (-20 + 2*x1 – 2*x3) / 10;
x3n = (14 - x1 - 4 * x2) / 10;

if (x1 == 0) x1 = 1e-20;
if (x2 == 0) x2 = 1e-20;
if (x3 == 0) x3 = 1e-20;
epsin = fmax(fabs((x1n - x1) / x1), fmax(fabs((x2n - x2) / x2), fabs((x3n - x3) / x3)));

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


printf("x1 = %.6f x2 = %.6f x3 = %.6f\n", x1n, x2n, x3n);
printf("d1 = %.6f d2 = %.6f d3 = %.6f\n\n", fabs((x1n - x1) / x1),
fabs((x2n - x2) / x2), fabs((x3n - x3) / x3));

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

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

int main() {
double result[3];
double epsi = 1e-6;
Viviane Noecir dos Santos-SP3099415
double x1n = 0.0, x2n = 0.0, x3n = 0.0;

jacobi_3(result, x1n, x2n, x3n, epsi);

printf("Solução: x1 = %.6f x2 = %.6f x3 = %.6f\n", result[0], result[1], result[2]);

return 0;
}

Código/Lógica para o método de Gauss-Seidel

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

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

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

while (epsin >= epsi) {


double x1 = x1n, x2 = x2n, x3 = x3n;
i++;

x1n = (32 - 5 * x2 - x3) / 20;


x2n = (-20 + 2 * x1n - 2 * x3) / 10;
x3n = (14 - x1n - 4 * x2n) / 10;

if (x1 == 0) x1 = 1e-20;
if (x2 == 0) x2 = 1e-20;
if (x3 == 0) x3 = 1e-20;
epsin = fmax(fabs((x1n - x1) / x1), fmax(fabs((x2n - x2) / x2), fabs((x3n - x3) / x3)));

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


printf("x1 = %.6f x2 = %.6f x3 = %.6f\n", x1n, x2n, x3n);
printf("d1 = %.6f d2 = %.6f d3 = %.6f\n\n", fabs((x1n - x1) / x1),
fabs((x2n - x2) / x2), fabs((x3n - x3) / x3));

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

res[0] = x1n;
res[1] = x2n;
Viviane Noecir dos Santos-SP3099415
res[2] = x3n;
}

int main() {
double result[3];
double epsi = 1e-6;
double x1n = 0.0, x2n = 0.0, x3n = 0.0;

gauss_seidel_3(result, x1n, x2n, x3n, epsi);

printf("Solução: x1 = %.6f x2 = %.6f x3 = %.6f\n", result[0], result[1], result[2]);

return 0;
}

Você também pode gostar