/// <summary> /// Encuentra la raiz aplicando el método de Newton /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="p"></param> /// <param name="p_derivada"></param> /// <returns></returns> public static double Newton(double a, double b, IPolinomio p) { IPolinomio p_derivada_primera = (IPolinomio)p.Clone(), p_derivada_segunda; p_derivada_primera.Derivar(); p_derivada_segunda = (IPolinomio)p_derivada_primera.Clone(); p_derivada_segunda.Derivar(); double x_o; double xn; xn = b; double pa = p.Resolver(a); double pda = p_derivada_segunda.Resolver(a); if (pa * pda > 0) { xn = a; } x_o = xn + 1; while (xn != x_o) { x_o = xn; xn = x_o - p.Resolver(x_o) / p_derivada_primera.Resolver(x_o); } return xn; }
/// <summary> /// Encuentra la raiz aplicando el método de Newton /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="p"></param> /// <param name="p_derivada"></param> /// <returns></returns> public static double Newton(double a, double b, IPolinomio p) { IPolinomio p_derivada_primera = (IPolinomio)p.Clone(), p_derivada_segunda; p_derivada_primera.Derivar(); p_derivada_segunda = (IPolinomio)p_derivada_primera.Clone(); p_derivada_segunda.Derivar(); double x_o; double xn; xn = b; double pa = p.Resolver(a); double pda = p_derivada_segunda.Resolver(a); if (pa * pda > 0) { xn = a; } x_o = xn + 1; while (xn != x_o) { x_o = xn; xn = x_o - p.Resolver(x_o) / p_derivada_primera.Resolver(x_o); } return(xn); }
void IValorActualNeto.ResolverInterés() { double S = 0, M = 0, D = 0, cotaInf, cotaSup; IPolinomio p = this.construirPolinomio(); calcularS_M_D(ref S, ref M, ref D); cotaInf = this.calcularCotaInf(S, M); cotaSup = this.calcularCotaSup(S, D); _XunoMasK = Polinomio.Newton(cotaInf, cotaSup, p); //double b = p.Resolver(1.16); _i = 0; _r = 0; _interesValido = false; }