Aquí vamos:
alpha = 0.05;
NM = @(x,f)x-alpha*prod(([1,0]*f([x,1;0,x])).^[1,-1]);
f = @(x)32*x^6-48*x^4+18*x^2-x^0;
x = 0.5;
eps = 1;
while eps > 1e-5
xn = NM(x,f);
eps = abs(xn-x);
x = xn;
end
[x f(x)]
Le advierto a usted que no gire en este código a tu profesor. Probablemente se preguntará cómo funciona.
Que proporcione, de modo que usted puede ver cómo funciona el método. Sin embargo, los mecanismos de cómo este código en particular las obras son un poco complicados y es probable que más allá de su nivel. Usted tendrá que escribir su propia función. Si activa esta en el, y el profesor revisa tu código, te garantizo que va a ser penalizado por plagio.
En un serio intento de respuesta, el código anterior incluye un truco.
Una iteración del método de Newton se parece a esto:
$$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}.$$
However, if we plot our polynomial, we find that it oscillates somewhat like a sine wave centered at $x=0$. This causes a unique behavior of Newton's method: each projection of the slope throws the value to another part of the wave, and you get a "back and forth" action.
In order to accommodate this, we add a scaling parameter, $\alpha$:
$$x_{n+1} = x_n - \alpha\frac{f(x_n)}{f'(x_n)}.$$
Setting this scaling parameter such that $0 < \alfa < 1$ atenúa el efecto de la pendiente. Esto ralentiza la convergencia, pero se asegura de que no proyecto "demasiado lejos" por delante y quedar atrapado en un bucle infinito.
Examinar la diferencia entre alpha = 0.05
y alpha = 1
.