Gauss Seidel y Jacobi
El método de gauss seidel y el metodo de jacobi son similares, ambos usados para resolver sistemas de ecuaciones lineales, el método de gauss seidel debe su nombre a los matemáticos Carl Friedrich Gauss y Philipp Ludwig von Seidel mientras que el método de jacobi al matemático alemán Carl Gustav Jakob Jacobi.
Gauss-Seidel
Este método iterativo es el más comúnmente usado. Debe asegurase de que los elementos de la diagonal no sean ceros para que se pueda resolver por este método.
Ejemplo si se tiene un sistema de tres ecuaciones, X1 se puede despejar de la primera ecuación, X2 de la segunda y X3 de la tercera.
Ahora se puede empezar a resolver para encontrar X1 suponemos que X2 y X3 son ceros, resolvemos para X2 ya tenemos X1 que lo encontramos anteriormente y suponemos que X3 es cero, para encontrar X3 solo resolvemos pues ya tenemos X1 y X2.
El proceso se repite solo que utilizado los valores que ya tenemos de X1, X2, X3 hasta que la solución converja lo mas cercano a los valores reales.
Algoritmo escrito en C#, la matriz introducida debe ser diagonalmente dominante para asegurar la convergencia, este algoritmo solo realiza 5 iteraciones.
{
double[] sol = new double[filas];
StringBuilder sb = new StringBuilder();
for (int iteraciones = 0; iteraciones < 5; iteraciones++)
{
for (int i = 0; i < filas; i++)
{
double suma = 0;
for (int j = 0; j < columnas - 1; j++)
{
if (j == i) continue;
suma += matrix[i, j] * sol[j];
}
sol[i] = (matrix[i, columnas - 1] - suma) / matrix[i, i];
}
for (int i = 0; i < filas; i++)
{
sb.AppendLine("X" + (i + 1) + " = " + sol[i]);
}
sb.AppendLine();
}
return sb.ToString();
}
Descargar proyecto VS 2010
Jacobi
Otro método iterativo en el llamado iteraciones de jacobi es parecido a gauss-seidel solo que los valores encontrados no son utilizados inmediatamente.
Para encontrar X1 suponemos que X2 y X3 son cero, para X2 en la segunda ecuación suponemos que X1 y X3 son cero y para hallar X3 suponemos que X1 y X2 son cero, ya tenemos X1, X2, X3 ahora repetimos el proceso remplazando con los valores que ya encontramos.
Algoritmo escrito en C#, la matriz introducida debe ser diagonalmente dominante para asegurar la convergencia, este algoritmo solo realiza 5 iteraciones.
{
double[] sol = new double[filas];
double[] soltem = new double[filas];
StringBuilder sb = new StringBuilder();
for (int iteraciones = 0; iteraciones < 5; iteraciones++)
{
for (int i = 0; i < filas; i++)
{
double suma = 0;
for (int j = 0; j < columnas - 1; j++)
{
if (j == i) continue;
suma += matrix[i, j] * sol[j];
}
soltem[i] = (matrix[i, columnas - 1] - suma) / matrix[i, i];
}
for (int i = 0; i < filas; i++)
{
sol[i] = soltem[i];
sb.AppendLine("X" + (i + 1) + " = " + sol[i]);
}
sb.AppendLine();
}
return sb.ToString();
}
Proyecto completo en wpf iteraciones de jacobi C#
Descarga el Proyecto VS 2010
muchas gracias
ResponderEliminarLo utilicé para comprobar mis resultados, es un excelente programa, gracias :D
ResponderEliminarmen como seria esto en java :o ya estoy analizando y primero ta bbueno felicidades, y el otro ya complejo
ResponderEliminarlo tienes en netbeans?
EliminarYo lo tengo
Eliminarme puedes pasar tu pseudocodigo
Eliminaroye me puuden pasar el programa angel_isaac_@hotmail.com
ResponderEliminarBuenisimo bro...gracias
ResponderEliminaramigo y en netbeans con interfaz grafica lo tienes?
ResponderEliminarpor favorf envienlo en java nadinmaza@gmail.com
ResponderEliminarno da todas las iteraciones solo muestra 5 de 13, que son las que deberia de dar y no da el error
ResponderEliminar