python二次拟合_三维数据点的二次曲面拟合

我想«二次曲面»比«平面»更正确。在

问题是拟合z=ax^2+by^2+cxy+dx+ey+f

到给定的点集P

你需要通过公式来计算剩余距离。在

对于每个3D点,p的残差为

| p|2–ap_0^2+bp|1^2+c*p_0*p|1+dp|0+ep|

你需要最小化所有的残差,即它们的平方和,可变参数a…f

下面的代码在技术上应该可以解决上述问题。但是,拟合问题是多极值的,如果没有良好的起点和全局搜索,这种方法可能无法找到正确的参数集。在import numpy

import scipy.optimize

P = numpy.random.rand(3,10) # given point set

def quadratic(x,y, a, b, c, d, e, f):

#fit quadratic surface

return a*x**2 + b*y**2 + c*x*y + d*x + e*y + f

def residual(params, points):

#total residual

residuals = [

p[2] - quadratic(p[0], p[1],

params[0], params[1], params[2], params[3], params[4], params[5]) for p in points]

return numpy.linalg.norm(residuals)

result = scipy.optimize.minimize(residual,

(1, 1, 0, 0, 0, 0),#starting point

args=P)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值