我的一个python脚本会根据处理持续时间向我显示一些结果,如下所示:
现在,我想追踪函数的曲线,该曲线最接近结果的演变。
经过几次研究,我发现最好的工具是 scipy.optimize 的 curve_fit 。 只是一个问题,函数 curve_fit 首先需要一个函数(如果我很了解文档的示例),但是我在图中的点不是函数的结果,所以我不不知道在这里放什么。
有人可以帮助我解决此问题或以其他方式建议我吗?
谢谢。
答案 0 :(得分:0)
当您说“现在我想追踪最接近结果演化的函数曲线”时,您必须牢记某种曲线,它是数据的理想形式。那么,那个功能是什么呢?在曲线拟合中,该函数称为“模型函数”-用于对数据建模的函数。
这样想:您有50个左右的测量点。您可能会相信它们每个都非常准确且没有错误。但是,由于您询问的是曲线拟合,可能并非如此。也就是说,您可能认为数据中存在一些噪音或错误,并且可以用理想函数表示数据,而理想函数的参数要少于50个左右(我猜大概是4个左右)。
解释模型的理想函数(并且可以在未测量的“持续时间”点预测“最佳”值)是“模型函数”。如果有的话,曲线拟合可以帮助您:编写该函数(可能取决于一些参数)以在python中对数据进行建模,并找到Parameters的最佳值,以便模型与您的数据匹配。如果没有,那“曲线拟合”是什么意思?
您可以在数据上绘制样条曲线,也可以对数据进行平滑处理,但这对于预测新值几乎没有什么作用,新值不同于“插值/外推数据而不必担心噪声的影响”。
答案 1 :(得分:0)
看起来像是“指数法” 类型的曲线,就像为电容器充电一样-参见here。
所以,我将从这个公式开始:
y = a * ( 1 - n * np.exp(-b*x))
如果我使用Matplotlib进行绘制:
#!/usr/bin/env python3
import numpy as np
import matplotlib.pyplot as plt
# Make 100 samples along x-axis, from 0..10
x = np.linspace(0,10,100)
# Make an exponential approach type of curve
a = 17000
n = 1
b = 3
y = a * ( 1 - n * np.exp(-b*x))
# Plot it
plt.title(f'Plot for a={a}, n={n}, b={b}')
plt.plot(x,y)
plt.show()