import javax.swing.*; public class GaussMain { public static void main(String[] args) { int i, j; double term; String input= JOptionPane.showInputDialog("Introduzca el número de incógnitas"); int n= Integer.parseInt(input); // Crea las matrices a, b, x Matrix a= new Matrix(n, n); Matrix b= new Matrix(n, 1); Matrix x= new Matrix(n, 1); // Introduce la matriz a for (i = 0; i < a.getNumRows(); i++) for (j = 0; j < a.getNumCols(); j++) { input= JOptionPane.showInputDialog("Introduzca a["+i+"]["+j+"]"); term= Double.parseDouble(input); a.setElement(i, j, term); } // Introduce el vector b como matriz de 1 columna for (i = 0; i < b.getNumRows(); i++) { input= JOptionPane.showInputDialog("Introduzca b["+i+"]"); term= Double.parseDouble(input); b.setElement(i, 0, term); } gaussian(a, b, x); System.out.println("Matriz a:"); a.print(); System.out.println("Vector b:"); b.print(); System.out.println("Vector de solución x:"); x.print(); } public static void gaussian(Matrix a, Matrix b, Matrix x) { int i, j, n; n= a.getNumRows(); // Número de incógnitas Matrix q= new Matrix(n, n+1); for (i=0; i < n; i++) { for (j=0; j < n; j++) // Forma la matriz q q.setElement(i, j, a.getElement(i, j)); // q(i,j)= a(i,j) q.setElement(i, n, b.getElement(i, 0)); // q(i,n)= b(i,0) } forward_solve(q); // Realiza la eliminación gaussiana back_solve(q); // Realiza la sustitución inversa for (i=0; i Math.abs(q.getElement(maxr,i))) maxr= j; if (maxr != i) // Si la fila no es la actual, cambia a otra for (k=i; k <= n; k++) { t= q.getElement(i,k); // t= q(i,k) q.setElement(i,k, q.getElement(maxr, k)); // q(i,k)= q(maxr, k) q.setElement(maxr, k, t); // q(maxr, k)= t } for (j= i+1; j =i; k--) q.setElement(j, k, q.getElement(j,k)-q.getElement(i,k)*pivot); // q(j,k) -= q(i,k)*pivot; // Actualiza la fila j debajo de la diagonal } } } private static void back_solve(Matrix q) // Función de sustitución inversa { // comenzando en la fila n-1 int j, k, n; double t; // t- temporal n= q.getNumRows(); for (j=n-1; j >=0; j--) // Comienza en la última fila { t= 0.0; for (k= j+1; k < n; k++) // t += q(j,k)* q(k,n) t += q.getElement(j,k)* q.getElement(k,n); q.setElement(j, n, (q.getElement(j, n) -t)/q.getElement(j,j)); // q(j, n)= (q(j, n) -t)/q(j,j); } } }