python多变量⾮线性拟合_多⾃变量Python曲线拟合
拟合未知数量的参数
在本例中,我们尝试重现⼀些测量数据measData。
在本例中,measData由函数measuredData(x, a=.2, b=-2, c=-.8, d=.1)⽣成。我练习,我们可能以某种⽅式测量了measData,所以我们不知道数学上是如何描述的。因此适合。
linspace函数python我们⽤多项式拟合,多项式由函数polynomFit(inp, *args)描述。由于我们要尝试不同阶的多项式,所以在输⼊参数的数量上要灵活是很重要的。
⾃变量(在您的例⼦中是x和y)被编码在inp的“列/第⼆维度”。import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def measuredData(inp, a=.2, b=-2, c=-.8, d=.1):
x=inp[:,0]
y=inp[:,1]
return a+b*x+c*x**2+d*x**3 +y
def polynomFit(inp, *args):
x=inp[:,0]
y=inp[:,1]
res=0
for order in range(len(args)):
print(14,order,args[order],x)
res+=args[order] * x**order
return res +y
inpData=np.linspace(0,10,20).reshape(-1,2)
inpDataStr=['({:.1f},{:.1f})'.format(a,b) for a,b in inpData]
measData=measuredData(inpData)
fig, ax = plt.subplots()
ax.plot(np.arange(inpData.shape[0]), measData, label='measuered', marker='o', linestyle='none' )
for order in range(5):
print(27,inpData)
print(28,measData)
popt, pcov = curve_fit(polynomFit, xdata=inpData, ydata=measData, p0=[0]*(order+1) )
fitData=polynomFit(inpData,*popt)
ax.plot(np.arange(inpData.shape[0]), fitData, label='polyn. fit, order '+str(order), linestyle='--' )

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。