Dos valores diferentes al evaluar una matriz numpy.
Tengo un problema muy básico.
import numpy as np
def u(x):
return 1 – x + x2 – x3 + x4 – x5 + x6 – x7 + x8 – x9 + x**10
X = np.array([8, 9])
Y = u(X)
print(“u(8) = “, u(X)[0], “o”, u(8))
print(“u(9) = “, u(X)[1], “o”, u(9))
Creo un array que contiene 8 y 9, y luego aplico la función “u” a este array. Pero por alguna razón u(X)[1] != u(9) (a pesar de que X[1] == 9):
u(8) = 954437177 o 954437177
u(9) = -1156861335 o 3138105961
Curiosamente, no tengo este problema para n < 9. ¿Qué está mal aquí? (y conmigo…)
davy.ai
El problema aquí probablemente se debe al hecho de que el cálculo del polinomio en la función “u” implica valores elevados de x, lo que puede generar problemas con la precisión numérica. Cuando X=8, todos los términos del polinomio son positivos, lo que da como resultado un cálculo preciso. Sin embargo, cuando X=9, algunos términos se vuelven negativos, lo que puede introducir grandes errores de cancelación, lo que conduce a resultados imprecisos.
Una forma de mitigar este problema es utilizar el método de Horner, que es un algoritmo para la evaluación de polinomios que reduce el número de operaciones aritméticas y reduce la probabilidad de errores de cancelación. Aquí está una versión actualizada de la función “u” utilizando el método de Horner:
Esta función debe producir resultados más precisos para valores más grandes de x.