[Delphi] Simulation radioaktiver Zerfall
spacer
Autor Nachricht
JerryW
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 15.10.11 10:05 
Verwendete Sprache: Delphi
Hallo,

ich möchte gerne "realistischen" radioaktiven Zerfall für einzelne Atome simulieren und stehe vor dem Problem, wie ich das modellieren soll. Ich möchte also einen radioaktiven Zerfall realistisch simulieren, wenn ich die Zerfallskonstante vorgebe (z.B. lambda = 0,07 1/s) Meine anfängliche Idee, jeden Atomkern einzeln zu betrachten, ist natürlich auf die enorme Atommenge unvorstellbar. Deshalb suche ich gerade eine Idee, wie man das Problem anders lösen kann. Meine Überlegung bisher:

Ich habe beispielsweise eine Menge eines radioaktiven Materials, das aus 100.000 Atomen besteht (ich weiß, das ich wenig, aber als Berechnungsgrundlage reicht das erstmal). Jetzt könnte ich jede Sekunde (z.B. über einen Timer) über eine Schleife alle noch aktiven Kerne ansteuern und einen Zufallsgenerator starten, der für jedes einzelne Atom überprüft, ob es in diesem Moment zerfällt oder nicht. Ist es zerfallen, verringert sich die übrig bleibende Atomanzahl um 1. Für wenige Atome ist das kein Problem und führt auch zum gewünschten Ergebnis. Bei sehr vielen Atomen lässt sich das aber natürlich nicht realisieren.

Jetzt meine Frage: habt ihr eine Idee, wie man das machen kann, dass ich eine hohe Anzahl an Atomen vorgebe und nach jeder Sekunde abhängig von der Zerfallskonstante die aktuelle Zahl der noch aktiven Atomkerne erhalte? Damit meine ich jetzt nicht über die Berechnung mit dem Zerfallsgesetzt, weil das liefert mir ja die noch zu erwartende Anzahl aktiver Atome. Ich benötige eine Anzahl, die zufällig um diesen berechenbaren Mittelwert liegt. Ich hoffe, ich habe mich verständlich ausgedrückt ;)

Habt Ihr eine Idee, wie ich das lösen könnte?
Grüße,
Jerry
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
EE-Maler
Beiträge: 1754
Erhaltene Danke: 62

Windows XP
Delphi (2005 Bug Edition), Java (Eclipse), Haskell (ghci), C++ (Visual Studio 2010, Qt Creator)
BeitragVerfasst: Sa 15.10.11 10:14 
Was du machen könntest, du berechnest den Zerfall in "Gruppen". D.h. wenn du 100.000 Atome hast, dann rechnest du 1000 aus, ob ein Zerfall eingetreten ist, und wenn ja, dann zerfallen 100 auf einmal. Dann kannst du aber auch gleich nur 1000 Atome vorgeben :D

Das Problem ist, dass ja in echt jedes Atom vermutlich unabhängig von den andren zerfällt. Unabhängiger Zufall, d.h. du muss für jedes einzeln berechnen. :nixweiss:

Es gäbe natürlich noch Möglichkeiten, dass es nur so aussieht als würdest du es simulieren. Z.B. rechnest du per Zerfallsgesetz aus wieviele noch da sind und wieviele nächste Sekunde noch da sind und lässt dann in der Sekunde die Differenz +- x zerfallen. Mit Simulation hat das freilich wenig zu tun...

_________________
a broken heart is like a broken window - it'll never heal
Jen, [this computer] is infected. If this was a human being, I'd shoot it in the face. (IT Crowd)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 92
Erhaltene Danke: 11


D6 Prof, XE2 Prof
BeitragVerfasst: Sa 15.10.11 12:26 
Es geht ja glaub ich darum daß bei der Simulation die "e"-Funktion rauskommt :)

Wenn es "realistisch" sein soll bleibt nur für jedes Atom zu prüfen ob es gerade zerfallen ist oder nicht, da der Zerfall ja wirklich ein Einzelevent eines Atomkerns ist, völlig unabhängig von der Umgebung und der Anzahl der vorhandenen Atome (ja, das ist idealisiert, in der Realität hängt der Zerfall tatsächlich noch von anderen Faktoren ab).

