【发布时间】:2014-11-26 22:25:40
【问题描述】:
我正在尝试拟合这个 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)
我试图将抛物面居中在 0.16 和 0.58(x 轴)之间以及 0.22 和 0.63(y 轴)之间。如果 b 或 c 超出此范围,我会通过返回一个较大的值来做到这一点。
不幸的是,合身太差了,我的 popt 值都是 1,我的 pcov 是 inf。
任何帮助都会很棒。
谢谢
【问题讨论】:
标签: python optimization numpy scipy curve-fitting