Sprunganzahl in Intervallen < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 23:26 Sa 12.09.2009 | Autor: | sorry_lb |
Hiho.
Also ich hab einen Vektor der die Sprungzeiten eines Poisson Prozesses angibt. Nehmen wir zum Beispiel den folgenden:
T =
Columns 1 through 10
6.5757 13.3526 18.8708 28.2824 33.5601 44.0928 44.7084 56.5159 56.8786 61.4723
Columns 11 through 20
76.7178 82.0771 83.6099 84.7590 87.7947 89.6775 90.2398 104.7608 110.7200 126.0948
Columns 21 through 30
134.2564 135.8978 137.5281 138.1798 140.8825 154.1302 154.5322 155.6456 161.9053 164.9525
Columns 31 through 40
165.0292 166.7018 167.5797 171.7618 175.5302 178.4230 184.9865 186.4314 189.8585 192.0370
Columns 41 through 42
197.9294 200.0000
Was ich möchte: ich möchte einen Vektor "anzsprint" (Anzahl Sprünge pro Intervall), der mir -welch Überraschung- angibt, wie viele Sprünge pro Intervall stattgefunden haben. Die Intervalle sind in 10er-Schritten abgegrenzt.
Bisher habe ich die umständliche Variante:
for i=1:h
if T(i)<=10
anzsprint(1)=i;
elseif T(i)>10 && T(i)<=20
anzsprint(2)=i - anzsprint(1);
elseif T(i)>20 && T(i)<=30
anzsprint(3)=i-anzsprint(2)-anzsprint(1);
elseif T(i)>30 && T(i)<=40
anzsprint(4)=i-anzsprint(3)-anzsprint(2)-anzsprint(1) ;
elseif T(i)>40 && T(i)<=50
anzsprint(5)=i-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>50 && T(i)<=60
anzsprint(6)=i- anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>60 && T(i)<=70
anzsprint(7)=i- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>70 && T(i)<=80
anzsprint(8)=i-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>80 && T(i)<=90
anzsprint(9)=i-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>90 && T(i)<=100
anzsprint(10)=i-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>100 && T(i)<=110
anzsprint(11)=i-anzsprint(10)-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>110 && T(i)<=120
anzsprint(12)=i-anzsprint(11)-anzsprint(10)-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>120 && T(i)<=130
anzsprint(13)=i-anzsprint(12)-anzsprint(11)-anzsprint(10)-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>130 && T(i)<=140
anzsprint(14)=i- anzsprint(13)-anzsprint(12)-anzsprint(11)-anzsprint(10)-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>140 && T(i)<=150
anzsprint(15)=i- anzsprint(14)-anzsprint(13)-anzsprint(12)-anzsprint(11)-anzsprint(10)-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>150 && T(i)<=160
anzsprint(16)=i-anzsprint(15)- anzsprint(14)-anzsprint(13)-anzsprint(12)-anzsprint(11)-anzsprint(10)-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>160 && T(i)<=170
anzsprint(17)=i-anzsprint(16)-anzsprint(15)- anzsprint(14)-anzsprint(13)-anzsprint(12)-anzsprint(11)-anzsprint(10)-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>170 && T(i)<=180
anzsprint(18)=i-anzsprint(17)-anzsprint(16)-anzsprint(15)- anzsprint(14)-anzsprint(13)-anzsprint(12)-anzsprint(11)-anzsprint(10)-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
elseif T(i)>180 && T(i)<=190
anzsprint(19)=i-anzsprint(18)-anzsprint(17)-anzsprint(16)-anzsprint(15)- anzsprint(14)-anzsprint(13)-anzsprint(12)-anzsprint(11)-anzsprint(10)-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
else T(i)>190 && T(i)<=200
anzsprint(20)=i-anzsprint(19)-anzsprint(18)-anzsprint(17)-anzsprint(16)-anzsprint(15)- anzsprint(14)-anzsprint(13)-anzsprint(12)-anzsprint(11)-anzsprint(10)-anzsprint(9)-anzsprint(8)-anzsprint(7)- anzsprint(6)-anzsprint(5)-anzsprint(4)-anzsprint(3)-anzsprint(2)-anzsprint(1);
end
end
Das funktioniert soweit ja auch ganz toll, allerdings möchte ich den Prozess nicht bei der Obergrenze von 200 enden lassen. Und wenn ich in den tausender Bereich gehe... naja das Problem ist bei meiner Variante wohl offensichtlich...
Ich denke, dass man das durch Schleifen lösen könnte, bei meinem Versuch hat er sich allerdings bei der Ausgabe von Nullen überschlagen...
for i=1:h
for j=0:10:Tmax-10
if j<T(i)<=j+10
for k=i:1
if (k<2) k=5000001;
anzsprint(5000000)=0; %um die ersten Summanden=0 zu haben, da negativer index nicht funktioniert
end;
anzsprint(i)=i-anzsprint(k-1)
end;
else break;
end;
end;
end;
Hat jemand eine tolle Alternative? Und noch ergänzend gefragt: gibt es eine galantere Lösung zum Umgehen des kleiner-gleich-null-index? hab das Problem öfters in meiner Arbeit und wie ichs oben gemacht hab, is´s unbefriedigend :)
Lieben Dank und gute Nacht.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:16 Mo 21.09.2009 | Autor: | sorry_lb |
also für die, die´s noch interessiert: (keine ahnung warum ich mich so schwer getan hab):
for i=1:h
anzsprint(i)=0;
end;
T
r=(Tmax-10)/10;
for i=1:h
for k=0:r
if ((k*10+0) < T(i)) && (T(i)<= (k*10+10))
anzsprint(k+1)= anzsprint(k+1)+1;
else
anzsprint(k+1)=anzsprint(k+1);
end
end
end
X=anzsprint
|
|
|
|