【发布时间】:2015-04-30 22:16:39
【问题描述】:
我已将曲线拟合到一组数据点。我想知道如何找到我的曲线的最大值,然后我想注释那个点(我不想使用我的数据中的最大 y 值来做到这一点)。我无法准确地编写我的代码,但这是我的代码的基本布局。
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
x = [1,2,3,4,5]
y = [1,4,16,4,1]
def f(x, p1, p2, p3):
return p3*(p1/((x-p2)**2 + (p1/2)**2))
p0 = (8, 16, 0.1) # guess perameters
plt.plot(x,y,"ro")
popt, pcov = curve_fit(f, x, y, p0)
plt.plot(x, f(x, *popt))
还有没有办法找到峰宽?
我是否缺少可以执行此操作的简单内置函数?我可以区分函数并找到它为零的点吗?如果有怎么办?
【问题讨论】:
-
如果
y是一个numpy 数组,你试过max(y)或y.max()吗? -
它是一个数组,但我被要求找到曲线的最大值而不是数组中的最大数据点。
-
这与编程无关。那是纯数学。求一个函数的最大值,需要计算它的导数
-
拟合函数后,您有一组参数 p1、p2、p3 来定义您的拟合。您的拟合最大值位于 (p2, 4*p3/p1)。你可以使用任何你想近似的答案,但这会给你准确的答案。
-
我想我刚刚回答了这个问题:
p1, p2, p3 = popt
标签: python matplotlib scipy max