Ansonsten um es programmtechnisch zu meistern:
Anhand der Zeit und der vorh. Anzahl Atome N ermittelst du wie viele zerfallen sein sollten (z.B. n) und löscht per Zufallsgenerator genau n Stück aus Deiner Liste.
Aber wie gesagt, das impliziert ja die Abhängigkeit von N (und nimmt so das Ergbnis vorweg)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Yaddle
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 10.11.11 17:06 
Da du dich hier in der Kernphysik befindest und nur mit Wahrscheinlichkeiten arbeiten kannst, würde ich an deiner Stelle ausrechnen, wie hoch die Wahrscheinlichkeit für einen Kern ist, dass er zerfällt. Du weißt bestimmt, dass man Zerfallsprozesse durch Exponentialfunktionen beschreibt. n(t) = n0 * b^t. Auf die konkrete Gleichung kannst du kommen, wenn du die Halbwertszeit deiner Atome kennst, bzw. sie determinierst. n0 entspräche deiner gesamten Atomanzahl. t ist die Variable und b ergäbe sich dann als 0.5 * n0 = n0 * b ^Halbwertszeit
=> 0.5 = b ^ Halbwertszeit. Dann musst du nur noch die entsprechende Wurzel aus 0,5 ziehen und hast dein b.
b ist der relative Anteil der Teilchen, der pro Sekunde zerfällt, also deine Zerfallswahrscheinlichkeit. Ich persönlich verstehe nicht warum du umbedingt jedes einzeln berechnen willst, da es bei 100000 Atomen eigentlich eh egal ist, ob Atom a oder Atom b zerfallen ist.
Also wie oben dargestellt, solltest du dich auf jeden Fall durch die Exponentialgleichung nähern. Ob du jedes Atom einzeln zerfallen lassen willst ist dann deine Entscheidung.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 1004
Erhaltene Danke: 10

WIN7,PuppyLinux
Turbo Delphi, FreePascal
BeitragVerfasst: Do 10.11.11 18:38 
Hallo,

der Ansatz von Yaddle gibt das Ergebnis ja haargenau vor, das ist unhübsch.
Ich stelle mir das beispielsweise so vor.
Wenn theoretisch 117 Atome zerfallen sein müssten, dann macht man eine Streuung ähnlich einer Glockenkurve um diese 117 herum.
Ach, wikepedia hilft.
de.wikipedia.org/wik...le_zeitliche_Abnahme
mit den Schwankungen
de.wikipedia.org/wik...stische_Schwankungen
also Poissonverteilung,aber:
Zitat:
Symmetrie [Bearbeiten]

Die Poisson-Verteilung Pλ hat für kleine Mittelwerte λ eine stark asymmetrische Gestalt. Für größer werdende Mittelwerte wird Pλ symmetrischer und lässt sich für λ > 30 in guter Näherung durch die Gauß-Verteilung darstellen.


Solange man also mehr als Lambda= 30 Zerfälle erwartet, kann man die Gaußverteilung benutzen und dann einen zufälligen Wert wählen.
Dazu braucht es eine Umkehrfunktion, damit ich aus einer Zufallszahl aus dem Bereich 0..1 = Fläche unter der Glockenkurve , die umgerechnete Zerfallszahl wird.
der Wert 0,5 entspräche genau dem Erwartungswert mue = lambda.
0,14=0,5-0,36 entspräche Erwartungswert-sigma = lambda-Wurzel(Lambda) bei 30 = 24,55
Also müsste man das Integral der Dichtefunktion von - unendlich bis x als Tabelle in kleinen Schritten anlegen.
Zum Beispiel 0,5..1 in 0,001 Schritten da es symmetrisch ist siehe.
Dazu kann man ja die Tabelle de.wikipedia.org/wik...dardnormalverteilung
umrechnen.
Bekäme man 0,84 als Wert würde in der Tabelle +1,00 als Vielfachheit von sigma stehen.
Der Wert wäre Erwartungswert +sigma hier also 30+Wurzel(30)=35,47
Bekäme man 0,99534 als Wert, würde in der Tabelle 2,60 als Vielfachheit von sigma stehen.
Der Wert wäre Erwartungswert +sigma hier also 30+2,60*Wurzel(30)= 44,24

