Interpolation 对数尺度样条

Interpolation 对数尺度样条,interpolation,spline,Interpolation,Spline,假设我需要积分曲线下的面积,由未知函数定义。我想使用几种方法,一种是样条曲线InterpolateUnivariateSpline非常简单,但当我希望两个轴都是对数刻度时,它就可以工作了。(情节之外的任何一点都没有引起那种令人毛骨悚然的沮丧)我已经试过了 将我的x和y值重新定义为对数 应用插值单变量样条线 追踪曲线(xn,yn) 绘制原始数据(x,y)和样条曲线(xn,yn) 尽管如此,我还是无法得到一条拟合数据的曲线,而是一条距离数据10个数量级的直线。(x和y都有len()=14,它们是小样

假设我需要积分曲线下的面积,由未知函数定义。我想使用几种方法,一种是样条曲线
InterpolateUnivariateSpline
非常简单,但当我希望两个轴都是对数刻度时,它就可以工作了。(情节之外的任何一点都没有引起那种令人毛骨悚然的沮丧)我已经试过了

  • 将我的x和y值重新定义为对数
  • 应用
    插值单变量样条线
  • 追踪曲线(xn,yn)
  • 绘制原始数据(x,y)和样条曲线(xn,yn)
  • 尽管如此,我还是无法得到一条拟合数据的曲线,而是一条距离数据10个数量级的直线。(x和y都有len()=14,它们是小样本)

    我是否应该重新定义xn和yn,使它们也适合曲线?我尝试了类似于
    xx=np.log10(xn)的东西;相反,yy=np.log10(yn)
    也失败得很惨

    import matplotlib.pyplot as plt
    import numpy as np
    from scipy.interpolate import InterpolatedUnivariateSpline
    
    # x and y read form csv
    x_log = np.log10(x) ; fx_log = np.log10(fx) 
    xn = np.linspace(min(x), max(x), num=1000)
    f = InterpolatedUnivariateSpline(x_log, fx_log, k=3)
    yn = f(xn)
    
    plt.plot(x, y, 'bo', xn, yn, 'r:', ms=3)
    plt.xlabel(r'$\lambda$ ($\AA$)',size='12')
    plt.ylabel(r'$\lambda F_\lambda (W/m^2)$ ',size='12')
    plt.xscale('log')
    plt.yscale('log')
    plt.show()