Beispiel #1
0
        public Polinomio retornarPolinomio(List <List <float> > fs, List <float> xs)
        {
            String    polinomioSinResolver = "P(x)=";
            Polinomio polInterpolante      = new Polinomio();

            for (int j = 0; j < fs.Count; j++)
            {
                if (fs[j].Count != 0)//sin este if rompe al tener solo un punto
                {
                    Polinomio termino = new Polinomio();
                    termino.AgregarCoeficiente(1);

                    polinomioSinResolver += fs[j].First().ToString();
                    for (int i = 0; i < j; i++)
                    {
                        Polinomio aux = new Polinomio();
                        aux.AgregarCoeficiente(-xs[i]);
                        aux.AgregarCoeficiente(1);
                        polinomioSinResolver += "(x-" + xs[i] + ")";
                        termino = termino.Multiplicar(aux);
                    }
                    if (j != fs.Count - 1)
                    {
                        polinomioSinResolver += "+";
                    }
                    termino         = termino.MultiplicarEscalar(fs[j].First());
                    polInterpolante = polInterpolante.Sumar(termino);
                    pasos.Add(polinomioSinResolver);
                }
            }
            return(polInterpolante);
        }
Beispiel #2
0
        public Polinomio Multiplicar(Polinomio polinomio)
        {
            List <float> coeficientes1 = coeficientes;
            List <float> coeficientes2 = polinomio.GetCoeficientes();

            List <float> coeficientesProducto = new List <float>();

            for (int i = 0; i < Grado() + polinomio.Grado() - 1; i++)
            {
                coeficientesProducto.Add(0);
            }

            for (int i = 0; i < Grado(); i++)
            {
                for (int j = 0; j < polinomio.Grado(); j++)
                {
                    coeficientesProducto[i + j] += coeficientes1[i] * coeficientes2[j];
                }
            }

            for (int i = 0; i < Grado() + polinomio.Grado() - 1; i++)
            {
                Console.WriteLine(coeficientesProducto[i]);
            }

            return(new Polinomio(coeficientesProducto));
        }
Beispiel #3
0
        public Polinomio aplicar(Dictionary <float, float> tablaValores)
        {
            reset();
            int grado = tablaValores.Count() - 1;

            xs = tablaValores.Keys.ToList();
            ys = tablaValores.Values.ToList();
            ls = new List <Polinomio>();

            int n = tablaValores.Count();

            int a = 0;

            pasos.Add("Calcular los Li(Xi)");
            foreach (var raiz in xs)
            {
                var xsNew = xs.Where(x => x != raiz).ToList();

                var pol = new Polinomio();
                pol.coeficientes.Add(1);
                foreach (var raizNew in xsNew)
                {
                    List <float> coefAux = new List <float>();
                    coefAux.Add(-raizNew);
                    coefAux.Add(1);
                    pol = pol.Multiplicar(new Polinomio(coefAux));
                }
                float denominador = 1;
                foreach (var raizNew in xsNew)
                {
                    denominador *= (xs.First(x => x == raiz) - raizNew);
                }
                pol = pol.DividirEscalar(denominador);
                a++;
                ls.Add(pol);
                pasos.Add("L" + a + "(" + raiz + ") = " + pol.Formatear());
            }
            int y = 0;

            Polinomio polInterpolante = new Polinomio();

            pasos.Add("Calcular el polinomio interpolante");

            foreach (var imagen in ys)
            {
                Polinomio polAux = ls[y].MultiplicarEscalar(imagen);
                polInterpolante = polInterpolante.Sumar(polAux);
                y++;
            }

            for (int b = 0; b < polInterpolante.coeficientes.Count; b++)
            {
                //polInterpolante.coeficientes[b] = (float) Math.Truncate(polInterpolante.coeficientes[b] * 10000) / 10000;
                polInterpolante.coeficientes[b] = (float)Math.Round(polInterpolante.coeficientes[b], 4);
            }

            pasos.Add("P(X)=" + polInterpolante.Formatear());
            return(polInterpolante);
        }
Beispiel #4
0
 private void Button1_Click(object sender, EventArgs e)
 {
     if (interpolador.tablaPuntosVacia())
     {
         MessageBox.Show("Error: Debe agregar al menos un punto para continuar", "Error al calcular polinomio interpolante", MessageBoxButtons.OK);
     }
     else
     {
         if (!polinomioCalculado)
         {
             if (metodos.Text == "")
             {
                 MessageBox.Show("Error: Debe seleccionar un método para continuar", "Error al calcular polinomio interpolante", MessageBoxButtons.OK);
             }
             else
             {
                 polInterpolante = interpolador.obtenerPolinomioInterpolador();
                 ContainerPolinomioInterpolante.Text = polInterpolante.Formatear();
                 if (mostrarPasosBox.Checked)
                 {
                     CargarPasos();
                 }
                 ContainerGrado.Text          = polInterpolante.getGrado().ToString();
                 ContainerEquiespaciados.Text = interpolador.Equiespaciados();
                 polinomioCalculado           = true;
             }
         }
         else
         {
             if (interpolador.necesitaRecalcular(polInterpolante))
             {
                 ContainerPasos.Text += "El polinomio interpolante no es el mismo calculado anteriormente, se va a recalcultar..." + Environment.NewLine;
                 polinomioCalculado   = false;
                 Button1_Click(sender, e);
             }
             else
             {
                 ContainerPasos.Text += "El polinomio interpolante se mantiene igual con los nuevos puntos, no se necesita recalcular" + Environment.NewLine;
             }
         }
     }
 }
Beispiel #5
0
        public bool necesitaRecalcular(Polinomio polInterpolante)
        {
            bool respuesta = false;

            if (polInterpolante.getGrado() >= tablaPuntos.Count)
            {
                return(true);
            }

            foreach (var par in tablaPuntos)
            {
                float key   = par.Key;
                float value = par.Value;
                respuesta = polInterpolante.Evaluar(key) != value;
                if (respuesta == true)
                {
                    return(respuesta);
                }
            }
            return(respuesta);
        }
Beispiel #6
0
        public Polinomio aplicar(Dictionary <float, float> tablaValores)
        {
            xs = tablaValores.Keys.ToList();
            ys = tablaValores.Values.ToList();
            fs = new List <List <float> >();
            int contadorf = 1;

            fs.Add(ys);
            calcularF(ys, contadorf);
            Polinomio polInter = formula.retornarPolinomio(fs, xs);

            pasos.Add("Armamos el polinomio interpolante: ");
            pasos.AddRange(formula.obtenerPasos());

            for (int b = 0; b < polInter.coeficientes.Count; b++)
            {
                //polInter.coeficientes[b] = (float)Math.Truncate(polInter.coeficientes[b] * 10000) / 10000;
                polInter.coeficientes[b] = (float)Math.Round(polInter.coeficientes[b], 4);
            }
            pasos.Add("P(x) = " + polInter.Formatear());
            return(polInter);
        }
Beispiel #7
0
        public Polinomio Sumar(Polinomio polinomio)
        {
            Polinomio resultado = new Polinomio();

            for (int i = 0; i < Grado(); i++)
            {
                resultado.AgregarCoeficiente(coeficientes[i]);
            }

            for (int i = 0; i < polinomio.Grado(); i++)
            {
                if (i < resultado.GetCoeficientes().Count)
                {
                    resultado.GetCoeficientes()[i] += polinomio.GetCoeficientes()[i];
                }
                else
                {
                    resultado.AgregarCoeficiente(polinomio.GetCoeficientes()[i]);
                }
            }
            return(resultado);
        }