[Python] Error non-linear-regression python curve-fit

Discussão em 'Python' iniciado por Stack, Abril 24, 2025.

  1. Stack

    Stack Membro Participativo

    Hello guys i want to make non-linear regression in python with curve fit this is my code:

    #fit a fourth degree polynomial to the economic data
    from numpy import arange
    from scipy.optimize import curve_fit
    from matplotlib import pyplot
    import math

    x = [17.47,20.71,21.08,18.08,17.12,14.16,14.06,12.44,11.86,11.19,10.65]
    y = [5,35,65,95,125,155,185,215,245,275,305]

    # define the true objective function
    def objective(x, a, b, c, d, e):
    return ((a)-((b)*(x/3-5)))+((c)*(x/305)**2)-((d)*(math.log(305))-math.log(x))+((e)*(math.log(305)-(math.log(x))**2))

    popt, _ = curve_fit(objective, x, y)
    # summarize the parameter values
    a, b, c, d, e = popt
    # plot input vs output
    pyplot.scatter(x, y)
    # define a sequence of inputs between the smallest and largest known inputs
    x_line = arange(min(x), max(x), 1)
    # calculate the output for the range
    y_line = objective(x_line, a, b, c, d, e)
    # create a line plot for the mapping function
    pyplot.plot(x_line, y_line, '--', color='red')
    pyplot.show()


    this is my error :

    Traceback (most recent call last):
    File "C:\Users\Fahmi\PycharmProjects\pythonProject\main.py", line 16, in <module>
    popt, _ = curve_fit(objective, x, y)
    File "C:\Users\Fahmi\PycharmProjects\pythonProject\venv\lib\site-packages\scipy\optimize\minpack.py", line 784, in curve_fit
    res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
    File "C:\Users\Fahmi\PycharmProjects\pythonProject\venv\lib\site-packages\scipy\optimize\minpack.py", line 410, in leastsq
    shape, dtype = _check_func('leastsq', 'func', func, x0, args, n)
    File "C:\Users\Fahmi\PycharmProjects\pythonProject\venv\lib\site-packages\scipy\optimize\minpack.py", line 24, in _check_func
    res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
    File "C:\Users\Fahmi\PycharmProjects\pythonProject\venv\lib\site-packages\scipy\optimize\minpack.py", line 484, in func_wrapped
    return func(xdata, *params) - ydata
    File "C:\Users\Fahmi\PycharmProjects\pythonProject\main.py", line 13, in objective
    return ((a)-((b)*(x/3-5)))+((c)*(x/305)**2)-((d)*(math.log(305))-math.log(x))+((e)*(math.log(305)-(math.log(x))**2))
    TypeError: only size-1 arrays can be converted to Python scalars


    thanks before

    Continue reading...

Compartilhe esta Página