如何获得适合数据的半对数曲线?
How to get a semilog curve to fit properly to the data?
我试图在 y 轴的半对数图上拟合一些数据。我的Python代码如下:
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
from scipy.optimize import curve_fit
x1 = [1,2,3,4,5,6,8,9,11,13,14,15,16]
y1 = [18,12,9,7,1,6,1,2,1,1,1,1,1]
y = y1
x = x1
def s_plot(x,m,c):
return np.power(10,(x*m+c))
pars, cov = curve_fit(f=s_plot,xdata=x, ydata=y, p0=[1,1 ])
在绘制数据和拟合曲线时,我得到一条直线而不是半对数图,如下所示。
如何获得正确的半对数曲线拟合?
结果 curve_fit
在数学上是正确的。您的代码也没有任何问题。看看下面的两张图片:
如果将上面的情节与这个情节进行比较:
对于拟合:x值越大,越接近于零(渐近线为零)
对于实际数据:它保持恒定在 1。
虽然绘图拟合在正常缩放下看起来完全正确(因为无论如何差异是小),但对数缩放并非如此(这正是使用对数刻度的要点和目的,以查明 小 差异)。
所以基本上如果你想有一个更“合适”的拟合,拟合功能本身就需要改进。
我试图在 y 轴的半对数图上拟合一些数据。我的Python代码如下:
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
from scipy.optimize import curve_fit
x1 = [1,2,3,4,5,6,8,9,11,13,14,15,16]
y1 = [18,12,9,7,1,6,1,2,1,1,1,1,1]
y = y1
x = x1
def s_plot(x,m,c):
return np.power(10,(x*m+c))
pars, cov = curve_fit(f=s_plot,xdata=x, ydata=y, p0=[1,1 ])
在绘制数据和拟合曲线时,我得到一条直线而不是半对数图,如下所示。
如何获得正确的半对数曲线拟合?
结果 curve_fit
在数学上是正确的。您的代码也没有任何问题。看看下面的两张图片:
如果将上面的情节与这个情节进行比较:
对于拟合:x值越大,越接近于零(渐近线为零) 对于实际数据:它保持恒定在 1。
虽然绘图拟合在正常缩放下看起来完全正确(因为无论如何差异是小),但对数缩放并非如此(这正是使用对数刻度的要点和目的,以查明 小 差异)。
所以基本上如果你想有一个更“合适”的拟合,拟合功能本身就需要改进。