Jetzt berechnest Du eben immer de Anzahl lambda der Zerfälle nach Formel.
Per Zufallszahl erhälst Du eine Vielfachheit von sigma= Wurzel( Lambda) und berechnest eben Deine wahren Zerfälle. Diesse spiel läft dann weiter bis es weniger als ein hundert sind und gut ist.
Bei konstanten Zeitabständen zerfallen ja immer x % vom gesamten = Erwartungswert also liesse sich das ganz schnell mit etwas Zufall simulieren.

Gruß Horst
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 1004
Erhaltene Danke: 10

WIN7,PuppyLinux
Turbo Delphi, FreePascal
BeitragVerfasst: Do 10.11.11 22:56 
Hallo,

Es gibt doch schon Fertiges um die Umkehrfunktion der aufsummierten Verteilungsfunktion der Standardnormalverteilung
home.online.no/~pjacklam/notes/invnorm/
und eine Delphi Implementierung
home.online.no/~pjac...mccormick/icnorm.pas

Ich habe es mal zusammengefügt und mit einer Halbwertszeit von 20000 gerechnet und den Zeitpunkt der Unterschreitung der jeweiligen nächsten Hälfte ausgegeben.
Die Abweichung durch den Zufall sind aber nicht allzu groß.
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
Anzahl Startteilchen :4000000000000000000
Zerfallsrate : 28853.900818
Zeitschritt : 1.761102
Teilchen Zeit relative Anzahl/Startanzahl
1999941821429194691 19999.078228 0.49999999
999941822977905392 39999.917558 0.25000000
499986883951449921 59998.995786 0.12500000
249986170125587534 79999.835116 0.06250000
124997078351718219 99998.913344 0.03125000
62496721300924186 119999.752675 0.01562500
31249359015550997 139998.830903 0.00781250
15624224990150054 159999.670233 0.00390625
7812362172225107 179998.748461 0.00195312
3906067409437409 199999.587791 0.00097656
1953096129085077 219998.666019 0.00048828
976519663736823 239999.505349 0.00024414
488275463745699 259998.583577 0.00012207
244130625669631 279999.422908 0.00006104
122069221777148 299998.501136 0.00003052
61032835641411 319999.340466 0.00001526
30517390864625 339998.418694 0.00000763
15258248747979 359999.258024 0.00000381
7629366425927 379998.336252 0.00000191
3814574063448 399999.175582 0.00000095
....


Ich hätte mal einen kürzeren Zeitschritt probieren sollen, aber das Programm hängt sich dann in einer Endlosschleife auf.

Gruß Horst
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Horst_H am Fr 11.11.11 08:51, insgesamt 1-mal bearbeitet
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 308
Erhaltene Danke: 22

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Fr 11.11.11 03:46 
Das Problem bei der Simulation ist immer, nicht durch die Art der Annahme das Ergebnis vorweg zu nehmen. Wenn ich schon davon ausgehe, dass eine bestimmte Anzahl Atome im Zeitraum t zerfallen, dann kann ich gleich die e-Funktion nehmen. Dann brauche ich das nicht zu simulieren. Die Annahme bestimmt eben das Ergebnis. Man muss erst einmal schauen, wieso bei 100.000 Atomen mit der Halbwertzeit von - sagen wir 100 s - in den ersten 100 s 50.000 zerfallen und den zweiten eben nicht wieder 50.000, sondern nur 25.000 und so weiter. Also sind die Zerfälle nicht unabhängig von den Bedingungen der einzelnen Atome. Außerdem eine interessante Frage ist dabei. Es gibt 50.000 Atome mit der Lebensdauer 50 s (Mittel), 25.000 Atome mit der mittleren Lebensdauer von 150 s... d.h. es gibt Atoime, die sehr kurzlebig sind und welche, die sehr langlebig sind. Das ist ein interessanter Aspekt dabei. Ich glaube, ohne ein gründliches Studiums des Kernzerfalls geht da gar nichts.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.

Für diesen Beitrag haben gedankt: Martok
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 503
Erhaltene Danke: 30


Delphi 2-4
BeitragVerfasst: Fr 11.11.11 13:36 
Das Grundproblem ist, daß man zur Simulation des radiaktiven Zerfalles (und anderer Abkling- bzw. Sättigungsprozesse) eine exponentialverteilte Zufallsgröße benötigt.

