0191 - Rozpad

Uczniowie dzielą się na dwie grupy: tych, którzy fizyki nie lubią, i tych, którzy fizyki bardzo nie lubią. Istnieją co prawda wyjątki, ale fizyka z natury rzeczy zajmuje się ogólnymi prawami.

Taki stan zmusza nauczycieli fizyki do wzmożonego wysiłku. Utrzymanie uwagi klasy wymaga od nich bądz efektywnego machania rękami przy wyprowadzaniu zależności, wybuchowych doświadczeń, bądź jednego i drugiego. Można też wprowadzić na lekcję komputer (jest to w Polsce nowość mogąca utrzymać dzieci w stanie zaciekawienia) i przy jego pomocy nauczać.

Prezentowany obok program pozwala na ułatwienie pracy przy wprowadzaniu prawa rozpadu promieniotwórczego. W listopadzie 1990 roku została z jego wykorzystaniem przeprowadzona lekcja w warszawskim LO im. Modrzewskiego. Oto, jak ona wyglądała :

Lekcja składa się z trzech części: wstępnego pokazu (symulacji rzeczywistej), części teoretycznej będącej omówieniem wniosków z pokazu i komputerowej symulacji procesów statystycznych.

Pokaz był typowy dla tej lekcji: seria rzutów monet. Zakładamy, że "reszka" eliminuje monetę z gry, zostają te z "orłem". Wyniki przedstawiane były na tablicy w formie histogramu. Sugestie, że atomy można traktować jak monety (atom, który uległ przemianie, wypada z gry), uczniowie przyjęli bez oporów.

Z pomocą histogramu łatwo można było wprowadzić takie podstawowe pojęcia, jak stała rozpadu (jako prawdopodobieństwo rozpadu w jednostce czasu - tu oczywiście równe 1/2) czy czas połowicznego zaniku.

Na tym etapie zostało wprowadzone i rozwiązane równanie określające zanik próbki w czasie. Jednak rozwiązanie tego problemu (krzywa logarytmiczana) nie przystawało do narysowanego histogramu. Zwykle na tym etapie kończyłam wykład mówiąc, że dla większych próbek krzywa ta lepiej odzwierciedla dane teoretyczne, co uczniowie musieli przyjąć na wiarę. Teraz jednak mogłam pójść dalej i wykorzystać program komputerowy.

Program ma trzy opcje, z których pierwsza jest właściwie prezentacją na ekranie wykonanego dopiero co pokazu. Mamy szesnaście atomów i "ręcznie" losujemy stan rozpadu. Dokonujemy tego przez kolejne naciskanie klawisza. Atom, który się rozpadł, znika z ekranu. Po każdym odcinku czasu (w pokazie jest to kolejny rzut monetami, w programie losowanie przeprowadzone dla wszystkich atomów) rysowany jest histogram liczby pozostałych atomów. Procedura taka pozwala na przyswojenie przez uczniów faktu, że to, co dzieje się na ekranie, odzwierciedla rzeczywistość. Przeprowadzenie losowania dla różnych czasów połowicznego rozpadu pozwala dodatkowo zrozumieć różnice w historii bryłek atomów różnych pierwiastków.

Gdy uczniowie już zaakceptowali możliwość symulacji rozpadu jąder w przedstawiony sposób, mogłam pokazać im to, do czego właśnie konieczny był komputer: symulację rozpadu dla bryłki składającej się z dużej liczby atomów (w tym wypadku 10000).

Druga opcja programu - czyli właśnie symulacja bryłki prezentuje się graficznie w sposób zbliżony do pierwszej: tu też mamy atomy (prezentowane przez ciemne punkty, które zanikają w miarę rozpadu), a po każdej jednostce czasu rysowany jest histogram. Łatwo wykazać, że fluktuacje, tak widoczne przy dziesięciu lub szesnastu atomach, przestają odgrywać rolę znaczącą. Ciemna na początku "bryłka" rozjaśnia się w trakcie kolejnych losowań (atomy wypadają z gry jak w pokazie z monetami), a histogram przypomina wykres. Ten fragment programu najbardziej zainteresował moich uczniów. Wielokrotne powtórzenia pozwalają na porównanie historii bryłki przy różnych czasach połowicznego rozpadu i podział atomów na długo- i krótkożyciowe. Ciąg logiczny wykładu i podobieństwo graficzne obu opcji spowodowały, że uczniowie uwierzyli w możliwość dokładnego odtworzenia histogarmu przez krzywą logarytmiczną.

