我正在尝试将这些X数据:[0.4,0.165,0.165,0.585,0.585],这些Y数据:[.45、.22、.63、.22、.63]和这些Z数据:[1、0.99、0.98、0.97、0.96] 拟合成一个抛物面。我正在使用scipy的curve_fit工具。以下是我的代码:
doex = [0.4,0.165,0.165,0.585,0.585]
doey = [.45, .22, .63, .22, .63]
doez = np.array([1, .99, .98,.97,.96])
def paraBolEqn(data,a,b,c,d):
if b < .16 or b > .58 or c < .22 or c >.63:
return 1e6
else:
return ((data[0,:]-b)**2/(a**2)+(data[1,:]-c)**2/(a**2))
data = np.vstack((doex,doey))
zdata = doez
opt.curve_fit(paraBolEqn,data,zdata)
我试图将抛物面在 x 轴 .16 到 .58 之间,在 y 轴 .22 到 .63 之间居中。为了做到这一点,如果 b 或 c 在此范围之外,我会返回一个较大的值。
不幸的是,适配效果非常差,我的 popt 值全部为 1,我的 pcov 是无穷大。
任何帮助都将不胜感激。
谢谢