Delphie stellt mit seinem Zufallsgenerator jedoch nur eine gleichverteilte bereit.

Das Problem grenzt sich also dahingehend ein, daß man die gleichverteilte in eine exponentielle Verteilung transformieren muß. (Aus der einen eine andere "basteln" oder gar "zaubern"). Ob das grundsätzlich möglich ist, ist mir unbekannt.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 92
Erhaltene Danke: 11


D6 Prof, XE2 Prof
BeitragVerfasst: Fr 11.11.11 13:57 
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Das Grundproblem ist, daß man zur Simulation des radiaktiven Zerfalles (und anderer Abkling- bzw. Sättigungsprozesse) eine exponentialverteilte Zufallsgröße benötigt.


Ich meine nein.
Wenn man "von Grund auf" simulieren möchte betrachtet man erstmal ein einzelnes Atom.
Dies zerfällt innerhalb einer gegebenen Zeitspanne mit einer gewissen Wahrscheinlichkeit.
Falls es nicht zefällt wird in der Simulation irgendwann in der Zukunft nochmal geprüft.
Auch hier ist die Wahrscheinlichkeit die gleiche bei gleicher angenommener Zeitspanne ("die Atome altern nicht")

Insofern meine ich ein gleichverteilter Zufallsgenerator (Yes/No) ist anzuwenden.

Daß hinterher eine e-Funktion für den Zerfall herauskommt liegt dann daran daß
ein einmal zerfallenes Atom dauerhaft aus der Simulation wegfällt.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 122
Erhaltene Danke: 14



BeitragVerfasst: Fr 11.11.11 14:20 
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Das Grundproblem ist, daß man zur Simulation des radiaktiven Zerfalles (und anderer Abkling- bzw. Sättigungsprozesse) eine exponentialverteilte Zufallsgröße benötigt.

Falsch! Der radioaktiven Zerfall gehorcht keiner Exponentialverteilung, sondern einer Poissonverteilung, oder näherungsweise einer Normalverteilung (wie es Horst_H gemacht hat).
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 503
Erhaltene Danke: 30


Delphi 2-4
BeitragVerfasst: Fr 11.11.11 14:21 
Und wie groß soll die "gewisse Zeitspanne" gewählt werden, mandras?

Wählt man "zufällig" die Halbwertszeit, dann ist nach dieser Zeit "plötzlich" die Hälfte der Atome weg - kurz vorher waren noch alle vorhanden. Das kann man sooft wiederholen, bis alle Atome zerfallen sind.

Das ist dann aber extrem ruckartig und hat mit der Simulation eines annähernd kontinuierlichen Prozesses nichts mehr gemein.

Also: Wesentlich kleinere Zeiträume wählen. Bei Wahrscheinlichkeiten dicht an 1 bzw. 0 muß man dann aber aufpassen, daß sich nicht Rechenungenauigkeiten unangenehm bemerkbar machen.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

user profile iconGammatester hat folgendes geschrieben Zum zitierten Posting springen:
Falsch! Der radioaktiven Zerfall gehorcht keiner Exponentialverteilung, sondern einer Poissonverteilung, oder näherungsweise einer Normalverteilung (wie es Horst_H gemacht hat).

Wir reden aneinander vorbei: Ich meine die Anzahl der Restatome. Diese ist zwar endlich und impliziert damit eigentlich eine diskrete Verteilung, allerdings so riesig, daß eine Exponentialverteilung als eine stetige Verteilung dennoch eine sehr gute Annäherung ist.


Zuletzt bearbeitet von Delphi-Laie am Fr 11.11.11 14:31, insgesamt 1-mal bearbeitet
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 122
Erhaltene Danke: 14



BeitragVerfasst: Fr 11.11.11 14:40 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Mag sein, aber: Wenn Du schon reinsteckst, was durch Simulation erst zeigen willst, bringt das Ganze nicht viel. Daß die Anzahl der Atome exponentiell abnimmt (dies ist keine Exponentialverteilung im Sinne von Wahrscheinkeitsverteilungen!) wird ja nicht bezweifelt, sondern soll herauskommen, wenn man die richtige Zerfallswahrscheinlichsverteilung (Poisson) reinsteckt.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 503
Erhaltene Danke: 30


