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

Problem beim Plotten der Poisson-Verteilung

 

Fragensteller
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 16.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2013, 20:29     Titel: Problem beim Plotten der Poisson-Verteilung
  Antworten mit Zitat      
Guten Abend!

Ich versuche in dem Sript (s.u.) eine Poisson-Verteilung je nach Inputparameter K und n zu plotten. Außerdem soll mir das Script bei einer bestimmten Abbruchbedingung die Anzahl der bis dahin erfolgten Iterationen ausgeben (Anzahl).
Für K<121 und z.B. n=500 klappt das gut. Sobald K>120 gewählt wird, plottet MATLAB nicht mehr die gesamte Poisson-Verteilung, sondern bricht bei einem Part meiner Abbruchbedingung (W>=0.002) ab. Als Anzahl wird ab diesem K nur noch ans=170 ausgegeben...

Woran liegt das?
Warum ändert sich die Anzahl ab K=121 nicht mehr und warum bricht der Plot der Poissonverteilung bei einem Punkt ab?!


Code:

function [Anzahl] = Poisson( K,n )
Anzahl = 0;
W=zeros(n);
A=1:n;
for i = 2:n
    A(i) = (exp(-K))*(K.^i)/faculty(i);
    A(i-1) = (exp(-K))*(K.^(i-1))/faculty(i-1);
    W(i)=(exp(-K))*(K.^i)/faculty(i);
    if A(i-1) >= sym(0.002) || A(i-1) <= A(i) %Abbruchbedingung
        Anzahl = Anzahl + 1;
    else break                    
    end
axis([0 n 0 0.25]);
plot(W)  
end
 



Mit den MATLAB-internen Poisson-Fkt. habe ich vergeblich versucht zu arbeiten...

System: Win Vista
Version: MATLAB R2012b

Poisson(121,500) Plot bricht ab.jpg
 Beschreibung:

Download
 Dateiname:  Poisson(121,500) Plot bricht ab.jpg
 Dateigröße:  16.8 KB
 Heruntergeladen:  589 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.01.2013, 21:00     Titel:
  Antworten mit Zitat      
Hallo,

den Grund des Abbruchs solltest du mit dem Debugger leicht nachvollziehen können.

Wo liegt das Problem beim Arbeiten mit den Poisson-Funktionen? Also: was hast du versucht, und welche Fehlermeldung gab es?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.01.2013, 21:36     Titel: Re: Problem beim Plotten der Poisson-Verteilung
  Antworten mit Zitat      
Hallo Fragensteller,

Ein paar Kommentare zum Code:
Code:
function [Anzahl] = Poisson( K,n )
Anzahl = 0;
% W=zeros(n);  % Das erzeugt eine [n x n] Matrix. Vermutlich meinst Du:
W = zeros(1, n);

% A=1:n;  % Wozu A vorbelegen, wenn es überschrieben wird? Besser:
A = zeros(1, n);

for i = 2:n
    A(i) = (exp(-K))*(K.^i)/faculty(i);
    A(i-1) = (exp(-K))*(K.^(i-1))/faculty(i-1);
    W(i) = (exp(-K))*(K.^i)/faculty(i);
    % Das ist merkwürdig. Wieso wird im i-ten Schritt immer die (i-1).te
    % nochmal ausgerechnet? Das entspricht doch genau dem Wert aus der
    % vorherigen Iteration.
    % Und wieso sind A(i) und W(i) identisch?

    % Weshalb is 0.002 hier symbolisch?!
    if A(i-1) >= sym(0.002) || A(i-1) <= A(i) %Abbruchbedingung
        Anzahl = Anzahl + 1;
    else break                    
    end
axis([0 n 0 0.25]);
plot(W)  
end

Eine aufgeräumt Version, die aber das gleiche Ergebnis liefern sollte:
Code:
function Anzahl = Poisson(K, n)
A = zeros(1, n);
A(1) = exp(-K) * K;
fac = 1:
for ii = 2:n
    fac = fac * ii;  % Schneller als FACULTY, das in meinem Matlab unbekannt ist
    A(ii) = exp(-K) * (K .^ ii) / fac;
   
    % Weshalb is 0.002 hier symbolisch?!
    if A(i) < 0.002 && A(i) < A(i - 1) %Abbruchbedingung
        Anzahl = ii;
        break;
    end
end
plot(A(1:Anzahl));

Hilft das bereits die Ursache von unerwarteten Werten zu finden?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Fragensteller
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 16.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2013, 23:36     Titel:
  Antworten mit Zitat      
Hallo Harald und Jan,

vielen Dank für eure Rückmeldung!
Da ich quasi noch Anfänger bin, ist...
- der symbolischer Wert sym(0.002) natürlich überflüssig
- reicht entweder A(i) oder W(i) aus
- muss im i-ten Schritt nicht der (i-1)te wiederholt werden...

@Jan: Danke für die hilfreichen Kommentare! Leider war die Anzahl bei deinem Code immer noch auf 170 begrenzt...


Ich hab das Ganze jetzt nach euren Vorschlägen übernommen und in eine MATLAB-eigene Poisson-Funktion eingebettet. Problem war bei meiner ausgeschriebenen Funktion
Code:
A(i)=(exp(-K))*(K.^i)/faculty(i)
, dass MATLAB ab einer bestimmten Fakultät i das Ergebnis A(i)=inf oder =NaN setzt... Die Poisson-Funktion poisspdf(X,K) hat dies gelöst:

Code:

function [Anzahl] = Poiss(K,n)
A=zeros(1,n);
Anzahl = 0;
A(1)=exp(-K)*K;

for X=2:n
A(X)=poisspdf(X,K);
    if A(X-1) >= 0.002 || A(X-1) <= A(X) %Abbruchbedingung
        Anzahl = Anzahl + 1;
    else break                    
    end
end

assignin('base','A',A);
plot(A)
 


Gruß,
Fragensteller
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.