//-------------------------------------------- METODOS ----------------------------------------------------// public static Resultado_2 Gauss_Jordan(double[,] matriz, int incognitas, bool pivoteo) { Resultado_2 nuevo = new Resultado_2(true, "Los valores de las incognitas son los siguientes: ", incognitas, 0); if (Determinante(matriz, incognitas) != 0) { if (pivoteo) { matriz = Pivoteo_Parcial(matriz, incognitas); } nuevo.Resultados = Escalonar(matriz, incognitas); if (nuevo.Resultados[0] is Double.NaN) { nuevo.SePudo = false; nuevo.Mensaje = "El elemento pivotal es 0 (El sistema no tiene resolución)"; } } else { nuevo.Mensaje = "El sistema no tiene resolución"; nuevo.SePudo = false; } return(nuevo); }
public static Resultado_2 Gauss_Seidel(double[,] matriz, int incognitas, int iteraciones, double tole, bool pivoteo) { Resultado_2 nuevo = new Resultado_2(true, "Los valores de las incognitas son los siguientes: ", incognitas, 0); if (Determinante(matriz, incognitas) != 0) { double[] V_arranque = new double[incognitas]; for (int i = 0; i < incognitas; i++) { V_arranque[i] = 0; } if (pivoteo) { matriz = Pivoteo_Parcial(matriz, incognitas); } double suma; double divisor; int cont_iter = 0; bool band = false; double[] V_ant = new double[incognitas]; while ((cont_iter < iteraciones) && !band) { for (int i = 0; i < incognitas; i++) { V_ant[i] = V_arranque[i]; } for (int i = 0; i < incognitas; i++) { suma = 0; divisor = 0; for (int j = 0; j < incognitas; j++) { if (i != j) { suma += matriz[i, j] * V_arranque[j]; } else { divisor = matriz[i, j]; } } V_arranque[i] = (matriz[i, incognitas] - suma) / divisor; } cont_iter += 1; double resta = 0; int c = 0; for (int i = 0; i < incognitas; i++) { resta = V_arranque[i] - V_ant[i]; if (Math.Abs(resta) < tole) { c += 1; } } if (c == incognitas) { band = true; } } if (!band) { nuevo.Mensaje = "Se ha excedido el numero de iteraciones, no se ha llegado a una solucion valida"; nuevo.SePudo = false; } for (int i = 0; i < incognitas; i++) { nuevo.Resultados[i] = V_arranque[i]; } nuevo.Iter = cont_iter; } else { nuevo.Mensaje = "El sistema no tiene resolución"; nuevo.SePudo = false; } return(nuevo); }