es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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…)

Tags:  , , ,

Answer

  1. Avatar for 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:

    def u(x):
        p = [1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1]
        result = p[0]
        for i in range(1, len(p)):
            result = result*x + p[i]
        return result
    

    Esta función debe producir resultados más precisos para valores más grandes de x.

Comments are closed.