Подпись метода для якобиана функции наименьших квадратов в scipy

Может ли кто-нибудь привести пример предоставления якобиана для функция наименьших квадратов в scipy?

Я не могу понять сигнатуру метода, которую они хотят - они говорят, что это должна быть функция, но очень сложно понять, какие входные параметры и в каком порядке эта функция должна принимать.


person George Karpenkov    schedule 19.10.2010    source источник


Ответы (1)


Вот пример экспоненциального затухания, с которым мне пришлось работать:

import numpy as np
from scipy.optimize import leastsq

def f(var,xs):
    return var[0]*np.exp(-var[1]*xs)+var[2]

def func(var, xs, ys):
    return f(var,xs) - ys

def dfunc(var,xs,ys):
    v = np.exp(-var[1]*xs)
    return [v,-var[0]*xs*v,np.ones(len(xs))]

xs = np.linspace(0,4,50)
ys = f([2.5,1.3,0.5],xs)
yn = ys + 0.2*np.random.normal(size=len(xs))
fit = leastsq(func,[10,10,10],args=(xs,yn),Dfun=dfunc,col_deriv=1)

Если бы я хотел использовать col_deriv=0, я думаю, что мне пришлось бы в основном транспонировать то, что я возвращаю с помощью dfunc. Вы совершенно правы: документация по этому поводу не так хороша.

person Justin Peel    schedule 19.10.2010
comment
Это работает, но по иронии судьбы все еще не работает в примере из моего предыдущего вопроса: P хорошо, я, вероятно, должен выбрать какой-то другой метод. - person George Karpenkov; 19.10.2010
comment
Да, как сказал Тилстен. По сути, это разница между экспоненциальным спадом и экспоненциальным ростом. Это большая разница. Я думаю, что вам придется попробовать какой-нибудь другой метод, который использует вторую производную, чтобы иметь шанс решить, когда вы угадываете неправильный знак для начала. Возможно, потребуется дополнительный импульсный член чего-то подобного. - person Justin Peel; 20.10.2010
comment
Спасибо, Джастин. 2 года спустя, а до сих пор помогаю людям. - person Geoff; 25.10.2012