2017-06-12 5 views

Antwort

2

Eigentlich tut es, es ist nur nicht in der Readme erklärt (für ein gutes Maß, hier ist eine stabile Verbindung README.md).

Es ist unklar, was Sie unter Anfangsbedingungen verstehen. Wenn Sie erste Parameter meinen, ist dies sehr gut möglich.

using LsqFit 

# a two-parameter exponential model 
# x: array of independent variables 
# p: array of model parameters 
model(x, p) = p[1]*exp.(-x.*p[2]) 

# some example data 
# xdata: independent variables 
# ydata: dependent variable 
xdata = linspace(0,10,20) 
ydata = model(xdata, [1.0 2.0]) + 0.01*randn(length(xdata)) 
p0 = [0.5, 0.5] 

fit = curve_fit(model, xdata, ydata, p0) 

(aus dem Handbuch entnommen). Hier ist p0 der anfängliche Parametervektor.

Dies wird Ihnen etwas sehr nahe [1.0, 2.0] geben. Aber was, wenn wir den Parameter auf [0,1]x[0,1] beschränken wollen? Dann setzen wir einfach die Keyword-Argumente lower und upper Vektoren von unteren und oberen Grenzen

fit = curve_fit(model, xdata, ydata, p0; lower = zeros(2), upper = ones(2)) 

zu sein, dass so etwas wie [1.0, 1.0] je nach Ihren genauen Daten geben soll.

0

Vielleicht ist es keine richtige Antwort, aber ich hatte in der Vergangenheit einen Erfolg Hinzufügen eines Strafbegriffs zu der Kostenfunktion außerhalb der Grenzen, etwas wie eine starke exponentielle mit einem schrittartigen Verhalten. Der Nachteil besteht natürlich darin, dass Sie Ihre Kostenfunktion manuell definieren.

Verwandte Themen