Hallo Fragensteller,
Ein paar Kommentare zum 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:
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
↧