(python, matplotlib) 我怎样才能对不是来自方程的图形进行微分?
(python, matplotlib) how can I do differential in graph that isn't from equation?
我获取了数据并使用 matplotlib 将其显示为图表。
并且我降低了噪点,下面是他们的照片。
现在我想知道每个点的梯度,
所以我试着在我的图表中做微分。
但是当我发现这一点时,我只是得到了当你有图形方程时如何做到这一点的信息。
也许这个可以工作(代码在下面),但是我怎样才能得到 f(x+h) 和 f(x-h) 的值?
def numerical_diff(f, x):
h = 1e-4
return (f(x+h) - f(x-h)) / (2*h)
抱歉英语不好,感谢您的阅读。
我会等你的答复。请帮助我
numpy np.gradient
可以处理用于绘制数据的数据数组。您还需要提供 dx,这是您的变量之间的变化,
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 4*np.pi, 100)
dx = x[1] - x[0]
y = np.sin(x)
plt.plot(x, y)
plt.plot(x, np.gradient(y, dx))
plt.show()
数值导数有噪音您还可以考虑样条拟合并采用 derivatives 以获得更平滑的图,
from scipy.interpolate import UnivariateSpline
spl = UnivariateSpline(x, y, k=4, s=0)
diffspl = spl.derivative()
plt.plot(x, spl(x), '--')
plt.plot(x, diffspl(x), '--')
plt.show()
我了解到您正在尝试进行数值微分,这可以通过多种方式实现,但最简单的是使用您编写的方程式。
def numerical_dif(y_data: list) -> list:
differential = []
for i in range(len(y_data) - 1):
differential.append(y_data[i+1]-y_data[i])
return differential
这假设等距数据点,但可以很容易地修改为也采用 x 轴位置。如果您使用的是 NumPy,那么最简单的微分是 numpy.diff()
如果您正在寻找更复杂的解决方案,请看这里
Univariate spline
我获取了数据并使用 matplotlib 将其显示为图表。 并且我降低了噪点,下面是他们的照片。
现在我想知道每个点的梯度, 所以我试着在我的图表中做微分。
但是当我发现这一点时,我只是得到了当你有图形方程时如何做到这一点的信息。
也许这个可以工作(代码在下面),但是我怎样才能得到 f(x+h) 和 f(x-h) 的值?
def numerical_diff(f, x):
h = 1e-4
return (f(x+h) - f(x-h)) / (2*h)
抱歉英语不好,感谢您的阅读。 我会等你的答复。请帮助我
numpy np.gradient
可以处理用于绘制数据的数据数组。您还需要提供 dx,这是您的变量之间的变化,
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 4*np.pi, 100)
dx = x[1] - x[0]
y = np.sin(x)
plt.plot(x, y)
plt.plot(x, np.gradient(y, dx))
plt.show()
数值导数有噪音您还可以考虑样条拟合并采用 derivatives 以获得更平滑的图,
from scipy.interpolate import UnivariateSpline
spl = UnivariateSpline(x, y, k=4, s=0)
diffspl = spl.derivative()
plt.plot(x, spl(x), '--')
plt.plot(x, diffspl(x), '--')
plt.show()
我了解到您正在尝试进行数值微分,这可以通过多种方式实现,但最简单的是使用您编写的方程式。
def numerical_dif(y_data: list) -> list:
differential = []
for i in range(len(y_data) - 1):
differential.append(y_data[i+1]-y_data[i])
return differential
这假设等距数据点,但可以很容易地修改为也采用 x 轴位置。如果您使用的是 NumPy,那么最简单的微分是 numpy.diff()
如果您正在寻找更复杂的解决方案,请看这里 Univariate spline