Sei sulla pagina 1di 3

Método de Newton-Raphson y Ruffini para raíces reales y complejas de polinomios

Variables globales

x0: Solución inicial aproximada para Newton-Raphson. (dato)


x1: Solución encontrada por Newton-Raphson.
A[50]: Vector de coeficientes del polinomio A. (dato)
B[50]: Vector cociente obtenido con Ruffini.
epsilon: Cota de error. (dato)
n: Grado del polinomio A. (dato)
imax: Número máximo de iteraciones. (dato)
niter: Número de iteraciones utilizadas. (dato)

Algoritmo

Función Cargar_Datos()
{
Ingresar n
Desde i=n hasta 0 paso -1
Ingresar A[i]
Findesde
Ingresar X0
Ingresar épsilon
Ingresar imax
}

Función f(double x) //Función F(x) evaluada en x.


{
entero i; //indice de ciclo.
double s; //sumatoria.
s=0;
desde i=n hasta 0 paso -1
s = s + ( A[i] * xi );
findesde
return s;
}

Función fp(double x) //Derivada primera de F(x) evaluada en x.


{
Entero i //indice de ciclo.
double s //sumatoria.
s=0
desde i=n hasta 1 paso -1
s = s + ( i * A[i] * xi-1 )
findesde
return s
}

Función Newton_Raphson() //Método de Newton-Raphson. x1 es la solución encontrada.


{
k=1
fin = false
mientras(k <= imax and fin == false)
x1 = x0 - (f(x0) / fp(x0))
si ( | x1 - x0 | < epsilon) //solución encontrada. fin del método.
niter=k
mostrar “solución en “,niter,”iteraciones”
mostrar x1
fin == true //detener ciclo.
sino
k = k + 1 //contador de iteraciones.
x0 = x1; //copiamos x1 en x0 para la prox. iteración.
finsi
fin mientras
si(k > imax)
mostrar”cantidad de iteraciones insuficiente”
finsi
}

Función Ruffini() //x1=raíz para dividir por Ruffini.


{
entero i
B[n-1] = A[n]
Desde i=n-1 hasta 1 paso-1
B[i-1] = A[i] + (x1 * B[i]) //B es el polinomio cociente.
findesde
}

Función Metodo()
{
entero cod_error //Valor de retorno de la función Newton-Raphson.
entero k, i //Indices de ciclo.
double disc //Discriminante de cuadrática.

k=1
Fin = false
Mostrar "Raices:"
Mientras(k <0 imax and fin == false)
{
Newton_Raphson()
//Si Newton-Raphson no tuvo problema. Muestro raíz encontrada.
Mostrar “x“, n ,” = ”,x1
//Hace Ruffini con raíz X1 para calcular vector cociente Bi.
Ruffini()
//Grado del polinomio B (cociente obtenido con Ruffini).
n=n-1
si(n == 2)
//Polinomio final B es cuadrático. Calcular raíces.
fin = true //Detener ciclo.
disc=(B[1]*B[1]) - (4*B[2]*B[0])
si(disc >= 0)
mostrar “x2=”, -1*B[1]-sqrt(disc)) / (2*B[2])
mostrar “x1=”, -1*B[1]+sqrt(disc)) / (2*B[2])
sino
mostrar "x2=”,-1*B[1]/(2*B[2])," + ",sqrt(-1*disc)/(2*B[2])," i"
mostrar "x1=”,-1*B[1]/(2*B[2])," - ",sqrt(-1*disc)/(2*B[2])," i"
sino
si(n == 1)
fin = true //Detener ciclo.
mostrar “x1=”, -1*B[0]/B[1]
mostrar "Solución en ", k ," iteraciones"
return 0
sino
//El grado es 3 o más.
k = k + 1 //Contador de iteraciones.
//Valor inicial de prox. iteracion es x1
x0 = x1
//Polinomio de sig. iteración son los Bi encontrados con Ruffini.
Desde i=n hasta 0 paso -1
A[i] = B[i]
findesde
findmientras
si(k > imx)
mostrar "Sin solución en”, imax , ”iteraciones"
finsi
}

Función Main() //Función Principal.


{
Entero r
Cargar_Datos()
Metodo()
return 0
}

Potrebbero piacerti anche