曲线拟合点列表

时间:2020-03-15 03:12:08

标签: python python-2.7 numpy matplotlib scipy

我的一个python脚本会根据处理持续时间向我显示一些结果,如下所示:

enter image description here

现在,我想追踪函数的曲线,该曲线最接近结果的演变。

经过几次研究,我发现最好的工具是 scipy.optimize curve_fit 。 只是一个问题,函数 curve_fit 首先需要一个函数(如果我很了解文档的示例),但是我在图中的点不是函数的结果,所以我不不知道在这里放什么。

有人可以帮助我解决此问题或以其他方式建议我吗?

谢谢。

2 个答案:

答案 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()

enter image description here

enter image description here

enter image description here