scipy.optimize curve_fit 的麻烦

我在使用 scipy 优化包拟合曲线时遇到了一些麻烦。我的代码是:


import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit


def Function_EXD_2(x, d, e):

    return d*np.exp(-x/e)


x = np.array([135, 126, 120, 100, 90, 85, 80, 70, 65, 60])

y = np.array([207, 263, 401, 460, 531, 576, 1350, 2317, 2340, 2834])


popt, pcov = curve_fit(Function_EXD_2, x, y)

print(popt, pcov)

我得到 popt = [1,1],所以优化不起作用。我已经在 R 中完成了“相同”,我正在执行 popt = [44237.53, 22.21] aprox。


有人可以帮我吗?


30秒到达战场
浏览 71回答 1
1回答

largeQ

有两个问题:功能定义x 数组需要从0我已经翻转了您的数据值并为拟合算法添加了界限import numpy as npimport matplotlib.pyplot as pltfrom scipy.optimize import curve_fitdef func(x, a, b, c):    return a * np.exp(-b * x) + cx = np.array([135, 126, 120, 100, 90, 85, 80, 70, 65, 60])y = np.array([207, 263, 401, 460, 531, 576, 1350, 2317, 2340, 2834])# flip array valuesx = x[::-1] - np.amin(x)y = y[::-1]# fit functionpopt, pcov = curve_fit(func, x, y, bounds=(-10**6, 10**6))# plot datax_data = np.linspace(1, 80, 100)plt.plot(x, y, '.')plt.plot(x_data, func(x_data, popt[0], popt[1], popt[2]))plt.show()输出:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python