Codificación aprenderaprogramar.com: CU00255A
EJERCICIO MÉTODO DE NEWTON
Realizar un programa que simule el método de Newton para determinar el valor que hace cero una función. Utilizar la función f(x) = x3 – 5x2 + x
SOLUCIÓN
1. Objetivos:
Determinar el valor x que haga una función f(x) » 0.
2. Condicionantes:
Dado que es un proceso iterativo se debe establecer una condición de salida razonable teniendo en cuenta que a través de tanteos es muy difícil obtener soluciones exactas. La condición de salida será: |f(x)| <= e.
El método requiere el uso de la derivada de la función, por lo que hemos de limitarnos a funciones de derivada conocida.
Para evitar que circunstancias especiales den lugar a bloqueos, se limitará el número máximo de iteraciones.
3. Método o esquema de resolución:
El planteamiento gráfico es el siguiente:
A partir de un punto de tanteo, xk, se calcula su imagen f(xk) y la imagen de la derivada f'(xk). es la pendiente de la recta tangente a la función en el punto xk. Usando la ecuación de la recta y = mx + b tenemos:
f(xk) = f'(xk) · xk + b --> b = f(xk) - f'(xk) · xk
El punto xk+1 corresponde al valor de x para el que la ecuación de la recta vale cero:
0 = f(xk ) · xk+1 + b
Despejando xk+1 obtenemos:
En definitiva, a partir de un punto inicial se itera escogiendo los puntos en que la recta tangente corta al eje de abscisas hasta alcanzar un valor aproximadamente cero.
Algunos casos especiales serían:
· No existe punto de corte para el punto inicial elegido (f´(xk) = 0).
· Dinámica circular con xk = xk+2 = xk+4 = ... y xk+1 = xk +3 = xk+5 = ...
4. Datos de partida:
f(xk), función.
f´(xk), derivada de la función.
e , desviación de cero admisible.
xk, punto inicial para tanteo.
5. Resultados a obtener:
Valor de x que hace f(x) = 0, con un número de iteraciones limitado. Si se supera el número de iteraciones permitidas se muestra un mensaje y se da opción a elegir otro punto de partida. Si la derivada es cero o próxima a cero se abortará el cálculo dando opción a introducir otro punto de partida.
Pseudocódigo:
PROGRAMA NEWTON [Pseudocódigo aprenderaprogramar.com] Variables Enteras: E Reales: Origen, Valorfx, valderfx 1. Inicio 2. Mientras E <> 2 Hacer Mostrar “1. Calcular 2. Salir” Pedir E Si E = 1 Entonces Mostrar “Introduzca x de partida” Pedir Origen Llamar Calcular(Origen) PorValor FinSi Repetir 3. Fin
Módulo Calcular(xk: Reales) Variables Enteras: N, Nmax Reales: e 1. Mostrar “Indique el nº máximo de iteraciones” 2. Pedir Nmax 3. Hacer Mostrar “Indique el valor de e:” Pedir e Si e > 0,5 ó e <= 0 Entonces Mostrar “Por favor introduzca e mayor que 0 y menor de 0,5” FinSi Repetir Mientras e > 0,5 ó e <= 0 4. Hacer N = N + 1 Si N >= Nmax Entonces Mostrar “Alcanzado el número máximo de iteraciones” FinSi Llamar Fdex(xk) PorValor Si ABS(Valorfx) > e Entonces Llamar Dfx(xk) PorValor Si ABS(valderfx) > e Entonces xk = xk – Valorfx /valderfx SiNo Mostrar “Debe elegir otro punto de partida” FinSi SiNo Mostrar “La solución es x=”, xk, “con valor f(x) =”, Valorfx, “y un total de”, N, “iteraciones” FinSi Repetir Mientras ABS(Valorfx) > e y ABS(valderfx) > e y N < Nmax FinMódulo
Módulo Fdex(x: Reales) Valorfx = x ^ 3 – 5 * x ^ 2 + x FinMódulo
Módulo Dfx(z: Reales) valderfx = 3 * z ^ 2 – 10 * z + 1 FinMódulo |
Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link: Ver curso completo.
Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.