拟合未知数量的参数
在本例中,我们尝试重现一些测量数据measData。
在本例中,measData由函数measuredData(x, a=.2, b=-2, c=-.8, d=.1)生成。我练习,我们可能以某种方式测量了measData,所以我们不知道数学上是如何描述的。因此适合。
我们用多项式拟合,多项式由函数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()