Ajuste de regresión ortogonal en el método de mínimos cuadrados escupidos

El método leastsq en scipy lib ajusta una curva a algunos datos. Y este método implica que en estos datos, los valores Y dependen de algún argumento X. Y calcula la distancia mínima entre la curva y el punto de datos en el eje Y (dy)

Pero, ¿y si necesito calcular la distancia mínima en ambos ejes (dy y dx)

¿Hay algunas formas de implementar este cálculo?

Aquí hay una muestra de código cuando se usa el cálculo de un eje:

import numpy as np
from scipy.optimize import leastsq

xData = [some data...]
yData = [some data...]

def mFunc(p, x, y):
    return y - (p[0]*x**p[1])  # is takes into account only y axis

plsq, pcov = leastsq(mFunc, [1,1], args=(xData,yData))
print plsq

ecientemente probé la biblioteca scipy.odr y devuelve los resultados adecuados solo para la función lineal. Para otras funciones como y = a * x ^ b, devuelve resultados incorrectos. Así es como lo uso:

def f(p, x):      
    return p[0]*x**p[1]

myModel = Model(f)
myData = Data(xData, yData)
myOdr = ODR(myData, myModel , beta0=[1,1])
myOdr.set_job(fit_type=0) #if set fit_type=2, returns the same as leastsq
out = myOdr.run()
out.pprint()

Esto devuelve resultados incorrectos, no deseados, y en algunos datos de entrada ni siquiera cercanos a los reales. Puede ser, hay algunas formas especiales de usarlo, ¿qué hago mal?

Respuestas a la pregunta(6)

Su respuesta a la pregunta