WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Fallunterscheidung bei Poissonfunktion

 

BN1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 09:55     Titel: Fallunterscheidung bei Poissonfunktion
  Antworten mit Zitat      
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


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.07.2012, 10:13     Titel:
  Antworten mit Zitat      
Hallo,

wie versuchst du deine Funktion aufzurufen, und welche Fehlermeldung bekommst du dabei?

Bitte in Zukunft auch die Code-Formatierung verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
BN1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 10:28     Titel:
  Antworten mit Zitat      
Sorry für den Code!Wink
Mit folgendem Code versuche ich meine Funktion aufzurufen:
Code:

Lambda=4;
xalt([1,1000])=[1,0];
s=200;
mu=30;
A1=zeros(1000,1000);
for i=1:1000;
    for j=1:1000;
        A1(i,j)=PGa(f ,Lambda)*mu;
    end;
end;
while abs(xneu-xalt)<0,005;
    xalt=xneu;
    xneu=xalt*A1(i,j);  
end


dann bekomme ich die Fehlermeldung:

??? 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: ---
     Beitrag Verfasst am: 12.07.2012, 10:31     Titel:
  Antworten mit Zitat      
als Zusatzinfo:ich möchte den statitonären Zustandsvektor bestimmen.
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 12.07.2012, 10:36     Titel:
  Antworten mit Zitat      
"f" ist bei dir nirgends definiert, dann ist klar dass er diese nicht kennt Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
BN1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 10:39     Titel:
  Antworten mit Zitat      
Aber ist das nicht definiert, indem ich in der Funktionsdatei sage:
"f=s+j-i"

Wie gebe ich denn an, dass f abhängig ist von s,j und i.
In der Hauptdatei: f(s,i,j) eingeben?

Sind sonst noch offensichtliche Fehler zu erkennen?
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 12.07.2012, 10:43     Titel:
  Antworten mit Zitat      
Ok wenn ich das richtig sehe, dann ist dies deine Funktion:

Code:
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


deine Übergabe Parameter sind dann "i,j,s,f,Lambda"

und dein Aufruf sieht so aus:
Code:
Lambda=4;
xalt([1,1000])=[1,0];
s=200;
mu=30;
A1=zeros(1000,1000);
for i=1:1000;
    for j=1:1000;
        A1(i,j)=PGa(f ,Lambda)*mu;
    end;
end;
while abs(xneu-xalt)<0,005;
    xalt=xneu;
    xneu=xalt*A1(i,j);  
end


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:

Code:
TotalProb = cdf('poisson',f,lambda);
PGa = pdf('poisson',f,lambda)/TotalProb;
Private Nachricht senden Benutzer-Profile anzeigen
 
BN1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 11:36     Titel:
  Antworten mit Zitat      
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?Wink Ach wenn Matlab reden könnte.....
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.07.2012, 11:47     Titel:
  Antworten mit Zitat      
Hallo,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
BN1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 13:31     Titel:
  Antworten mit Zitat      
Guten Hinweis, ich habe es jetzt so definiert:
Code:
xneu=xalt*A1(i,j);
xalt=xneu;
d=1;
while abs(d)<0.005;
    xneu=xalt*A1(i,j);
    d=xneu-xalt;
    xalt=xneu;
end


Wenn ich das im Command eingeben kommt nach einigem warten unter dem Befehl: ">>", aber kein Ergebnis.
Viele Grüße!!
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 12.07.2012, 13:34     Titel:
  Antworten mit Zitat      
Das ist auch das was wir uns erwarten Wink

Du musst dir die Variable einfach noch ausgeben lassen oder den ";" weglassen dann bekommst du auch die Werte angezeigt.
Private Nachricht senden Benutzer-Profile anzeigen
 
BN1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 14:11     Titel:
  Antworten mit Zitat      
STIIIIIIIIIIIIIIIIIIIIIIIIIIMMT!Smile
Hoffentlich klappt es jetzt!
 
BN1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2012, 11:27     Titel:
  Antworten mit Zitat      
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
 
Seer
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 23.04.12
Wohnort: ---
Version: 7.14.0.739
     Beitrag Verfasst am: 13.07.2012, 12:48     Titel:
  Antworten mit Zitat      
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).
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.