public ResultadoRaizAbiertos Tangente(ResultadoRaizAbiertos nuevoResultado, Function f) { Argument Xini = new Argument(" x = " + nuevoResultado.Xini.ToString(CultureInfo.InvariantCulture)); Argument Xr = new Argument(" x = 0 "); Expression Fxini = new Expression("f(x)", f, Xini); Expression Fxr = new Expression("f(x)", f, Xr); if ((Math.Abs(Fxini.calculate()) < nuevoResultado.Tolerancia) && (Fxini.calculate() == 0)) { nuevoResultado.valorRaiz = nuevoResultado.Xini; } else { int c = 0; double Xant = 0; bool Bandera = false; double aux = nuevoResultado.Xini + 0.0001; Argument Xiniderivada = new Argument(" x = " + aux.ToString(CultureInfo.InvariantCulture)); Expression Fxiniderivada = new Expression("f(x)", f, Xiniderivada); double Derivada = (Fxiniderivada.calculate() - Fxini.calculate()) / 0.0001; if (Derivada != 0) { double xr = nuevoResultado.Xini - (Fxini.calculate() / Derivada); Xr = new Argument(" x = " + xr.ToString(CultureInfo.InvariantCulture)); Fxr = new Expression("f(x)", f, Xr); nuevoResultado.error = Math.Abs(xr - Xant) / xr; while ((Math.Abs(Fxr.calculate()) > nuevoResultado.Tolerancia) && (Math.Abs(nuevoResultado.error) > nuevoResultado.Tolerancia) && (c < nuevoResultado.iteraciones)) { nuevoResultado.error = Math.Abs(xr - Xant) / xr; Xant = xr; nuevoResultado.Xini = xr; Xini = new Argument(" x = " + nuevoResultado.Xini.ToString(CultureInfo.InvariantCulture)); Fxini = new Expression("f(x)", f, Xini); aux = nuevoResultado.Xini + 0.0001; Xiniderivada = new Argument(" x = " + aux.ToString(CultureInfo.InvariantCulture)); Fxiniderivada = new Expression("f(x)", f, Xiniderivada); Derivada = (Fxiniderivada.calculate() - Fxini.calculate()) / 0.0001; xr = nuevoResultado.Xini - (Fxini.calculate() / Derivada); Xr = new Argument(" x = " + xr.ToString(CultureInfo.InvariantCulture)); Fxr = new Expression("f(x)", f, Xr); c++; } nuevoResultado.valorRaiz = nuevoResultado.Xini; nuevoResultado.error = Math.Abs(nuevoResultado.error); nuevoResultado.iteraciones = c; } } return(nuevoResultado); }
public ResultadoRaizAbiertos Secante(ResultadoRaizAbiertos nuevoResultado, Function f) { Argument X0 = new Argument(" x = " + nuevoResultado.x0.ToString(CultureInfo.InvariantCulture)); Argument X1 = new Argument(" x = " + nuevoResultado.x1.ToString(CultureInfo.InvariantCulture)); Argument Xr = new Argument(" x = 0 "); Expression Fx0 = new Expression("f(x)", f, X0); Expression Fx1 = new Expression("f(x)", f, X1); Expression Fxr = new Expression("f(x)", f, Xr); int c = 0; if ((Fx0.calculate() * Fx1.calculate()) == 0) { nuevoResultado.valorRaiz = nuevoResultado.Xini; } else { double xr = 0; double Xant = 0; xr = ((Fx1.calculate() * nuevoResultado.x0) - (Fx0.calculate() * nuevoResultado.x1)) / (Fx1.calculate() - Fx0.calculate()); Xr = new Argument(" x = " + xr); nuevoResultado.error = Math.Abs(xr - Xant) / xr; while ((nuevoResultado.error >= nuevoResultado.Tolerancia) && (c <= nuevoResultado.iteraciones)) { Xant = xr; nuevoResultado.x0 = nuevoResultado.x1; nuevoResultado.x1 = xr; X0 = new Argument(" x = " + nuevoResultado.x0.ToString(CultureInfo.InvariantCulture)); X1 = new Argument(" x = " + nuevoResultado.x1.ToString(CultureInfo.InvariantCulture)); Fx0 = new Expression("f(x)", f, X0); Fx1 = new Expression("f(x)", f, X1); xr = (Fx1.calculate() * nuevoResultado.x0 - Fx0.calculate() * nuevoResultado.x1) / (Fx1.calculate() - Fx0.calculate()); nuevoResultado.error = Math.Abs(xr - Xant) / xr; Xr = new Argument(" x = " + xr.ToString(CultureInfo.InvariantCulture)); c++; } nuevoResultado.valorRaiz = nuevoResultado.x1; nuevoResultado.error = Math.Abs(nuevoResultado.error); nuevoResultado.iteraciones = c; } nuevoResultado.iteraciones = c; return(nuevoResultado); }