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.

Ajuste de curva genérico cambiando la función de modelo en Python.

Estoy utilizando SciPy.optimize.curvefit https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curvefit.html para obtener los coeficientes de una función de ajuste de curva. La función de SciPy toma como primer argumento la función del modelo que se está utilizando. Entonces, si quiero hacer un ajuste de curva lineal, le paso la siguiente función:


def objective(x, a, b):
return a * x + b

Si quiero un ajuste de curva polinómico de segundo grado, le paso lo siguiente:


def objective(x, a, b, c):
return a * x + b * x**2 + c

Y así sucesivamente. Lo que quiero lograr es hacer que esta función del modelo sea genérica. Por ejemplo, si el usuario quisiera un ajuste de curva polinómico de quinto grado ingresando 5, debería cambiar a:


def objective(x, a, b, c, d, e, f):
return (a * x) + (b * x2) + (c * x3) + (d * x4) + (e * x5) + f

¿Es posible mientras el código se está ejecutando? Y si no es posible usando SciPy porque requiere cambiar una función, ¿hay alguna otra manera de lograr lo que quiero?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible hacer que la función del modelo sea genérica mediante el uso de la característica de lista de argumentos variables de Python. En lugar de definir manualmente cada parámetro, puede utilizar el operador “*” en la definición de la función para permitir un número arbitrario de argumentos:

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

    De esta manera, puede pasar cualquier número de coeficientes como argumentos a la función, y automáticamente generará el polinomio del grado correspondiente.

    Por ejemplo, si el usuario ingresa 5 como el grado polinómico deseado, puede usar el siguiente código para generar la tupla de conjetura inicial para la función curve_fit:

    params_guess = [1] * (grado + 1)

    Esto creará una lista de longitud 6, con todos los coeficientes inicializados en 1. Luego, puede pasar esta lista a la función curve_fit como conjetura inicial:

    popt, _ = curve_fit(objective, xdata, ydata, p0=params_guess)

    En general, el uso de una función de modelo genérica con argumentos variables es un enfoque más flexible y escalable para el ajuste de curvas, en comparación con la definición manual de una función específica para cada grado polinómico deseado.

Comments are closed.