Ich möchte M = 2 Sätze von N = 3 Beobachtungen (X, Y) mit scipy.odr
in einem einzigen Anpassungsschritt, von dem ich erwarte 2*M
Best-Fit-Werte (Steigung und Schnittpunktschätzungen) erhalten in jedem der M Sätze von Beobachtungen). Aus dem Lesen der scipy.odr
Dokumentation und einiger verwandter Stackoverflow-Fragen scheint es, dass dies möglich sein sollte, aber wenn ich versuche, das folgende minimale Beispiel zu verwenden, konvergiert die Anpassung nicht (Reason(s) for Halting: NP < 1 or NP > N
).Mehrdimensionale ODR-Anpassung
Ich beginne mit einer einigermaßen guten Näherung der besten Werte beta
Werte. Irgendwelche Ideen warum das so kläglich scheitert?
from pylab import *
from scipy import odr
x = array([[1.0,2.0,3.0],[1.1,2.1,3.1]])
y = array([[1.1,2.3,3.1],[5.9,7.0,8.2]])
sx = x*0 + .1
sy = y*0 + .1
def f(B, x):
out = x * 0
for k in range(x.shape[0]) :
out[k,:] = B[2*k] * x[k,:] + B[2*k+1]
return out
result = odr.ODR(
odr.RealData(x, y, sx = sx, sy = sy),
odr.Model(f), beta0 = array([1.,0.,1.,5.])
).run()
result.pprint()