0

大家好!我是 python 和数据分析的初学者,在为我的数据拟合幂函数时遇到了一个问题。 在这里,我将我的数据集绘制为散点图

我想用指数 arround -1 绘制一个幂函数,但是在我应用 levenberg-marquardt 方法后,在 python 中使用 lmfit 库,我得到以下错误图像。我试图修改初始参数,但没有帮助。

这是我的代码:

%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from lmfit import minimize, Parameters, Parameter, report_fit
be = pd.read_table('...', 
               skipinitialspace=True,
               names = ["CoM", "slope", "slope2"])

x=be["CoM"]
data=be["slope"]




def fcn2min(params, x, data):
n2 = params['n2'].value
n1 = params['n1'].value

model = n1 * x ** n2
return model - data #that's what you want to minimize

# create a set of Parameters
# 'value' is the initial condition
params = Parameters() 
params.add('n2', value= -1.00)
params.add('n1',value= 23.0)

# do fit, here with leastsq model
result = minimize(fcn2min, params, args=(be["CoM"],be["slope"]))

#calculate final result
final = data + result.residual
resid = result.residual

# write error report
report_fit(result)

#plot results

xplot = x
yplot = result.params['n1'].value * x ** result.params['n2'].value


plt.figure(figsize=(15,6))
plt.ylabel('OD-slope',fontsize=18, color='blue')
plt.xlabel('CoM height_Sz  [m]',fontsize=18, color='blue')

plt.plot(be["CoM"],be["slope"],"o", label="slope_flat")
plt.plot(be["CoM"],be["slope2"],"+",color='r', label="slope_curv")
plt.plot(xplot,yplot)
plt.legend()

plt.savefig('plot2')

plt.show()

我不太明白这是什么问题,所以如果您有任何意见,非常感谢您。

4

1 回答 1

0

很难说问题是什么。在我看来,拟合完成并给出了相当好的拟合,但您没有提供拟合统计数据或参数报告。

如果您询问“COM”数组的所有绿线(最合适的?),这几乎可以肯定是因为起始 x 轴“height_Sz”数据没有被排序为严格增加。这对拟合来说是可以的,但是用一条线绘制一条 XY 轨迹预计数据是有序的。

于 2016-04-30T19:53:08.700 回答