public static SistemaDeEcuaciones IgualaTerminos(this SistemaDeEcuaciones sis)
 {
     SistemaDeEcuaciones se = new SistemaDeEcuaciones();
     EcuacionLineal el = new EcuacionLineal();
     for (int i = 0; i < sis.Count; i++)
     {
         el = Libera(el);
         for (int j = 0; j < sis[i].Count; j++)
         {
             if (el.Select(x => x.Literal).ToList().Contains(sis[i][j].Literal))
                 el.AcumulaCoeficientePorTermino(sis[i][j].Literal, sis[i][j].Coeficiente);
             else
                 el.Add(new TerminoLineal(sis[i][j].Literal, sis[i][j].Coeficiente));
         }
         for (int j = sis[i].Count - 1; j >= 0; j--)
         {
             if (el.Select(x => x.Literal).ToList().Contains(sis[i][j].Literal))
                 el.CambiaCoeficientePorTermino(sis[i][j].Literal, sis[i][j].Coeficiente);
             else
                 el.Add(new TerminoLineal(sis[i][j].Literal, sis[i][j].Coeficiente));
         }
         se.Add(el);
     }
     return se;
 }
예제 #2
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            DataTable dt = (Sistema.ItemsSource as DataView).Table;
            SistemaDeEcuaciones se = new SistemaDeEcuaciones();
            foreach (DataRow dr in dt.Rows)
            {
                EcuacionLineal el = new EcuacionLineal();
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    el.Add(new TerminoLineal(dt.Columns[i].Caption, Convert.ToDouble(dr[i].ToString())));
                }
                se.Add(el);
            }
            StringBuilder sb = new StringBuilder();

            var s1 = EliminacionDeGaussLinq.IgualaTerminos(se);
            //Paso 2 orden
            var _s2 = new SistemaDeEcuaciones(s1.Select(x => x.ordena()).ToList()).ordena();
            List<string> l = (from s in _s2[0] select s.Literal).ToList();
            var __s2 = new SistemaDeEcuaciones(s1.Select(x => x.ordena(l)).ToList()).ordena();
            //Paso 3 Reduccion
            var s2 = Reduccion.re(__s2, l);

            //Paso 4 Resultados
            switch (EliminacionDeGaussLinq.EvaluaNumeroDeResultados(s2))
            {
                case 1:
                    sb.AppendLine("Existen una infinidad de Resultados");
                    sb.AppendLine(s2.ToString());
                    sb.AppendLine("Una solución específica es:");
                    SistemaDeEcuaciones sde = new SistemaDeEcuaciones();
                    foreach (EcuacionLineal el in s2)
                    {
                        EcuacionLineal ee = new EcuacionLineal();
                        foreach (TerminoLineal tl in el)
                            ee.Add(new TerminoLineal(tl.Literal, tl.Coeficiente));
                        sde.Add(ee);
                    }
                    foreach (TerminoLineal t in Reduccion.PresentaResultadoInfinito(sde, 5.3))
                        sb.AppendLine(t.Literal + "=" + t.Valor.ToString("0.00"));
                    SistemaDeEcuaciones sde1 = new SistemaDeEcuaciones();
                    foreach (EcuacionLineal el in s2)
                    {
                        EcuacionLineal ee = new EcuacionLineal();
                        foreach (TerminoLineal tl in el)
                            ee.Add(new TerminoLineal(tl.Literal, tl.Coeficiente));
                        sde1.Add(ee);
                    }
                    sb.AppendLine("Otra solución específica es:");
                    foreach (TerminoLineal t in Reduccion.PresentaResultadoInfinito(sde1, -1))
                        sb.AppendLine(t.Literal + "=" + t.Valor.ToString("0.00"));
                    break;
                case 0:
                    sb.AppendLine("Existe sólo un Resultado");
                    sb.AppendLine(s2.ToString());
                    foreach (TerminoLineal t in Reduccion.PresentaResultadoUnico(s2))
                        sb.AppendLine(t.Literal + "=" + t.Valor.ToString("0.00"));
                    break;
                case -1:
                    sb.AppendLine("La ecuación es incongruente");
                    sb.AppendLine(s2.ToString());
                    break;
                default:
                    sb.AppendLine("La ecuación no se evaluó correctamente");
                    sb.AppendLine(s2.ToString());
                    break;
            }
            Result.Text = sb.ToString();
        }