Delphi 2-4
BeitragVerfasst: Fr 11.11.11 14:53 
user profile iconGammatester hat folgendes geschrieben Zum zitierten Posting springen:
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Mag sein, aber: Wenn Du schon reinsteckst, was durch Simulation erst zeigen willst, bringt das Ganze nicht viel.


Schau mal in den Titel dieser Diskussion: Es soll radioaktiver Zerfall simuliert werden und nicht, wie eine Exponential-/Poisson- oder was weiß ich Verteilung über Wahrscheinlichkeiten "entsteht".

Wenn die Anzahl der Atome nicht über eine Exponentialverteilung abnimmt, über welche dann?

Edit: In der peinlichen Internetenzyklopädie findet man unter "Exponentialverteilung" übrigens auch einen funktionalen Zusammenhang mit der stetigen Gleichverteilung.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 122
Erhaltene Danke: 14



BeitragVerfasst: Fr 11.11.11 15:09 
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Wenn die Anzahl der Atome nicht über eine Exponentialverteilung abnimmt, über welche dann?
Zum x-ten Mal: Der Zerfall folgt einer Possionverteilung, daraus ergibt sich, daß Anzahl der Atome exponentiell abnimmt.

user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Edit: In der peinlichen Internetenzyklopädie findet man unter "Exponentialverteilung" übrigens auch einen funktionalen Zusammenhang mit der stetigen Gleichverteilung.
Häh, auf was spielst Du hier an :?:
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 1004
Erhaltene Danke: 10

WIN7,PuppyLinux
Turbo Delphi, FreePascal
BeitragVerfasst: Fr 11.11.11 15:58 
Hallo,

wie soll man einem Atom denn "ansehen", wann es zerfällt.
Man kennt nur die statistisch belegte Gesetzmäßigkeit für eine große Anzahl von Atomen.
Ich könnte natürlich jedem einzelnen Atom einen Zerfallszeitpunkt mitgeben, aber wie sollte ich diesen bestimmen.
Dann baue ich auch das Zerfallsgesetz ein.
Ich nehme eine Zufallszahl 0..1 und berechne daraus den Zerfallszeitpunkt-
Zufall = 1-e(-t/tau)-> t=-ln(1-Zufall)*tau ( es ginge auch ln(Zufall)*tau, wenn Zufall gleichverteilt ist)
Diese Zahlen sortiere ich nach t und zähle dann einfach durch.
Um das sortieren zu sparen erstelle ich ein Feld für jedes 0.01 x tau im Bereich bis 20 x tau. (e⁻20 ist sehr klein)
Also Zufall erzeugen -> nr = int(ln(Zufall) x 100 + 0,5) bilden und den Feldeintrag[nr] um 1 erhöhen.
Etwa so:
ausblenden volle Höhe Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
{$IFDEF FPC}
{$Mode delphi}
{$OPTIMIZATION ON}
{$OPTIMIZATION RegVar}
{$ELSE}
{$APPTYPE Console}
{$ENDIF}

uses
sysutils;
const
N0 = 100000000;
Skal = 16384;
Cnt = 20*Skal;
Zerfallsrate = 20000/ln(2);

var
Feld,
sumfeld : array[0..Cnt] of integer;
i ,Reste: integer;

