scipy curve_fit 返回下限值

问题描述 投票:0回答:0

我有一个函数,我想拟合数据,我猜想参数必须是什么,但是当我用初始客人和边界拟合函数时,拟合只返回参数之一的下边界.即使我更改边界,alpha_ 参数始终是下边界。这是代码:

def correction_function(z, A, z_c, alpha_):
    return (A * np.power(z, 2) * np.exp(-np.power((z/z_c), alpha_)))

x_data = [0.0025000000000000001, 0.0074999999999999997, 0.012500000000000001, 0.017499999999999998, 0.022499999999999999, 0.0275, 0.032500000000000001, 0.037500000000000006, 0.042500000000000003, 0.047500000000000001, 0.052500000000000005, 0.057500000000000002, 0.0625, 0.067500000000000004, 0.072500000000000009, 0.077499999999999999, 0.082500000000000004, 0.087500000000000008, 0.092499999999999999, 0.097500000000000003, 0.10250000000000001, 0.1075, 0.1125, 0.11750000000000001, 0.1225, 0.1275, 0.13250000000000001, 0.13750000000000001, 0.14250000000000002, 0.14749999999999999, 0.1525, 0.1575, 0.16250000000000001, 0.16750000000000001, 0.17250000000000001, 0.17750000000000002, 0.1825, 0.1875, 0.1925, 0.19750000000000001, 0.20250000000000001, 0.20750000000000002, 0.21249999999999999, 0.2175, 0.2225, 0.22750000000000001, 0.23250000000000001, 0.23750000000000002, 0.24249999999999999, 0.2475, 0.2525, 0.25750000000000001, 0.26250000000000001, 0.26750000000000002, 0.27250000000000002, 0.27750000000000002, 0.28250000000000003, 0.28750000000000003, 0.29249999999999998, 0.29749999999999999, 0.30249999999999999, 0.3075, 0.3125, 0.3175, 0.32250000000000001, 0.32750000000000001, 0.33250000000000002, 0.33750000000000002, 0.34250000000000003, 0.34750000000000003, 0.35250000000000004, 0.35749999999999998, 0.36249999999999999, 0.36749999999999999, 0.3725, 0.3775, 0.38250000000000001, 0.38750000000000001, 0.39250000000000002, 0.39750000000000002]

y_data = [0.0, 2714.0, 6116.0, 7371.0, 9134.0, 9134.0, 8445.0, 8257.0, 8446.0, 9257.0, 11076.0, 12533.0, 12761.0, 11939.0, 12002.0, 12343.0, 13220.0, 14164.0, 14584.0, 15273.0, 15179.0, 14264.0, 14603.0, 15420.0, 15361.0, 15480.0, 16446.0, 17508.0, 19001.0, 19043.0, 18968.0, 18596.0, 18686.0, 18480.0, 19462.0, 19672.0, 20841.0, 22097.0, 23246.0, 24085.0, 24126.0, 23526.0, 22624.0, 22491.0, 21883.0, 21290.0, 21063.0, 19879.0, 18824.0, 17181.0, 15809.0, 15745.0, 17262.0, 19663.0, 22068.0, 22657.0, 22121.0, 20647.0, 20100.0, 19418.0, 19477.0, 19453.0, 20282.0, 20706.0, 21027.0, 20365.0, 19868.0, 18350.0, 17041.0, 15142.0, 13702.0, 12106.0, 10833.0, 10004.0, 9283.0, 8700.0, 8607.0, 8500.0, 8861.0, 9132.0]

params, params_covariance = optimize.curve_fit(correction_function, xdata, ydata, p0 = [2.0e6, 0.2, 1.5], bounds=((0.1e6, 0.15, 1.4), (10.0e6, 0.25, 1.6)))

我该如何解决这个问题,以便所有参数都适合?

我尝试更改边界,更改方法、max_nfev 和函数的其他输入,但拟合仍然为 alpha_ 返回相同的下边界。

python parameters scipy data-fitting
© www.soinside.com 2019 - 2024. All rights reserved.