8 votos

¿Mejora de Newton ' iteración s donde la derivada es cerca de cero?

Estoy implementando una raíz-solver para encontrar la coordenada x de una función f(x), después tengo una coordenada. La función es periódica, aproximadamente sinusoidal con amplitud constante, pero no linealmente variable frecuencia; por un inversa no tengo una forma cerrada (es una serie infinita), por lo que el uso de la iteración de Newton para encontrar el valor de x en un determinado y comienzo de la iteración en$x_0$, que está más cerca del verdadero valor de algo como $x=newton(x=x_0,f(x)-y)$.

En la mayoría de los casos esto funciona bien, sin embargo si el y es en la cerca de un máximo (o mínimo) de f, en donde la forma es muy similar a la máxima de un seno de la curva, el método de newton-iteración no convergen. La wikipedia da un poco de información acerca de esto, pero no una solución. La última posibilidad sería recurrir a la búsqueda binaria, pero lo que me gustaría evitar, ya que el cálculo de f(x) es (relativamente) costoso.

¿Alguien sabe que una mejora en el espíritu de la Newton-iteración (que a menudo tiene convergencia cuadrática) para esta región yvalores?

[actualización] hmmm... tal vez sólo necesita un pequeño giro? Sólo se me ocurre, que podría ser posible para ir a lo largo de la manera cómo puedo encontrar fácilmente aproximar x para el máximo y: "he aquí que utiliza el método de Newton sobre la derivada de la función y la búsqueda del cero:
$x_{max}=newton(x=x_0,f(x)') \qquad $ y este tiene la costumbre convergencia cuadrática. Pero, ¿cómo aplicar esto para algunos y en la cerca de la máxima?

4voto

TOC Puntos 206

En la mayoría de los casos esto funciona bien, sin embargo si el eje está en la cerca de un máximo (o mínimo) de f, en donde la forma es muy similar a la máxima de un seno de la curva, el método de newton-iteración no convergen.

No convergen en qué sentido? Conocer el modo de fallo es importante en la fijación de ellos. Hay tres posibilidades principales: la iteración está convergiendo lentamente/asintóticamente, la iteración es una convergencia hacia el valor incorrecto (es decir, alejándose de la respuesta que usted desea), o la iteración se está acercando a un ciclo límite (rebotando entre 2, 3, o más valores en repetidas ocasiones).

Si tu problema es que la convergencia cerca de un mínimo es demasiado lento, y la segunda derivada no se desvanezca de allí, también, puede probar el método de Halley. El problema con el método de Halley es que cuando el estado está lejos de la raíz que puede causar el exceso, la reducción de su cuenca de convergencia. Así que, me tome una señal de "Recetas Numéricos en C," cuando se utiliza la abrazadera el efecto, de modo que no es demasiado pequeño o demasiado grande:

\begin{align} $x_{n+1} = x_n - \left(\frac{f_n}{f_n'}\right) \cdot \mathrm{CLAMP}\left(1 - \frac{f_nf_n''}{2[f'_n]^2}, \frac{1}{2}, 2\right)^{-1}. \end{align}

La capacidad de acelerar la convergencia mediante orden superior de los métodos de esta clase (Househoder métodos) es limitada, sin embargo, por el número de los instrumentos derivados que son cero. Un simple ejemplo de una función que no Newton como método de encontrar la raíz de la rapidez: $e^{-1/x^2}$, (todos sus derivados se desvanecen en $x=0$).

Si el problema es que la iteración es divergente de la raíz de la que desea encontrar a continuación, hay una realidad de fácil respuesta: repetir en la otra dirección. A ver, en cualquier proceso iterativo como este tendrá que genéricamente han atractores (puntos de la iteración será convergente, si el punto de partida está en su cuenca), repulsores (puntos de la iteración se separen), y ciclos límite (atractores de el paso doble, triple step, etc). Hace poco tuve un problema con el método de Newton siempre tratando de converger a la solución de que no me quieren en la dos de la solución problema. Voltear la señal para cambiar la dirección de la iteración fijo que muy bien, porque invierte la iteración en los lanzamientos de las funciones de atractores y repulsores.

