0
我使用下面的代碼,以適應三維點雲3D線的雲3D線添加砝碼。 我使用lmfit的最小二乘法,以儘量減少。使用lmfit時以適應點
我需要增加權重的不同點,但不知道如何做到這一點使用數組(和不是標)距離輸出時。使用標量時的問題是它不如使用數組時好。我假設因爲有大量的變量。
所以問題是 - 有沒有辦法給添加權重爲每個元素的數組最小化? 使用像Nelder w/scaral輸入的東西不能很好地執行3D配合。
from lmfit import minimize, Parameters, Parameter,report_fit,fit_report, Minimizer, printfuncs
import numpy as np
#parameters
params = Parameters()
params.add('y1', value= 0)
params.add('x0', value= 129)
params.add('x1', value= 0)
params.add('y0', value= 129)
params.add('y1', value= 0)
#function calculating point-line distance
def fun(params,x,y,z):
x0 = params['x0'].value; x1 = params['x1'].value; y0 = params['y0'].value; y1 = params['y1'].value
distance = []
#parametric equations
v0 = np.array([x0, y0, 0])
v1 = np.array([x0+x1,y0+ y1, 1])
#for loop over all the 3D points to calculate distance
for point in range(len(x)):
p = np.array([x[point], y[point], z[point]])
distance.append(np.linalg.norm(np.cross(v0-p,v0-v1)))
return distance
result = minimize(fun, params,args=(x,y,z))
print(fit_report(result))
theta = np.arccos(1/ np.sqrt(result.params['x1']*result.params['x1']+result.params['y1']*result.params['y1']+1))
我想補充我的權重列表,並且不使用數據的統計不確定性。 這是很容易的標量做。然而,我的問題是,使用標量和數組不會產生相同的結果 - 儘管它應該。 – Iroxk
你應該能夠只需添加砝碼的列表,在這種情況下EPS應該僅僅是1 /重量。如果/爲什麼使用標量或數組不會產生相同的結果,你不給與輸出這兩種情況下最小的工作例如,它不會從你的問題不清楚。 – Renee
所以基本上如果我有一個一維重量陣列,我也可以簡單地從fun函數距離X權重數組輸出?無需使用eps? – Iroxk