예제 #3
0
        static void Main(string[] args)
        {
            double a = 2;//2 infinito y -3 incongruente
            SistemaDeEcuaciones se = new SistemaDeEcuaciones(){
                new EcuacionLineal(){
                    new TerminoLineal("x",1),
                    new TerminoLineal("y",1),
                    new TerminoLineal("z",-1),
                    new TerminoLineal("_",1)
                },
                new EcuacionLineal(){
                    new TerminoLineal("x",2),
                    new TerminoLineal("y",3),
                    new TerminoLineal("z",a),
                    new TerminoLineal("_",3)
                },
                new EcuacionLineal(){
                    new TerminoLineal("x",1),
                    new TerminoLineal("y",a),
                    new TerminoLineal("z",3),
                    new TerminoLineal("_",2)
                }
            };
            Console.WriteLine("La ecuación inicial es:");
            Console.WriteLine(se.ToString());

            //Paso 1 mismos términos
            var s1 = EliminacionDeGaussLinq.IgualaTerminos(se);
            //Paso 2 orden
            var _s2 = new SistemaDeEcuaciones(s1.Select(x => x.ordena()).ToList()).ordena();
            List<string> l = (from s in _s2[0] select s.Literal).ToList();
            var __s2 = new SistemaDeEcuaciones(s1.Select(x => x.ordena(l)).ToList()).ordena();
            //Paso 3 Reduccion
            var s2 = Reduccion.re(__s2, l);

            //Paso 4 Resultados
            switch (EliminacionDeGaussLinq.EvaluaNumeroDeResultados(s2))
            {
                case 1:
                    Console.WriteLine("Existen una infinidad de Resultados");
                    Console.WriteLine(s2.ToString());
                    Console.WriteLine("Una solución específica es:");
                    SistemaDeEcuaciones sde = new SistemaDeEcuaciones();
                    foreach (EcuacionLineal el in s2)
                    {
                        EcuacionLineal e = new EcuacionLineal();
                        foreach (TerminoLineal tl in el)
                            e.Add(new TerminoLineal(tl.Literal, tl.Coeficiente));
                        sde.Add(e);
                    }
                    foreach (TerminoLineal t in Reduccion.PresentaResultadoInfinito(sde,5.3))
                        Console.WriteLine(t.Literal + "=" + t.Valor.ToString("0.00"));
                    SistemaDeEcuaciones sde1 = new SistemaDeEcuaciones();
                    foreach (EcuacionLineal el in s2)
                    {
                        EcuacionLineal e = new EcuacionLineal();
                        foreach (TerminoLineal tl in el)
                            e.Add(new TerminoLineal(tl.Literal, tl.Coeficiente));
                        sde1.Add(e);
                    }
                    Console.WriteLine("Otra solución específica es:");
                    foreach (TerminoLineal t in Reduccion.PresentaResultadoInfinito(sde1, -1))
                        Console.WriteLine(t.Literal + "=" + t.Valor.ToString("0.00"));
                    break;
                case 0:
                    Console.WriteLine("Existe sólo un Resultado");
                    Console.WriteLine(s2.ToString());
                    foreach (TerminoLineal t in Reduccion.PresentaResultadoUnico(s2))
                        Console.WriteLine(t.Literal + "=" + t.Valor.ToString("0.00"));
                    break;
                case -1:
                    Console.WriteLine("La ecuación es incongruente");
                    Console.WriteLine(s2.ToString());
                    break;
                default:
                    Console.WriteLine("La ecuación no se evaluó correctamente");
                    Console.WriteLine(s2.ToString());
                    break;
            }
            Console.ReadKey();
        }
예제 #4
0
        static void Main(string[] args)
        {
            SistemaDeEcuaciones se = new SistemaDeEcuaciones();
            int i = 0, j = 0;
            char confirmacion = 's';
            do
            {
                Console.WriteLine("A continuacion se le solicita los detalles de su ecuacion:" + (i + 1));
                EcuacionLineal el = new EcuacionLineal();
                j = 0;
                do
                {
                    TerminoLineal tl = new TerminoLineal();
                    Console.WriteLine("Especifique el coeficiente del termino:" + (j + 1));
                    tl.Coeficiente = int.Parse(Console.ReadLine());
                    Console.WriteLine("Especifique la literal del termino:" + (j + 1) + "\n(Para indicar el termino constante, especifique '_')");
                    tl.Literal = Console.ReadLine();

                    Console.WriteLine("¿Desea especificar otro término para la ecuacion" + (i + 1)+"(s/n)?");
                    confirmacion = Console.ReadKey().KeyChar;
                    el.Add(tl);
                    j++;
                } while (confirmacion != 'n');
                if (el.Where(x => x.Literal == "_").Count() == 0)
                    el.Add(new TerminoLineal("_", 0));
                se.Add(el);
                i++;
                Console.WriteLine("¿Desea especificar otra ecuacion (s/n)?");
                confirmacion = Console.ReadKey().KeyChar;
            }
            while (confirmacion != 'n');
            Console.WriteLine("La ecuación inicial es:");
            Console.WriteLine(se.ToString());

            //Paso 1 mismos términos
            var s1 = EliminacionDeGaussLinq.IgualaTerminos(se);
            //Paso 2 orden
            var _s2 = new SistemaDeEcuaciones(s1.Select(x => x.ordena()).ToList()).ordena();
            List<string> l = (from s in _s2[0] select s.Literal).ToList();
            var __s2 = new SistemaDeEcuaciones(s1.Select(x => x.ordena(l)).ToList()).ordena();
            //Paso 3 Reduccion
            var s2 = Reduccion.re(__s2, l);

            //Paso 4 Resultados
            switch (EliminacionDeGaussLinq.EvaluaNumeroDeResultados(s2))
            {
                case 1:
                    Console.WriteLine("Existen una infinidad de Resultados");
                    Console.WriteLine(s2.ToString());
                    //foreach (string s in Reduccion.PresentaInfinidadDeResultados(s2))
                    //    Console.WriteLine(s);
                    break;
                case 0:
                    Console.WriteLine("Existe sólo un Resultado");
                    Console.WriteLine(s2.ToString());
                    foreach (TerminoLineal t in Reduccion.PresentaResultadoUnico(s2))
                        Console.WriteLine(t.Literal + "=" + t.Valor);
                    break;
                case -1:
                    Console.WriteLine("La ecuación es incongruente");
                    Console.WriteLine(s2.ToString());
                    break;
                default:
                    Console.WriteLine("La ecuación no se evaluó correctamente");
                    Console.WriteLine(s2.ToString());
                    break;
            }
            Console.ReadKey();
        }