Verfasst am: 27.04.2012, 21:36
Titel: Optimierung mit Diskreter und Kontinuierlicher Variablen
Hallo,
ich steh auf dem Schlauch. Ich würde gern folgende Funktion berechnen:
Code:
function nll = erlang_pdf(data,param,~,~) % The distribution is a continuous distribution, % which has a positive value for all real numbers greater than zero, % and is given by two parameters: the shape k, % which is a non-negative integer, and the rate lambda, % which is a non-negative real number. The distribution is sometimes defined % using the inverse of the rate parameter, the scale mu. % It is the distribution of the sum of k independent exponential variables with mean mu.
% When the shape parameter k equals 1, % the distribution simplifies to the exponential distribution. % The Erlang distribution is a special case of the Gamma distribution where the shape parameter k is an integer. % In the Gamma distribution, this parameter is not restricted to the integers.
% param(1) = k % param(2) = lambda
pdf = param(2)^param(1)*data.^(param(1)-1).*exp(-param(2)*data)./factorial(param(1)-1);
nll = -sum(log(pdf));
end %fun
for sample = 1:sampleSize
fluoresce = ones(nDyes,1);
tau = 0;
whileany(fluoresce)
u = rand(nDyes,1);
fluoresce = fluoresce .*double(u <= exp(-dt/lifetime));
tau = tau + 1;
end
data(sample) = tau*dt;
end
welchen Wertebereich soll k abdecken? Gibt es ein bestimmtes Verhalten in Abhängigkeit von k, d.h. ist z.B. bekannt, dass es nur ein lokales Minimum gibt?
Wenn du eine aktuelle MATLAB-Version hast, kannst du GA verwenden und die Option IntCon entsprechend setzen.
k sollte sich physikalisch im Bereich 1-12 befinden. Deine zweite Frage versteh ich nicht genau, meinst du das auf die Likelihood-Funktion bezogen?
Ja, IntCon, wäre genau was ich suche, leider habe ich aktuell nur 2011a zur Hand. Fällt dir noch eine Möglichkeit ein? kann ich z.B. eine konstante Schrittweite für die Optimierung von k wählen z.B. 1? oder einen round-Befehl einsetzen?
in der Doku deiner Funktion steht ja, dass k nur ganzzahlig sein kann. Das einfachste wäre also eine for-Schleife über k=1:12 (oder welchen Wert auch immer), und dann nur den anderen Parameter zu optimieren. Und dann das beste Ergebnis zu verwenden.
Du kannst natürlich kontinuierlich optimieren und dann round verwenden; da musst du dich aber auf die Gutartigkeit der zu optimierenden Funktion verlassen.
Ah! Das ist doch die Lösung, dank dir vielmals! Manchmal sieht man die offentsichliche Lösung einfach nicht...
LG
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.