Na zakończenie lekcji zaprezentowałam (również na ekranie) przykładowe rozpady konkretnych pierwiasktków. Program umożliwia wybór jednego z czterech lub wpisanie własnego pierwiastka. Tu już nie ma prezentacji atomów za pomocą punktów, a dane są przedstawione tak, jak w książce: za pomocą wykresu.

Po wybraniu pierwiastka widzimy wykres liczby atomów w zależności od czasu, a jednocześnie nałożony zostaje wykres teoretycznej funkcji, wyprowadzonej na początku lekcji. Zaobserwowane różnice dają możliwość wprowadzenia pojęcia fluktuacji.

Na wykresie zaznaczane były czasy, po jakich zostaje połowa pierwotnej liczby atomów. Czasy te można było porównać z danymi tablicowymi (co też zrobiliśmy), a wykres przypominał rysunek z podręcznika, z rozdziału poświęconego temu tematowi.

Program ma pewne błędy i ograniczenia: najważniejsze z nich to rozbieżności między krzywą teoretyczną a symulacją, pojawiające się dla pierwiastków o krótkim czasie połowicznego zaniku i brak możliwości nakładania na siebie wykresów pierwiastków o różnych czasach połowicznego rozpadu. Niewątpliwym zaś walorem jest łatwość obsługi. Nawet nie przygotowany do pracy z komputerem nauczyciel może go użyć na lekcji bez ujawnienia swej komputerowej niewiedzy i uatrakcyjnić (spójrzmy prawdzie w oczy) nudne dla uczniów lekcje fizyki.

E. Wojtania 

Program "ROZPAD" przeznaczony jest do wspierania lekcji poświęconej statystycznemu prawu rozpadu. Wykorzystując go można unaocznić losowość rozpadu jąder atomowych i wykazać, że losowość ta prowadzi wprost do krzywej logarytmicznej.

Program posiada trzy opcje. W pierwszej z nich odbywa się losowanie dla każdego spośród 16 danych atomów. Losowanie rozpoczyna naciśnięcie klawisza [ENTER]. Jeśli wylosowana liczba jest większa od stałej rozpadu (która może być interpretowana jako prawdopodobieństwo rozpadu w jednostce czasu), atom nie rozpada się. Po losowaniu wszystkich atomów przedstawiany jest histogram liczby atomów w danej chwili. Losowanie powtarzane jest dziesięciokrotnie, co pozwala na omówienie chrakteru rozpadu i tworzonego histogramu. Po ostatnim losowaniu należy jeszcze raz wcisnąć [ENTER], by wrócić do głównego MENU.

