|
Hallo,
ich versuche gerade eine Funktion in Matlab einzugeben. Da ich dort noch ein Anfänger bin stolpere ich noch über einige Sachen, in diesem Fall eine Summenfunktion.
Ich möchte folgende Funktion nachbauen: (siehe angehängtes Bild)
Dabei stolpere ich insbesondere über das ungleich .
Mein bisheriger Ansatz:
function LogLik = LL(a,b)
load('x.mat) for ii=1:18 for jj=1:18 for jj~=ii LogLik=sum(-a(ii)*b(jj)+x(ii,jj)*log(a(ii)*b(jj))-log(factorial(x(ii,jj))) end end end end
Leider funktioniert das nicht so wie ich mir vorgestellt habe, ich hoffe ihr könnt mir hier helfen.
MfG, Breez3r
Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
|
|
Hallo,
ich würde es so versuchen:
function LogLik = LL(a,b)
load('x.mat)
LogLik = 0;
for ii=1:18 for jj=1:18 if (jj~=ii) LogLik = LogLik - a(ii)*b(jj)+x(ii,jj)*log(a(ii)*b(jj))-log(factorial(x(ii,jj))); end end end
Ich hab kein Matlab hier und kann es nicht ausprobieren, es sollte aber laufen. Dein Problem war die do-Schleife mit einer logischen Abfrage (jj~=ii), so kann das nicht funktionieren, eine if-Abfrage ist hier richtiger. Der sum(a)-Befehl addiert alle Einträge von a; sum(a(ii)) ist dementsprechend einfach a(ii) und kann hier nicht sinnvoll innerhalb der Schleife verwendet werden.
Du kannst auch die ii=1:18 durch ii=1:numel(a) (jj analog) ersetzen, dann geht es für eine variable Anzahl an Einträgen.
Ich weiß nicht, ob man das gewiefter anstellen kann, ich programmier selten in Matlab.
Ich hoff ich konnte weiterhelfen, schönes WE noch!
|
|
Vielen Dank für deine Antwort. Ich weiß nicht ob ich da irgendwas falsch mache aber irgendwie funktioniert das bei mir nicht.
Gibt es eventuell eine andere Möglichkeit?
|
Diese Frage wurde automatisch geschlossen, da der Fragesteller kein Interesse mehr an der Frage gezeigt hat.
|