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; }
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()); }
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()); }
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; }
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(); }
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(); }
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(); }
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; }
public static EcuacionLineal Libera(EcuacionLineal el) { return new EcuacionLineal((from t in el select new TerminoLineal(t.Literal, 0)).ToList()); }