Está en la página 1de 8

ernesto flores hernadez

Objetivo:

Realizar un programa que nos pueda ayudar para hacer el método e Jacobi mediante las fórmulas
que se dio en clases.

Documentación antes de hacer el programa:

1. Se considera la ecuación lineal a utilizar


2. Si no está ordenado se ordena.
3. En cada ecuación despejamos a x1,x2 y x3;
4. Al despejar tenemos una nueva ecuación sustituimos en cada uno de ellos
5. Obtenemos nuevos valores como resultado, volvemos a sustituir hasta llegar a nuestra
aproximación.
6. Se obtiene el resultado.

Documentación del programa:

import java.util.Scanner;

class Matriz {

int filas;

int columnas;

double m[][];

public Matriz(double m[][]) {

this.m = m;

this.filas = m.length;

this.columnas = m[0].length;

public void setFilas(int filas) {

this.filas = filas;

}
public void setColumnas(int columnas) {

this.columnas = columnas;

public int getFilas() {

return this.filas;

public int getColumnas() {

return this.columnas;

public void imprimirMatriz() {

for (int i = 0; i < m.length; i++) {

for (int j = 0; j < m[i].length; j++) {

if (m[i][j] >= 0) {

System.out.printf("\t%s%.2f", " ", m[i][j]);

} else {

System.out.printf("\t%.2f", m[i][j]);

System.out.println("");

System.out.println("");

System.out.println("");

public void llenarMatriz() {


Scanner entrada = new Scanner(System.in);

for (int i = 0; i < m.length; i++) {

for (int j = 0; j < m[i].length; j++) {

System.out.print("Ingrese el elemento [" + (i + 1) +

"," + (j + 1) + "]: ");

m[i][j] = entrada.nextInt();

System.out.println("");

public void llenarVector(double v[]) {

Scanner entrada = new Scanner(System.in);

for (int i=0; i<v.length; i++) {

System.out.print("Ingrese el elemento ["+(i+1)+"]: ");

v[i] = entrada.nextDouble();

System.out.println("");

public double[] restaVectores(double v1[], double v2[]) {

double resta[] = new double[v1.length];

for(int i=0; i<resta.length; i++) {

resta[i] = v1[i] - v2[i];

return resta;

public double normaVector(double v[]) {

double norma = 0.0;

double suma = 0.0;


for(int i=0; i<v.length; i++) {

suma += Math.pow(v[i], 2);

norma = Math.sqrt(suma);

return norma;

/**

* Método que resuelve un sistema de ecuaciones mediante el método de

Jacobi

* @param b - Vector columna b.

* @param epsilon - Criterio de detención.

* @return - El vector de solución aproximado.

*/

public double[] jacobi(double b[], double epsilon) {

int N = m.length;

//Inicializamos en vector de aproximacion inicial en 0.0.

double X_Anterior[] = new double[N];

for(int i=0; i<X_Anterior.length; i++) {

X_Anterior[i] = 0.0;

double X_Actual[] = new double[N];

for(int i=0; i<X_Actual.length; i++) {

X_Actual[i] = 0.0;

double norma = 1.0;


double sumaAux;

int contadorIteraciones = 0;

//Revisa si se cumple con el criterio de detención

while((norma/normaVector(X_Actual)) >= epsilon) {

sumaAux = 0.0;

contadorIteraciones++;

System.out.println("Iteración " + contadorIteraciones + ":");

//Actualizamos el vector de aproximación inicial

for(int i=0; i<X_Anterior.length; i++) {

X_Anterior[i] = X_Actual[i];

for(int i=0; i<=N-1; i++) {

for(int j=0; j<=N-1; j++) {

if(j != i) {

sumaAux += m[i][j]*X_Anterior[j];

X_Actual[i] = (b[i] - sumaAux)/m[i][i];

System.out.println("X["+(i+1)+"]: " + X_Actual[i]);

sumaAux = 0.0;

System.out.println("");

System.out.println("");
norma = normaVector(restaVectores(X_Actual, X_Anterior));

System.out.println("");

return X_Actual;

public static void main(String[] args) {

Scanner entrada = new Scanner(System.in);

System.out.print("\nIngrese la dimensión de la matriz: ");

int dim = entrada.nextInt();

double A[][] = new double[dim][dim];

Matriz matrix = new Matriz(A);

matrix.llenarMatriz();

System.out.println("\nLa matriz ingresada A es: \n");

matrix.imprimirMatriz();

double b[] = new double[dim];

System.out.println("\nIngrese el vector b: ");

matrix.llenarVector(b);

double epsilon;

System.out.print("\nIngrese el criterio de detención: ");

epsilon = entrada.nextDouble();

System.out.println("\nAproximando la solución del sistema de ecuaciones" + "por el Método de


Jacobi... ");

System.out.println("\nEl vector de aproximación inicial es [0, 0,0, 0]\n");

matrix.jacobi(b, epsilon);
}