Verfasst am: 12.07.2012, 09:55
Titel: Fallunterscheidung bei Poissonfunktion
Hallo:),
ich muss einen Poissonfunktion berechnen, die abhängig ist von f und lambda. Das Problem ist jedoch, dass dieses f abhängig ist von zwei variablen (i und j), d.h. abhängig welche Werte i und j haben, wird f anders berechnet. Bis jetzt habe ich folgendes eingegeben:
function [PGa] = PGa(i,j,s,f,Lambda)
TotalProb = cdf('poisson',f,lambda);
PGa = pdf('poisson',f,lambda)/TotalProb;
if (j > 0 && i >= 0);
f=s+j-i;
pdf('poisson', f, lambda);
elseif (j==0 && i<=s);
f=s-i;
cdf('poisson',f ,lambda);
else (j==0 && i>s);
PGa=0;
end
In meiner Hauptdatei lasse ich i=0:100 und j=0:100 laufen, und s ist eine feste Größe.
Kann mir jemand helfen, ob das Vorgegebene richtig ist? Da ich in meiner Hauptdatei eine Fehlermeldung zu der Funktion bekomme.
Ich hoffe ich habe mich verständlich ausgedrückt!
Vielen Dank für die Unterstützung
??? Undefined function or variable 'f'.
Ich habe beide Datein auf dem Desktop gespeichert und die Functionsdatei heißt wie die Funktion, also PGa.
Muss ich f als eine eigene Funktion definieren?
DANKE
BN1
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.07.2012, 10:31
Titel:
als Zusatzinfo:ich möchte den statitonären Zustandsvektor bestimmen.
Hier übergibst du aber nur PGa(f ,Lambda)
der Aufruf sollte aber eher so aussehen PGa(i,j,s,Lambda).
f musst du nicht mit übergeben wird ja in der Funktion berechnet und die Funktion brauch auch kein f übernehmen PGa(i,j,s,Lambda)
wobei du dann f vor den beiden Zeilen berechnen solltest:
Super DANKE!
Nun bekomme ich nach längerem warten folgende Fehlermeldung:
??? Undefined function or variable 'xneu'.
Eigentlich kann ich Matlab verstehen;) definiere xneu ja zweimal unterschiedlich. Matlab soll xalt*A1(i,j)= xneu rechnen. Diesen neuen Vektor xneu dann an die Stelle von xalt setzen und wieder mit A1(i,j) multiplizieren. Und dies dann wieder und wieder machen bis die Differenz zwischen xneu und xalt kleiner als 0,005 ist.
Und wie sagt man das jetzt in matlab-Sprache? Ach wenn Matlab reden könnte.....
du kannst eine Variable nicht für eine Berechnung verwenden, bevor du sie definiert hast. Was soll denn xneu sein, wenn die while-Schleife das erste Mal durchlaufen wird?
Abhilfe: xneu vor der while-Schleife durch einen Startwert initialisieren.
Achtung auch: in MATLAB wird Punkt als Dezimaltrennzeichen verwendet; es sollte also <0.005 statt <0,005 heißen.
Grüße,
Harald
BN1
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.07.2012, 13:31
Titel:
Guten Hinweis, ich habe es jetzt so definiert:
Code:
xneu=xalt*A1(i,j);
xalt=xneu;
d=1;
whileabs(d)<0.005;
xneu=xalt*A1(i,j);
d=xneu-xalt;
xalt=xneu;
end
Du musst dir die Variable einfach noch ausgeben lassen oder den ";" weglassen dann bekommst du auch die Werte angezeigt.
BN1
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.07.2012, 14:11
Titel:
STIIIIIIIIIIIIIIIIIIIIIIIIIIMMT!
Hoffentlich klappt es jetzt!
BN1
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 13.07.2012, 11:27
Titel:
Ich bin es nochmal, wenn ich jetzt bei einer ähnlichen wie die oben genannten Funktion auch eine Fallunterscheidung machen möchte. Bei der Funktion aber nicht jeden einzelnen Fall auflisten möchte der=0 ist, sondern "für alle Werte die nicht definiert wurden setze =0". Ich suche nach einer Bezeichnung in Matlab für "sonst".
Code:
function[KEa] = KEa(i,j,s,Lambda)
TotalProb = cdf('poisson',i,s,j,Lambda);
KEa = pdf('poisson',i,s,j,Lambda)/TotalProb;
if(j=i+1);
KEa=pdf('poisson',f,Lambda);
elseif(j==0 && i<=s);
f=s-i;
KEa=cdf('poisson',f,Lambda);
else %hier soll jetzt stehen für alle Fälle die oben nicht definiert wurden setze "0";
KEa=0;
end
Ich verstehe dein Problem nicht so ganz, die Anweisung stimmt doch. Wenn die erste Bedingung erfüllt ist (j=i+1) wird die erste Aktion durchgeführt, wenn (j==0 && i<=s) erfüllt ist wird die zweite Anweisung bearbeitet und in allen anderen Fällen (z.B. j==1 && i==1) wird KEa null gesetzt.
Nachtrag: Es ist allerdings etwas ungeschickt, dass du eine Variable KEa und eine Funktion KEa hast, solche Doppelbelegungen sollte man vermeiden.
Nachtrag 2: In deiner ersten if-Abfrage ist ein Fehler, es muss (j==i+1) heißen, nicht (j=i+1).
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.