抛物面(三维抛物线)曲面拟合python

2024-05-29 03:21:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着把这个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的曲线拟合工具。这是我的代码:

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到.58(x轴)和.22到.63(y轴)之间。如果b或c在这个范围之外,我会返回一个很大的值。在

不幸的是,fit是wayyy off,我的popt值都是1,我的pcov是inf

任何帮助都会很好。在

谢谢你


Tags: or工具数据datareturnnpscipyfit
1条回答
网友
1楼 · 发布于 2024-05-29 03:21:32

您需要提供一个良好的初始猜测,而不是强制超出范围区域的高返回值。此外,模式缺少偏移量参数,抛物面符号错误。将模型更改为:

def paraBolEqn(data,a,b,c,d):
    x,y = data
    return -(((x-b)/a)**2+((y-d)/c)**2)+1.0

我将偏移量固定为1.0,因为如果将其作为拟合参数添加,系统将被低估(数据点的数量少于或等于拟合参数的数量)。 使用如下初始猜测调用curve_fit

^{pr2}$

这就产生了:

[ 1.68293045  0.31074135  2.38822062  0.36205424]

与数据匹配得很好:

enter image description here

相关问题 更多 >

    热门问题