Beispiel #1
0
        //--------------------------------------------  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);
        }
Beispiel #2
0
        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);
        }