Cómo usar el método Newton-Raphson para encontrar las raíces de [matemáticas] 2x ^ {4} -x ^ {3} -4x ^ {2} + x + 1 [/ matemáticas]

Aquí hay una función corta para calcular los valores de la función

función x = poli (x1)

x = 2 * x1 ^ 4 – x1 ^ 3 – 4 * x1 ^ 2 + x1 +1;
fin

Ok, entonces tengo un script genérico de método de Newton. Lo reescribí para la función.

x = 1.5;
Tol = 0,0000001;
cuenta = 0;
dx = 1.5; % este es un valor falso para que el ciclo while se ejecute
f = .25; % porque f (-2) = – 13
fprintf (‘paso x dx f (x) \ n’)
fprintf (‘—- ———– ——— ———- \ n’)
fprintf (‘% 3i% 12.8f% 12.8f% 12.8f \ n’, cuenta, x, dx, f)
xVec = x; fVec = f;
while (dx> Tol || abs (f)> Tol)% tenga en cuenta que es necesario definir dx yf para que esta declaración continúe
cuenta = cuenta + 1;
fprime = 8 * x ^ 3 -3 * x ^ 2 -8 * x + 1;
xnew = x – (f / fprime); % calcula el nuevo valor de x
dx = abs (x-xnuevo); % calcula cuánto x ha cambiado desde el último paso
x = xnuevo;
f = 2 * x ^ 4 -x ^ 3 -4 * x ^ 2 + x +1; % calcula el nuevo valor de f (x)
fprintf (‘% 3i% 12.8f% 12.8f% 12.8f \ n’, cuenta, x, dx, f)
fin

paso x dx f (x)
—- ———– ——— ———-
0 1.50000000 1.50000000 0.25000000
1 1.47297297 0.02702703 0.01329742
2 1.47136583 0.00160714 0.00004546
3 1.47136030 0.00000553 0.00000000
4 1.47136030 0.00000000 0.00000000
>>
x = 1;

Tol = 0,0000001;
cuenta = 0;
dx = 1.5; % este es un valor falso para que el ciclo while se ejecute
f = -1; % porque f (-2) = – 13
fprintf (‘paso x dx f (x) \ n’)
fprintf (‘—- ———– ——— ———- \ n’)
fprintf (‘% 3i% 12.8f% 12.8f% 12.8f \ n’, cuenta, x, dx, f)
xVec = x; fVec = f;
while (dx> Tol || abs (f)> Tol)% tenga en cuenta que es necesario definir dx yf para que esta declaración continúe
cuenta = cuenta + 1;
fprime = 8 * x ^ 3 -3 * x ^ 2 -8 * x + 1;
xnew = x – (f / fprime); % calcula el nuevo valor de x
dx = abs (x-xnuevo); % calcula cuánto x ha cambiado desde el último paso
x = xnuevo;
f = 2 * x ^ 4 -x ^ 3 -4 * x ^ 2 + x +1; % calcula el nuevo valor de f (x)
fprintf (‘% 3i% 12.8f% 12.8f% 12.8f \ n’, cuenta, x, dx, f)
fin

paso x dx f (x)
—- ———– ——— ———-
0 1.00000000 1.50000000 -1.00000000
1 0.50000000 0.50000000 0.50000000
2 0.68181818 0.18181818 -0.06242743
3 0.66297777 0.01884041 -0.00019528
4 0.66291844 0.00005934 -0.00000000
5 0.66291844 0.00000000 -0.00000000
>>
x = -.5;
Tol = 0,0000001;
cuenta = 0;
dx = 1.5; % este es un valor falso para que el ciclo while se ejecute
f = -33 / 64; % porque f (-2) = – 13
fprintf (‘paso x dx f (x) \ n’)
fprintf (‘—- ———– ——— ———- \ n’)
fprintf (‘% 3i% 12.8f% 12.8f% 12.8f \ n’, cuenta, x, dx, f)
xVec = x; fVec = f;
while (dx> Tol || abs (f)> Tol)% tenga en cuenta que es necesario definir dx yf para que esta declaración continúe
cuenta = cuenta + 1;
fprime = 8 * x ^ 3 -3 * x ^ 2 -8 * x + 1;
xnew = x – (f / fprime); % calcula el nuevo valor de x
dx = abs (x-xnuevo); % calcula cuánto x ha cambiado desde el último paso
x = xnuevo;
f = 2 * x ^ 4 -x ^ 3 -4 * x ^ 2 + x +1; % calcula el nuevo valor de f (x)
fprintf (‘% 3i% 12.8f% 12.8f% 12.8f \ n’, cuenta, x, dx, f)
fin

