Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python极小值_Python_3d_Lmfit - Fatal编程技术网

Python极小值

Python极小值,python,3d,lmfit,Python,3d,Lmfit,我试图在点云上拟合一条3D线。我正在使用lmfit的Minimizer。 我将线点距离定义为np.linalg.norm(np.cross(p-v0,v1-v0))/np.linalg.norm(v1-v0)(来自的方法2)。问题是,我不确定最小值是否做得好。我使用的是最小二乘法,对于点数较少的情况,拟合不正确 事实上,np.linalg.norm(np.cross(p-v0,v1-v0))似乎做得更好。如果我理解正确,这将最小化平行四边形面积,而不是点线距离 问题:有没有比最小二乘法更好的算法

我试图在点云上拟合一条3D线。我正在使用lmfit的Minimizer。 我将线点距离定义为np.linalg.norm(np.cross(p-v0,v1-v0))/np.linalg.norm(v1-v0)(来自的方法2)。问题是,我不确定最小值是否做得好。我使用的是最小二乘法,对于点数较少的情况,拟合不正确

事实上,np.linalg.norm(np.cross(p-v0,v1-v0))似乎做得更好。如果我理解正确,这将最小化平行四边形面积,而不是点线距离

问题:有没有比最小二乘法更好的算法来最小化距离?有比lmfit更好的图书馆吗?为什么第二个方程会给出更好的结果,它只是除以一个标量

from lmfit import minimize, Parameters, Parameter, 
report_fit,fit_report, Minimizer, printfuncs
import numpy as np

params = Parameters()
params.add('x0',   value= 129)
params.add('x1',   value= -0.5)
params.add('y0',   value= 129)
params.add('y1',   value= -0.5)


def fun(params,x,y,z):
    x0 = params['x0'].value; x1 = params['x1'].value; y0 = 
params['y0'].value; y1 = params['y1'].value
    distance = []

    v0 = np.array([x0, y0, 0])
    v1 = np.array([x0+x1, y0+y1, 1])

    for point in range(len(x)):
        p = np.array([x[point], y[point], z[point]])
        distance.append(np.linalg.norm(np.cross(p-v0,v1-v0))/np.linalg.norm(v1-v0))
    return distance

result = minimize(fun, params,args=(x,y,z))
print(fit_report(result))


使用plotly,我可以看到拟合的质量:vs

“对于较低数量的点,拟合不正确。”-您如何知道它不正确?我使用plotly在三维中查看直线如何拟合点。另外,我知道云的正确角度(0度)。当删除np.linalg.norm(v1-v0)时,我得到了更好的结果。如果只有两个点,我想让线穿过它们,但事实并非如此。