Opcja druga przedstawia w identyczny z zewnątrz sposób rozpad 10000 atomów. Ciemne punkty oznaczają atomy, które się nie rozpadły. Losowanie jest automatyczne i trwa do czasu wciśnięcia klawisza [ESC]. Jednocześnie tworzony jest (jak poprzednio histogram liczby atomów.

Trzecia opcja przedstawia wykres zależności liczby atomów od czasu na tle teoretycznej zależności:

N = N0 e(-λ * t); (N0 = 10000)

wyprowadzonej na lekcji.

Możemy w niej wybrać jeden z czterech wprowadzonych pierwiastków z ich rzeczywistymi czasami połowicznego rozpadu lub wprowadzić dane innego. Na wykresie zaznaczane są również momenty przekroczenia połowy pierwotnej liczby atomów, co umożliwia wyjaśnienie reguł rządzących krzywą logarytmiczną.

Opcje wybierane są przez wciśnięcie klawisza z liczbą odpowiadającą jej numerowi.

Czas połowicznego rozpadu, który musimy podać na początku pierwszej i drugiej opcji, wpisujemy pamiętając, że część całkowitą oddzielamy od ułamkowej kropką, a kończymy klawiszem [ENTER]. Dobre wyniki daje wprowadzanie czasu rozpadu z zakresu 1 do 10 (ew. potęgę liczby dziesięć można traktować jako jednostkę).

Program kończymy przez wybranie liczby 0.

Uruchomienie programu nie jest możliwe bez kompilatora TURBO PASCAL, w wersji co najmniej 4.0. Użycie innych kompilatorów jest możliwe po niewielkich "kosmetycznych" przeróbkach związanych z używaniem trybu graficznego i funkcją ReadKey, która dotyczy czytania klawiatury.

Program wymaga obecności w aktywnej kartotrce sterownika karty graficznej, w jaką wyposażony jest komputer (pliki z rozszerzeniem BGI dostarczane z pakietem TURBO PASCALA).

 { --- (C) - TM 11990 Warszawa --- }
  Uses Crt, Graph;
  
  Type Pierwiastek = Record   { Definicja Atomu }
         Nazwa : String[15];  {                 }
         T12 : Real;          { Czas Poł. Rozp. }
         Jedn : String[10];   { Jednostka osi   }
       End;

 Const Dane : Array[1..5] of Pierwiastek = (
         ( Nazwa : 'URAN 238'; T12 : 4.5; Jedn '109 lat'),
         ( Nazwa : 'THOR 232'; T12 : 1.4; Jedn '1010 lat'),
         ( Nazwa : 'NEPTUN 237'; T12 : 2.2; Jedn '106 lat'),
         ( Nazwa : 'AKTYN 235'; T12 : 7.1; Jedn '1016 lat'),
         ( Nazwa : 'Nieznany'; T12 : 1.0; Jedn '..........')
        );
        
        ImpPierw : Pierwiastek = (Nazwa: '..........'; T12: 1.0; Jedn: '...');
        
 Procedure StartGrafiki;                    { Uruchomienie Trybu Grafocznego  }
 Var GraphDriver,GraphMode : Integer;       { Niezbędne w TurboPascalu        }
                                            { Na komputerze klasy PC          }
 Begin
   DetectGraph(GraphDriver, GraphMode);
   InitGraph(GraphDriver, GraphMode,'');
 End;
 
 Fuction WybierzPierwiastek: Byte;
 Var Poz : Byte;                            { Funkcja wybierająca pierwiastek }
                                            { spośród pięciu zadeklarowanych  }
                                            { w opcji trzeciej                }
     I : Integer;                           { lambda - stała rozpadu          }                                          
                                            { tau - średni czas życia         } 
 Begin
   ClrScr;
   WriteLn( 'Nazwa': 18, 'T 1/2': 20, 'Lambda': 20, 'Tau': 10);
   For I=1 To 5 
   Do Begin
     WriteLn;
     With Dane[I] 
     Do WriteLn( I:3, Nazwa:15, T12:15:2, '[', Jedn: 10, ']', 
       Ln(2)/T12:12:2, T12/Ln(2):10:2 );
     {}
   End;
   WriteLn;
   WriteLn;
   Write('Podaj Numer Pierwiastka (lub Podaj Dane Nieznanego)');
   Repeat
     {$i-}        { Zabezpieczenie Przed Podaniem }
     ReadLn(Poz); { Niepoprawnych Danych }
     {$i+}
   Until ((IOResult = 0) And (Poz In[1..5]));
   Case Poz Of
     1..4 : WybierzPierwiastek := Poz;
     5 : Begin
       With Dane[5] Do
       Begin
         Write('Podaj Nazwę '); 
         ReadLn(Nazwa);
         Repeat
           {$I-}
           Write('Podaj T1/2 ');
           ReadLn(T12);
           {$I+}
         Until IOResult = 0;
         Write('Jednostka T1/2 ? ');
         ReadLn(Jedn);
       End;
       WybierzPierwiastek := 5;
     End;
   End;
 End;
 
 Procedure Losowanie; 
 Var Bryla : Array[1..4, 1..4] Of Boolean;
     I,J : Byte;
     T12 : Real;                {* Pierwsza Opcja Programu   *}
     Czas : Byte;               {* Losowanie dla 16 "Atomów" *}
     Ilosc : Byte;
     Los : Real;
     Znak : Char;
 Begin
   For I := 1 To 4 
   Do For J := 1 To 4 
   Do Bryla[I,J] := True;
   ClrScr;
   Repeat
     Write('Podaj T1/2 (Losowanie Dla 16 Atomów) ');
     {$I-}
     ReadLn(T12);
     {$I+}
   Until IOResult := 0;
   ClrScr;
   WriteLn(' 1234');
   WriteLn;
   For I := 1 To 4 Do
   Begin
     Write(I,' ');                               {* Rysowanie Obrazu *}
     For J := 1 To 4 Do Write('X '):             {* "Bryłki Atomów"  *} 
     WriteLn;
     WriteLn;
   End;
   WriteLn('T1/2   = ',T12:4:2);
   WriteLn;
   WriteLn('Lambda = ',Ln(2)/T12:4:2);
   WriteLn;
   WriteLn('Tau    = ',T12/Ln(2):4:2);
   Czas := 0;
   While Czas <= 10 Do
   Begin
     Sound(400);
     Delay(500);
     NoSound;
     GoToXY(1,20);
     WriteLn('CZAS: ', Czas);
     Inc(Czas);
     Ilość := 0;
     For I := 1 To 4 
     Do For J := 1 To 4                   {* Powstawianie i Rysowanie *} 
     Do If Bryla[I,J]                     {*        Histogramu        *} 
     Then Begin
       Inc(Ilosc);
       GoToXY(35 + Czas, 20 - Ilosc);
       Write('I');
     End;
     
     {* Losowanie *}
     For I :=1 To 4 
     Do For J :=1 To 4 
     Do If Bryla[I,J] 
     Then Begin 
       GoToXY(1,17);
       WriteLn('Atom z pozycji (',1,',',J,')');
       Randomize;
       Los := Random;
       Write('Wylosowano:',Los:5:2);
       If Los < ln(2)/T12 
       Then Begin 
         WriteLn('Rozpada się !!!');
         Bryla[I,J] := False;
         GotoXY(I*2+1, J*2+1);
         Write(' ');
       End Else WriteLn(' nie rozpada się');
       Znak := ReadKey;
       If Znak = 127 Then Exit;
     End;
   End;
   Znak = ReadKey;
 End;
 
 Procedure Rozpad;
 Var Bryla Array[1..100],[1..100] Of Boolean;
     T12 : Real;
     Lambda : Real;
     I,J : Integer;
     Znak : Char;
     Ilosc : Integer;
     StrTmp : String[10];
 Begin 
   ClrScr;
   Repeat
     ClrScr;
     Write('Podaj T1/2 (losowanie dla 10000 atomów) ');
     {$I-}
     ReadLn(T12);
     {$I+}
   Until IOReasult = 0;
   Lambda := (Ln(2)/T12;
   Randomize;
   StartGrafiki;
   ClrScr;                                    (* "Pudełko" z Atomami *)
   Line(0,0,0,101);
   Line(0,101,101,101);
   Line(101,101,101,0);
   Line(0,0,101,0);
   
   Str(T12:4:2,StrTmp);
   OutTextXY(1,20,'  T1/2 = ' + StrTmp);
   Str(Ln(2)/T12:4:2,StrTmp;
   OutTextXY(1,40,'Lambda = ' + StrTmp);
   Str(T12/Ln(2):4:2,StrTmp;
   OutTextXY(1,60,'   Tau = ' + StrTmp);
   
   For I := 1 To 100 Do
     For J := 1 To 100 Do 
     Begin 
       Bryla[I,J] := True;
       PutPixel(I,J,1);
     End;
     
   Czas := 0;
   Ilosc := 10000;
   While Czas < 200 Do
   Begin 
     Inc(Czas);
     Line(200+Czas, 150, 200+Czas, 150 - Ilosc Div 80); 
     
     For I := 1 To 100 Do
       For J := 1 To 100 Do
         
         If Bryla[I,J] 
         Then If Random < Lambda 
         Then Begin 
           Bryła[I,J] = False;
           Dec (Ilosc); 
           PutPixel(I,J,0); 
         End;
         
         If Czas = 200 Then Znak := ReadKey;  (* Stop po 200 okresach   *) 
         
         If KeyPressed Then                   (* Lub                    *) 
         Begin                                (* Po wciśnięciu klawisza *) 
           CloseGraph;
           Exit;
         End;
     (**)
   End;
   CloseGraph;
 End;
 
 Procedure Przyklady;
 Var Bryla : Array[1..10000] Of Boolean; 
     Czas : Integer; 
     I : Integer; 
     Pierw : Pierwiastek;    (* Opcja trzecia programu *) 
     Lambda : Real;          (* Przykłady rozpadu *) 
     Znak : Char; 
     Ilosc : Integer; 
     Tmp : Integer; 
     Polowa : Integer; 
     TmpStr : String[20]; 
 Begin 
   Pierw := Dane[WybierzPierwiastek]; 
   
   For I := 1 To 10000 Do Bryla := True; 
   
   Lambda := Ln(2)/Pierw.T12; 
   StartGrafiki;             (* Rysowanie Ekranu *) 
   Line(018,002,020,000); 
   Line(020,000,020,170); 
   Line(020,170,250,170); 
   Line(250,170,248,172); 
   OutTextXY(1,1,'N'); 
   OutTextXY(200,180,Pierw.Jedn); 
   Line(20,170-10000 Div 80,17,170-10000 Div 80); 
   Line(200,20,220,20); 
   OutTextXY(230,15,Pierw.Nazwa); 
   Circle(210,30,2); 
   OutTextXY(230,25,'N=NoExp(-Lambda*T'); 
   Czas := 0; 
   Ilość := 10000; 
   Polowa := Ilość; 
   Randomize; 
   
   While Czas P 40 Do 
   Begin 
     
     If KeyPressed Then 
     Begin 
       CloseGraph; 
       Exit; 
     End;
     
     Tmp := Ilość; 
     Circle(20+Czas*5,170-Round(10000 * Exp(-Lambda * Czas)) Div 80,2); 
     
     For I := 1 To 10000 Do 
       If Bryla[I] Then 
         If Random P Lambda   (* Losowanie *) 
         Then Begin 
           Dec(Ilosc); 
           Bryla[I] := False; 
         End; 
     {-} 
     
     Line(20+Czas*5,170,20+Czas*5,165); 
     Inc(Czas); 
     
     If Ilosc P (Polowa Div 2) 
     Then Begin                     (* Rysowanie krzywej teoretycznej *)
       SetLineStyle(DottedLn,0,1); 
       Line(20+Czas*5,170,20+Czas*5,170-Ilosc Div 80); 
       Line(20,170-Ilosc Div 80, 20+Czas*5,170-Ilosc Div 80); 
       SetLineStyle(SolidLn,0,1); 
       Pozioma := Ilosc; 
     End; 
     
     Line(20+(Czas-1)*5,170-Tmp Div 80, 20+Czas*5, 170-Ilosc Div 80); 
   End;
   
   Znak := ReadKey;  (* Stop po wciśnięciu klawiatury *) 
   CloseGraph; 
 End; 
 
 Var Znak : Char; 
 Begin 
   Repeat 
     ClrScr; 
     WriteLn; 
     WriteLn('1 - losowanie nieautoatyczne dla 16 atomów'); 
     WriteLn;
     WriteLn('2 - losowanie automatyczne dla 10000 atomów'); 
     WriteLn;
     WriteLn('3 - przykłady konkretnych rozpadów'); 
     WriteLn;
     WriteLn('0 - Koniec'); 
     Znak := ReadKey; 
     
     Case Znak Of 
       '1' : Losowanie; 
       '2' : Rozpad; 
       '3' : Przyklady; 
     End; 
   Until znak = '0'; 
 End;