>> newton1
paso x dx f (x)
—- ———– ——— ———-
0 -0.50000000 1.50000000 -0.51562500
1 -0.34134615 0.15865385 0.25951027
2 -0.42606937 0.08472322 -0.00895327
3 -0.42331043 0.00275895 -0.00000423
4 -0.42330912 0.00000130 -0.00000000
5 -0.42330912 0.00000000 -0.00000000
>>
x = -3/2;
Tol = 0,0000001;
cuenta = 0;
dx = 1.5; % este es un valor falso para que el ciclo while se ejecute
f = 43/4; % porque f (-2) = – 13
fprintf (‘paso x dx f (x) \ n’)
fprintf (‘—- ———– ——— ———- \ n’)
fprintf (‘% 3i% 12.8f% 12.8f% 12.8f \ n’, cuenta, x, dx, f)
xVec = x; fVec = f;
while (dx> Tol || abs (f)> Tol)% tenga en cuenta que es necesario definir dx yf para que esta declaración continúe
cuenta = cuenta + 1;
fprime = 8 * x ^ 3 -3 * x ^ 2 -8 * x + 1;
xnew = x – (f / fprime); % calcula el nuevo valor de x
dx = abs (x-xnuevo); % calcula cuánto x ha cambiado desde el último paso
x = xnuevo;
f = 2 * x ^ 4 -x ^ 3 -4 * x ^ 2 + x +1; % calcula el nuevo valor de f (x)
fprintf (‘% 3i% 12.8f% 12.8f% 12.8f \ n’, cuenta, x, dx, f)
fin

paso x dx f (x)
—- ———– ——— ———-
0 -1.50000000 1.50000000 10.75000000
1 -0.98192771 0.51807229 -1.03260480
2 -1.62282710 0.64089939 6.98808554
3 -1.37421765 0.24860945 1.79972943
4 -1.24952286 0.12469478 0.33149837
5 -1.21385814 0.03566472 0.02301586
6 -1.21098761 0.00287053 0.00014249
7 -1.21096961 0.00001799 0.00000001
8 -1.21096961 0.00000000 0.00000000

Recuerde que el Método de aproximación de Newton establece que dado un punto inicial donde [math] f (x_0) \ aprox 0 [/ math], entonces tenemos la relación recurrente:

[matemáticas] \ displaystyle x_1 = x_0- \ dfrac {f (x_0)} {f ‘(x_0)} \ tag {1} [/ matemáticas]

En general, tenemos

[matemáticas] \ displaystyle x_ {n + 1} = x_n- \ dfrac {f (x_n)} {f ‘(x_n)} \ tag {2} [/ matemáticas]

En la práctica, tome [math] x = 0,1 [/ math] para funciones polinómicas simples. En general, desea encontrar el intervalo para el cual se encuentran estas raíces a través del Método de Sturm.


Tomar [matemáticas] x = 0 [/ matemáticas] da [matemáticas] f (0) = 1 [/ matemáticas]. Lo que significa que [matemáticas] x_0 [/ matemáticas] es [matemáticas] 0 [/ matemáticas]. La derivada de [matemáticas] 2x ^ 4-x ^ 3–4x ^ 2 + x + 1 [/ matemáticas] es

[matemáticas] \ displaystyle f ‘(x) = 8x ^ 3–3x ^ 2–8x + 1 \ tag {3} [/ matemáticas]

