コード例 #1
0
        public string Lagrange(InterpolacaoModel input)
        {
            var n      = input.Pontos.Length / 2;
            var funcao = "P" + n.ToString() + "(x)= ";

            string[] L = new string[n];
            for (int i = 0; i < input.Pontos.Length; i += 2)
            {
                var den = 1.0;
                var num = new Polynomial(1.0);
                for (int j = 0; j < input.Pontos.Length; j += 2)
                {
                    if (i != j)
                    {
                        num *= new Polynomial(0, 1.0) - new Polynomial(double.Parse(input.Pontos[j]));
                        den *= (float.Parse(input.Pontos[i]) - float.Parse(input.Pontos[j]));
                    }
                }
                L[i / 2] = "L" + (i / 2).ToString() + "(x) = (" + num.ToString() + ")/(" + den.ToString() + ")";
                funcao  += input.Pontos[i + 1] + "*L" + (i / 2).ToString() + "(x) + ";
            }
            funcao = funcao.Remove(funcao.Length - 2);

            foreach (var item in L)
            {
                funcao += item + "\n";
            }
            return(funcao);
        }
コード例 #2
0
        public string InterpolarPontos(InterpolacaoModel input)
        {
            //Faz reflection para executar a fórmula que o usuário escolheu
            Type       classe        = Type.GetType("WebApplication1.Metodos.MetodosHub");
            MethodInfo metodoCalculo = classe.GetMethod(input.Metodo.ToString());

            return((string)metodoCalculo.Invoke(this, new object[] { input }));
        }
コード例 #3
0
        public ActionResult Interpolacao(InterpolacaoModel model)
        {
            if (ModelState.IsValid && model.Metodo != 0)
            {
                model.Pontos = model.PontosString.Replace(" ", "").Replace("(", "").Replace(")", "").Split(',');

                var result = new ResultadoInterpolacaoModel()
                {
                    InterpolacaoInput = model
                };
                result.Resultado = new MetodosHub().InterpolarPontos(model);
                //Workaround por conta de problema na passagem de model contendo model
                TempData["re"] = result;
                return(RedirectToAction("ResultadoInterpolacao"));
            }
            return(View("Interpolacao", model));
        }
コード例 #4
0
        public string Spline(InterpolacaoModel input)
        {
            var result = "";

            for (int i = 2; i < input.Pontos.Length; i += 2)
            {
                var num = (new Polynomial(double.Parse(input.Pontos[i - 1])) *
                           (new Polynomial(double.Parse(input.Pontos[i])) - new Polynomial(0, 1.0))
                           + new Polynomial(double.Parse(input.Pontos[i + 1])) *
                           (new Polynomial(0, 1.0) - new Polynomial(double.Parse(input.Pontos[i - 2])))).ToString();

                var den = (double.Parse(input.Pontos[i]) - double.Parse(input.Pontos[i - 2]))
                          .ToString();

                result += "S" + (i / 2).ToString() + "(x) = (" + num + ")/(" + den + ")\n";
            }
            return(result);
        }
コード例 #5
0
        public string Trigonometrica(InterpolacaoModel input)
        {
            var n = input.Pontos.Length / 2;

            float[] xk     = new float[n];
            var     result = "";
            var     m      = Math.Floor((decimal)n / 2);

            for (int i = 0; i < n; i++)
            {
                xk[i] = (float)(i * 2.0 * Math.PI) / n;
            }

            string[] As = new string[(int)m + 1];
            string[] Bs = new string[(int)m + 1];
            for (int i = 0; i <= m; i++)
            {
                var sumA = 0.0;
                var sumB = 0.0;
                for (int j = 0; j < n; j++)
                {
                    sumA += float.Parse(input.Pontos[2 * j + 1]) * Math.Cos(i * xk[j]);
                    sumB += float.Parse(input.Pontos[2 * j + 1]) * Math.Sin(i * xk[j]);
                }
                sumA = 2.0 / n * sumA;
                sumB = 2.0 / n * sumB;

                As[i] = ((float)Math.Round(sumA * 100f) / 100f).ToString();
                Bs[i] = ((float)Math.Round(sumB * 100f) / 100f).ToString();
            }

            var imax = m % 2 == 0 ? m - 1 : m;

            for (int i = 1; i <= imax; i++)
            {
                result += " (" + As[i] + "*Cos(" + i.ToString() + "*x) + " + Bs[i] + "*Sen(" + i.ToString() + "*x)) +";
            }
            result = (double.Parse(As[0]) / 2).ToString() + " + [" + result.Remove(result.Length - 1) + "]";
            if (m % 2 == 0)
            {
                result = result + " + " + (double.Parse(As[(int)m]) / 2).ToString() + "*Cos(" + m.ToString() + "*x)";
            }
            return("f(x) = " + result);
        }
コード例 #6
0
        public string Newton(InterpolacaoModel input)
        {
            var n       = input.Pontos.Length / 2;
            var f_start = "P" + n.ToString() + "(x) = ";

            var vet  = new List <int>();
            var mult = new Polynomial(1.0);

            vet.Add(0);
            var funcao = new Polynomial(DiferencaDividida(vet, input.Pontos));

            for (int i = 0; i < input.Pontos.Length - 2; i += 2)
            {
                vet.Add(i + 2);
                mult   *= (new Polynomial(0, 1.0) - new Polynomial(double.Parse(input.Pontos[i])));
                funcao += new Polynomial((float)Math.Round(DiferencaDividida(vet, input.Pontos) * 100f) / 100f) * mult;
            }

            return(funcao.ToString());
        }