public double Secante(FormulaInputZeroFuncaoModel input) { double x, fx0, fx1, x0, x1; x0 = input.A; x1 = (double)input.B; int LIMITE = 10000; do { fx0 = F(x0); fx1 = F(x1); if (fx0 == 0) { return(x0); } if (fx1 == 0) { return(x1); } x = (x0 * fx1 - x1 * fx0) / ((fx1 - fx0) > 0 ? (fx1 - fx0) : 1); x0 = x1; x1 = x; LIMITE--; } while (Math.Abs(F(x)) > input.Erro && LIMITE > 0); return(x); }
public double ZerarFuncao(FormulaInputZeroFuncaoModel input) { //Faz reflection para executar a fórmula que o usuário escolheu Funcao = FuncaoHelper.Clean(input.Funcao); Type classe = Type.GetType("WebApplication1.Metodos.MetodosHub"); MethodInfo metodoCalculo = classe.GetMethod(input.Metodo.ToString()); return((double)metodoCalculo.Invoke(this, new object[] { input })); }
public ActionResult ZeroFuncao(FormulaInputZeroFuncaoModel model) { if (ModelState.IsValid && model.Metodo != 0 && (model.Metodo != ZeroFuncaoEnum.Newton_Ralphson || (model.B == null && !string.IsNullOrEmpty(model.Derivada)))) { var result = new ResultadoZeroFuncaoModel() { FormulaInput = model }; result.Resultado = new MetodosHub().ZerarFuncao(model); //Workaround por conta de problema na passagem de model contendo model TempData["re"] = result; return(RedirectToAction("ResultadoZeroFuncao")); } return(View("ZeroFuncao", model)); }
public double Newton_Ralphson(FormulaInputZeroFuncaoModel input) { string derivada = FuncaoHelper.Clean(input.Derivada); double x, f, x0, flinha; x0 = input.A; int LIMITE = 10000; do { f = F(x0); flinha = F_linha(x0, derivada); if (f == 0) { return(x0); } x = x0 - (f / (flinha > 0 ? flinha : 1)); x0 = x; LIMITE--; } while (Math.Abs(F(x)) > input.Erro && LIMITE > 0); return(x); }
public double Posicao_Falsa(FormulaInputZeroFuncaoModel input) { double x, fa, fb, a, b; a = input.A; b = (double)input.B; do { fa = F(a); fb = F(b); if (fa == 0) { return(a); } if (fb == 0) { return(b); } x = (a * fb - b * fa) / ((fb - fa) > 0 ? (fb - fa) : 1); a = ((x > 0 && a > 0) || (x < 0 && a < 0)) ? x : a; b = ((x > 0 && b > 0) || (b < 0 && b < 0)) ? x : b; } while (Math.Abs(F(x)) > input.Erro); return(x); }
public double Bisseccao(FormulaInputZeroFuncaoModel input) { double x, fa, fb, a, b; a = input.A; b = (double)input.B; do { fa = F(a); fb = F(b); if (fa == 0) { return(a); } if (fb == 0) { return(b); } x = (a + b) / 2; a = ((x > 0 && a > 0) || (x < 0 && a < 0)) ? x : a; b = ((x > 0 && b > 0) || (b < 0 && b < 0)) ? x : b; } while (Math.Abs(F(x)) > input.Erro); return(x); }