为了账号安全,请及时绑定邮箱和手机立即绑定

用已知指数拟合幂律并在 Python 中提取系数

用已知指数拟合幂律并在 Python 中提取系数

不负相思意 2021-11-23 16:23:05
我有一个数据集,我知道它适合以下形式的曲线:y = a x²我想提取a.在 Python(使用 scipy 等)中解决这个问题的最佳方法是什么?
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

这是使用 scipy 的 curve_fit() 的图形拟合器示例:


import numpy, scipy, matplotlib

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit


xData = numpy.array([1.1, 2.2, 3.3, 4.4, 5.0, 6.6, 7.7])

yData = numpy.array([1.1, 20.2, 30.3, 60.4, 50.0, 60.6, 70.7])



def func(x, a):

    return (a * numpy.square(x))



# same as the scipy default

initialParameters = numpy.array([1.0])


# curve fit the test data

fittedParameters, pcov = curve_fit(func, xData, yData, initialParameters)


modelPredictions = func(xData, *fittedParameters) 


absError = modelPredictions - yData


SE = numpy.square(absError) # squared errors

MSE = numpy.mean(SE) # mean squared errors

RMSE = numpy.sqrt(MSE) # Root Mean Squared Error, RMSE

Rsquared = 1.0 - (numpy.var(absError) / numpy.var(yData))


print('Parameters:', fittedParameters)

print('RMSE:', RMSE)

print('R-squared:', Rsquared)


print()



##########################################################

# graphics output section

def ModelAndScatterPlot(graphWidth, graphHeight):

    f = plt.figure(figsize=(graphWidth/100.0, graphHeight/100.0), dpi=100)

    axes = f.add_subplot(111)


    # first the raw data as a scatter plot

    axes.plot(xData, yData,  'D')


    # create data for the fitted equation plot

    xModel = numpy.linspace(min(xData), max(xData))

    yModel = func(xModel, *fittedParameters)


    # now the model as a line plot

    axes.plot(xModel, yModel)


    axes.set_xlabel('X Data') # X axis data label

    axes.set_ylabel('Y Data') # Y axis data label


    plt.show()

    plt.close('all') # clean up after using pyplot


graphWidth = 800

graphHeight = 600

ModelAndScatterPlot(graphWidth, graphHeight)



查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信