Exemple #1
0
        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);
        }
Exemple #2
0
        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 }));
        }
Exemple #3
0
 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));
 }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }