コード例 #1
0
 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
 public static EcuacionLineal CambiaAUno(EcuacionLineal r1, double razon)
 {
     return new EcuacionLineal((from _r1 in r1
                                select new TerminoLineal(
                                    _r1.Literal,
                                    (_r1.Coeficiente * (1 / razon)))
             ).ToList());
 }
コード例 #3
0
 public static EcuacionLineal AplicacionDeSuma(EcuacionLineal r1, EcuacionLineal r2, double razon)
 {
     return new EcuacionLineal((from _r1 in r1
                                join _r2 in r2 on (_r1.Literal) equals (_r2.Literal)
                                select new TerminoLineal(
                                    _r1.Literal,
                                    (_r1.Coeficiente * razon) + _r2.Coeficiente)
             ).ToList());
 }
コード例 #4
0
 public static EcuacionLineal ordena(this EcuacionLineal el)
 {
     var ell = new EcuacionLineal((from e in el
                                   where (e.Coeficiente != 0 && e.Literal != "_")
                                     && (e.Literal != "_")
                                   orderby Math.Abs(e.Coeficiente) ascending
                                   select e).ToList());
     foreach (var elem in el.Where(x => x.Coeficiente == 0 && x.Literal != "_").Select(x => x).ToList())
         ell.Add(elem);
     foreach (var elem in el.Where(x => x.Literal == "_").Select(x => x).ToList())
         ell.Add(elem);
     return ell;
 }
コード例 #5
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();
        }
コード例 #6
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();
        }
コード例 #7
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();
        }
コード例 #8
0
 public static EcuacionLineal ordena(this EcuacionLineal sis, List<string> orden)
 {
     EcuacionLineal s = new EcuacionLineal();
     foreach (var o in orden)
         s.Add(new TerminoLineal(o, sis.obtieneCoeficiente(o)));
     return s;
 }
コード例 #9
0
 public static EcuacionLineal Libera(EcuacionLineal el)
 {
     return new EcuacionLineal((from t in el select new TerminoLineal(t.Literal, 0)).ToList());
 }