¿Crear un programa en c++ que halle la raíz cuadrada de un número?

Ejemplo el usuario deberá indicar el número (por ejemplo 2) y el índice de la raíz (3 por ejemplo para la raíz cúbica). Nota : hallar la raíz cúbica de 2 es lo mismo que elevar 2 a 1/3.

Respuesta
1

Intenta por el metodo recursivo Newton - Rhapson. Si tienes

$$\begin{align}&f(x)=x^n-a=0\end{align}$$

entonces sea x0 un número que se aproxima a la solución de f(x) = 0, entonces

$$\begin{align}&x_1= x_0-\dfrac{f(x_0)}{f'(x_0)}=x_0-\dfrac{x_0^n-a}{n\cdot x_0^{n-1}}\\&\\&\text{Luego}\\&\\&x_{i+1}=x_i-\dfrac{x_{i}^n-a}{n\cdot x_{i}^{n-1}}~,\text{ con }i\geq 0\text{ y }n\in \mathbb N \text{ fijo}\end{align}$$
//Calculo de la raiz enesima de un numero por el metodo
//de Newton-Rhapson
double potenciaNesima(double x, int n){
  double X=1;
  for(int i = 1; i<=n; i++) X=X*x;
  return X;
}
// buscara un numero de partida para el metodo de N-R
double buscaINI(double x, int n){
  double dif, dif1 = x/n;
  int cont = 0;
  if (x==1) return 1;
  if (x==0) return 0;
  for(double i = 0; i < x/n; i+=0.01)
  {
    dif = x - potenciaNesima(i,n);
    if (dif < 0) dif = - dif;
    if (dif1 > dif && cont == 0) dif1 = dif;
    if (dif1 < dif) return dif1;
    cont++;
  }
}
double raizNesima (double x,int n){
  double a;
  int ITERACIONES = 20;
  a = buscaINI(x,n);
  for(int i = 1; i<= ITERACIONES; i++){
    a = a - (potenciaNesima(a,n)-x)/(n*potenciaNesima(a,n-1));
  }
  return a;
}

En la función raizNesima, se puede agregar un return cuando x = 0 o cuando x = 1, también se puede modificar el valor de ITERACIONES segun el valor de n.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas