gpt4 book ai didi

python - 衰减曲线最适合 SciPy

转载 作者:行者123 更新时间:2023-12-01 03:23:30 28 4
gpt4 key购买 nike

当我尝试找到最适合我的数据时遇到问题。使用scipy.optimize.curve_fit创建最佳拟合。我的数据和代码是:

编辑您可以从here下载数据文件。 。数据是,

         a             b            b2
55478 1.07E+43 54395.93833
56333 1.63E+43 54380.01385
57540 2.57E+43 52393.31605
61866 7.32E+43 52212.22838 52212.22838

代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-


from __future__ import division

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import fit
import glob
import os
from scipy.optimize import curve_fit
import matplotlib.patches as patches

pf = pd.read_csv('/home/imhotep/Desktop/lala.csv', sep=',', encoding ='utf-8')



a1= pf['a'].max()
b1 = pf['b2'].max()
npoc=100

x = np.linspace((b1), (pf['b'].max()),npoc)
yy = np.linspace((pf['a'].min()), (pf['a'].max()), npoc)


fig = plt.figure()

ax4 = fig.add_subplot(111)

def h(x,k):
return a1* (((x-(b1))/(k))**(-(5./3.)))


popt,pcov = curve_fit(h,x,yy)

print 'POPT,', popt,'PCOV',pcov
y_fi1 = h(x, *popt)

ax4.plot(x, y_fi1, label='fit', ls='-', color='blue')

ax4.plot(pf['b'], pf['a'], ls='None', color='blue', marker='o')

plt.show()

就这样。当我运行代码时,我得到了合适的结果: fit

但是,应该大致是这样的:

fitted

谁能告诉我哪里出错了?我是曲线拟合的初学者。

最佳答案

您想要将模型拟合到 a 和 b 描述的 4 个蓝点吗?

那么你应该朝这个方向努力:

popt,pcov = curve_fit(h,b,a)

编辑:

正如问题和这个答案的评论中提到的,您应该仅对原始数据使用 fit 函数,然后使用 np.linspace 新创建的数组来显示拟合。

这是我从您的代码中得到的信息:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import division

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

pf = pd.read_csv('lala.csv', sep=',', encoding ='utf-8')

a1 = pf['a'].max()
#b1 = pf['b2'].max()

x = pf["b"]
y = pf["a"]

def h(x,k,b1):
return a1*((x-b1)/k)**(-5/3)

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

print 'POPT,', popt,'PCOV',pcov

xfit = np.linspace(x.min(),x.max(),100)
y_fi1 = h(xfit, *popt)

fig = plt.figure()
ax4 = fig.add_subplot(111)
ax4.plot(xfit, y_fi1, label='fit', ls='-', color='blue')
ax4.plot(x, y, ls='None', color='blue', marker='o')
plt.show()

使用curve_fit仅查找参数k会导致错误,因此我将b1作为搜索参数。然后它确实找到了合适的地方,但仍然不完全令人满意。输出:

POPT, [   238.09666313  51973.04601693] 
PCOV [[ 21500.32886377 -22370.88448044] [-22370.88448044 23850.34961769]]

关于python - 衰减曲线最适合 SciPy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41677831/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com