Si el problema es que vas a emprender un ciclo límite, entonces eso es más complicado. A ver, si $x_{n+1} = g(x_n)$ es la regla de actualización, a continuación, puede definir un punto fijo como $g(x) = x$. Donde comienza el problema es $g$ implica toda una familia de reglas de actualización, llamarlos $g^{[n]}$, que son los mismos que la aplicación de $g$ $n$ veces. Los puntos fijos de $g$ serán corregidos todos los puntos de $g^{[n]}$, pero $g^{[n]}$ genéricamente tener más. Debido a la iteración en $g$ es la misma como la iteración en $g^{[n]}$, los puntos fijos de $g^{[n]}$ puede convertirse en el atractores que dominan el comportamiento de la secuencia, tirando de ella en un ciclo límite de longitud de $n$. Si suponemos, como es a menudo el caso, que el punto fijo lo que quieres es un reuplsor dentro de la cuenca de atracción de un ciclo límite, entonces usted podría ser capaz de encontrar ese punto si: 1, detectar el ciclo; 2, sintetizar una conjetura que no es para cerrar el ciclo límite de puntos (por ejemplo, un promedio de ellos, o el uso de la $x_0$ que convergieron en el ciclo en el primer lugar); y 3, recorrer hacia atrás.

Que no puede ofrecer ninguna garantía, sin más información, sin embargo, porque los de las cuencas de atracción son genéricamente fractales en forma.

2voto

Eric Angle Puntos 1464

Han considerado que la aplicación de un método híbrido? Por ejemplo, en cada paso:

SI un Newton paso sería el resultado de una iteración que está fuera de los límites donde se ha determinado la raíz debe mentir, a continuación, tomar una interseccion paso lento de Newton, pero interseccion siempre converge a una raíz y no es afectado por los extremos), o de un paso usando un método distinto a Newton que no es propenso a fallar a cerca de los extremos.

Otra COSA que proceder con un Newton paso (ya que converge cuadráticamente, como usted ha señalado).

2voto

user8134 Puntos 1273

Por demanda popular de la OP...

En el método de Newton está reemplazando su función de $y=f(x)$ mediante una aproximación lineal alrededor del punto $x_0$, $y = f(x_0) + f'(x_0) (x-x_0)$, que intersecta el eje x ( $y=0$ )$x=x_0-f(x_0)/f'(x_0)$.

En su lugar podría aproximar por una parábola como $y=f(x_0) + f'(x_0)(x-x_0) +\frac{1}{2}f''(x_0)(x-x_0)^2$, que intercepta el eje de las x en $x = x_0 -\frac{f'(x_0)\mp\sqrt{f'(x_0)-2f(x_0)f''(x_0)}}{f''(x_0)}$. Por supuesto que vas a tener el problema de tener dos, no uno, la próxima iteración de punto, pero hay varias maneras de conseguir alrededor de estas: elegir el más cercano, siempre se mueven hacia arriba (o hacia abajo), elija los que tienen un menor $f(x_0)$...

1voto

Philip Fourie Puntos 12889

No puedo decirte el costo de esta idea, pero tal vez podría funcionar:

Usted está tratando de resolver una raíz de $g$ donde $g(x)=f(x)-y$ y quieres que tu solución en un barrio de $x_0$. Vamos a llamar a que la solución de $x_s$. El problema es que $g'(x)$ es demasiado pequeña cerca de $x_s$, por lo que en el algoritmo de Newton se divide por cosas muy pequeñas, produciendo grandes cambios de $x_i$$x_{i+1}$; posiblemente tan grande que el algoritmo converge a una solución diferente o no en absoluto.

Así que lo que si usted diseñó un sustituto de la función $\tilde{g}$, que todavía satisfecha la demanda que $\tilde{g}(x_s)=0$, pero ha $\tilde{g}'(x_s)$ no tan pequeños. Por ejemplo, $\tilde{g}(x)$ igual $g(x)\cdot\ln|g(x)|$. Esto ha $\lim_{x\to x_s}\tilde{g}(x)=0$ e ha $\tilde{g}'(x)=g'(x)\cdot(1+\ln|g(x)|)$. El valor absoluto de a $\tilde{g}'(x_s)$ va a ser bastante mayor que la de $g'(x_s)$.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X