【问题标题】:How to get a semilog curve to fit properly to the data?如何获得半对数曲线以正确拟合数据?
【发布时间】:2021-09-30 11:50:12
【问题描述】:

我正在尝试在 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 ])

在绘制数据和拟合曲线时,我得到一条直线而不是半对数图,如下所示。

如何获得正确的半对数曲线拟合?

【问题讨论】:

    标签: python numpy matplotlib scipy curve-fitting


    【解决方案1】:

    生成的curve_fit 在数学上是正确的。您的代码也没有任何问题。看看下面的两张图片:

    如果您将上面的情节与这个情节进行比较:

    对于拟合:x 值越大,越接近零(渐近线为零) 对于实际数据:它保持在 1 不变。

    虽然绘图拟合在正常缩放下看起来完全正确(因为差异无论如何),但对数缩放的情况并非如此(这正是使用的要点和目的对数刻度,以查明差异)。

    所以基本上如果你想有一个更“合适”的拟合,拟合功能本身需要改进。

    【讨论】:

    • 感谢您的及时回复。你在第一个图中使用了什么拟合函数?
    • 你的,我没有使用任何其他功能。我只是以不同的方式显示它。两个图具有相同的拟合函数,第一个图具有线性 yscaling,而第二个图具有对数 yscaling。
    猜你喜欢
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    相关资源
    最近更新 更多