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); }
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 })); }
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)); }
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); }
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); }
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()); }