procedure Init;
begin
fillchar(Feld,SizeOF(Feld),#0);
fillchar(sumFeld,SizeOF(Feld),#0);
Reste := 0;
randomize;
end;

function Fill:longInt;
var
i,nr :longint;
begin
Result := 0;
For i := 1 to N0 do
begin
nr := trunc((-Skal)*ln(random())+0.5);
if nr < Cnt then
inc(Feld[nr])
else
inc(Result);
end;
end;

procedure SumUp;
var
i,sum :longint;
begin
sum := Feld[0];
For i := 1 to Cnt do
begin
inc(sum,Feld[i]);
sumFeld[i] := sum;
end;
end;

begin
Init;
Reste:=Fill;
SumUp;

writeln (' x-fach');
writeln (' Zerfalls');
writeln (' rate Zerfaelle');
For i := 0 to Cnt do
begin
IF (i mod (Skal div 4)) = 0 then
writeln(i*(1/Skal):8:3,SumFeld[i]:10);
end;
writeln;
writeln ( 'Restatome :',Reste);
readln;
end.
{
Zerfalls
rate Zerfaelle
0.000 0
0.250 22121750
0.500 39347754
0.750 52769295
1.000 63213240
1.250 71353875
1.500 77691991
1.750 82624924
2.000 86466063
2.250 89458828
2.500 91790628
2.750 93608233
3.000 95021114
3.250 96122161
3.500 96980403
3.750 97647817
4.000 98168830
4.250 98573881
4.500 98888895
4.750 99135125
5.000 99326507
5.250 99475302
5.500 99590900
5.750 99681255
6.000 99751899
6.250 99806935
6.500 99849560
6.750 99882922
7.000 99908604
7.250 99928872
7.500 99944705
7.750 99956870
8.000 99966414
8.250 99973797
8.500 99979627
8.750 99984191
9.000 99987705
9.250 99990396
9.500 99992554
9.750 99994175
10.000 99995535
10.250 99996486
10.500 99997266
10.750 99997875
11.000 99998396
11.250 99998775
11.500 99999040
11.750 99999262
12.000 99999419
12.250 99999544
12.500 99999643
12.750 99999723
13.000 99999781
13.250 99999832
13.500 99999875
13.750 99999910
14.000 99999926
14.250 99999941
14.500 99999961
14.750 99999972
15.000 99999977
15.250 99999979
15.500 99999982
15.750 99999984
16.000 99999986
16.250 99999991
16.500 99999992
16.750 99999995
17.000 99999996
17.250 99999996
17.500 99999997
17.750 99999999
18.000 100000000
18.250 100000000
18.500 100000000
18.750 100000000
19.000 100000000
19.250 100000000
19.500 100000000
19.750 100000000
20.000 100000000

Restatome :0
}


Natürlich stecke ich dort eine Exponentialverteilung rein.
Aber eine Aussage, wie in dt sind 0,2% zerfallen, macht genau das auch.
Zitat:
Jetzt könnte ich jede Sekunde (z.B. über einen Timer) über eine Schleife alle noch aktiven Kerne ansteuern und einen Zufallsgenerator starten, der für jedes einzelne Atom überprüft, ob es in diesem Moment zerfällt oder nicht.

Also if random()< 0.2% dann zerfällt es.
Das ist die Zinseszinsformel mit q < 0,
de.wikipedia.org/wik...l#Zinseszinsrechnung der Term (1+q)^n == e^(ln(1+q)*n)
Bei grossen Zahlen ist alles gleichverteilt ;-)

Der Vorteil dieser Version gegenüber der des Threaderstellers ist, dass nur einmal der Zerfallszeitpunkt bestimmt wird, während seine Version nach jedem dt jedes verbliebene Atom auf Zerfall prüfte.
Das sind k+k*q+k*q² ... ==k*(q^(n+1)-1)/(q-1) Aufrufe
Wenn q = 1-0,2% = 0,998 ist und n = 1000 und k = 1e5 sind das 432* k = 4.32e7 Zufallszahlen.
Jetzt weiß ich, warum der Threadersteller verzweifelt ist ;-) . Das braucht ja ewig,

Jetzt aber die Frage aller Fragen:
Wie groß ist die Abweichung zwischen diesen beiden Versionen Zerfalls.zip und dieser hier und ist dieser signifikant.
Es gibt da sicher Tests für.


Gruß Horst
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 503
Erhaltene Danke: 30


Delphi 2-4
BeitragVerfasst: Fr 11.11.11 16:46 
user profile iconGammatester hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Wenn die Anzahl der Atome nicht über eine Exponentialverteilung abnimmt, über welche dann?
Zum x-ten Mal: Der Zerfall folgt einer Possionverteilung, daraus ergibt sich, daß Anzahl der Atome exponentiell abnimmt.


Meinetwegen auch eine Poissonverteilung, jedoch nicht irgendeine, sondern mit einem bestimmten Parameter, anscheinend muß λ=1 sein.

Wegen der großen Anzahl der Atome (Fakultät einer riesigen Anzahl?!) ist es quasi (in extrem guter Näherung) und damit auch praktisch eine Exponentialverteilung.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home