Entonces [matemáticas] f ‘(0) = 1 [/ matemáticas]. Por lo tanto, la primera iteración da

[matemáticas] \ displaystyle x_1 = 0- \ dfrac {1} {1} = – 1 \ etiqueta {4} [/ matemáticas]

Ahora, simplemente repita esto una y otra vez para aproximar la raíz a aproximadamente [matemáticas] x \ aprox -1.210 \ cdots [/ matemáticas].

Sin embargo, tenga en cuenta que este método no siempre funciona.

Otros ya han mostrado cómo usar el método numérico, por lo que no lo cubriré. Pero comentaré sobre el uso de este método.

Primero, Newton-Raphson es un método numérico que tiene una gran convergencia si comienzas con una suposición inicial cercana a alguna raíz. Sin embargo, el problema es que si su conjetura no está lo suficientemente cerca de una raíz, podría divergir y nunca encontrar una raíz. Una estrategia simple para evitar esto es ejecutar el algoritmo Newton-Raphson en un conjunto de conjeturas iniciales diferentes y almacenar todos los resultados únicos.

Un problema que debe considerar es encontrar raíces complejas. Si comienza con una suposición inicial puramente real, Newton-Raphson nunca terminará con una raíz compleja. Dado esto, es posible que desee considerar buscar otros esquemas para encontrar raíces de polinomios, ya que este ha sido un tema muy estudiado y Newton-Raphson no es necesariamente el mejor enfoque.

[matemáticas] f (x) = 2x ^ 4-x ^ 3–4x ^ 2 + x + 1 [/ matemáticas]

[matemáticas] f ‘(x) = 8x ^ 3–3x ^ 2–8x + 1 [/ matemáticas]

comenzamos con un valor aleatorio, [matemática] x_0 [/ matemática], si [matemática] f (x_0) = 0 [/ matemática] es su suerte. Luego agregamos una corrección al primer valor.

La corrección es [matemática] – \ frac {f (x_0)} {f ‘(x_0)} [/ matemática]. Este proceso se repite hasta que la corrección es muy muy pequeña.

Ahora podemos hacerlo en Excel.

Escriba en la celda [matemáticas] A_1 [/ matemáticas] un valor x_0, en [matemáticas] B_1 [/ matemáticas] escriba la fórmula = – (2 * A1 ^ 4-A1 ^ 3-4 * A1 ^ 2 + A1 + 1) / (8 * A1 ^ 3-3 * A1 ^ 2-8 * A1 + 1)

En la celda [matemáticas] A_2 [/ matemáticas] escriba = A_1 + B_1 (nota: = es imprescindible en estas fórmulas).

en [matemática] B_2 [/ matemática] copie y pegue [matemática] B_1 [/ matemática]. La fórmula se ajustará para la celda [matemáticas] A_2 [/ matemáticas].

Ahora seleccione [math] A_2 [/ math] y [math] B_2 [/ math] juntos y copie. Luego seleccione cualquier número de celdas de [math] A_3 [/ math] a [math] A_10 [/ math] (digamos ) y pegar. Encontrarás que x ha alcanzado un valor estable en A_5 o A_6 dependiendo del problema.

Ahora el problema es cómo seleccionar x-0.

Pruebe f (0) Obtiene 1, luego f (1), es -1. Debe haber al menos una raíz entre x = 0 yx = 1 ya que f (x) ha cambiado de signo.

En [matemáticas] A_1 [/ matemáticas] si escribe 0, estamos obteniendo x = -1.21097 . no importa que haya ido a otra raíz.x_0 = 0.2 en la celda A_1 lleva a 1.47136 . [matemática] x_0 [/ matemática] = 0.5 conduce a x = 0.662918.

Traté de cuarto pero no pude conseguirlo. No se desespere. Conocemos la suma de todas las raíces por la fórmula de Vieta. Es [matemáticas] \ frac {1} {2} [/ matemáticas] Entonces la cuarta raíz es = 0.5-1.47136-0.662918 + 1.21097 = -0.42331