O robicie Bohra koncepcji de Broglie'a i co z tego może jeszcze wyniknąć
Kilka wakacyjnych dni roku 2021 poświęciłem na przygotowanie procedury, która pokazuje tor w modelu Bohra atomu wodoru. Zadałem sobie pytanie, czy ruch elektronu po okręgu jest jedynym, który spełnia warunek kwantowania momentu pędu dany wzorem:
Wyszedłem od tego, żeby średni promień ruchu po jakiejś krzywej, albo łamanej był taki, jak np. promień pierwszej orbity Bohra. Ten pomysł nieco zmodyfikował zapis równania na moment pędu elektronu:
Teraz wystarczyło znaleźć jakiś tor, który zachowywałby średnio moment pędu. Wydało mi się dość naturalne, żeby przyjąć jakiś tor, który odpowiada np. poglądowi de Broglie'a na falową naturę elektronu. Oznaczało to, że taki tor (ale z pominięciem interpretacji falowej) może odpowiadać zamkniętej sinusoidzie wokół jądra atomowego. Taka sinusoida byłaby scharakteryzowana przez jakąś częstotliwość i amplitudę.
![]() |
Ruch elektronu po sinusoidalnej orbicie dookoła jądra atomowego |
Przedstawiony model jest pierwszym krokiem do budowy chaotycznego modelu atomu. Ważny element polega na tym, że ruch sinusoidalny leży w większości poza kołową orbitą. Przecina ją w wybranych punktach. Tę myśl chciałbym kontynuować. Oznacza to zbudowanie modelu atomu, który przypomina ten opisany przez funkcje gęstości elektronowej. Dowcip jednak polega na tym, że nie powinno tam być tych funkcji, nie powinno być toru (przynajmniej w przestrzeni trójwymiarowej), powinno się dać obliczyć rozkład gęstości elektronowej w trójwymiarowej przestrzeni wokół jądra i atom powinien mieć rozmyte, ale skończone rozmiary. Sądzę, że jest to wykonalne - przynajmniej jako ćwiczenie z myślenia.
Poniżej tekst programu, który napisałem w Small Basicu, a który rysuje oba przedstawione wyżej tory:
'bohr-sinusoida i średni moment pędu
dane()
rysuj_jadro()
'Program.Delay(10000) 'w celu nagrania z ekranu za pomocą xgame Win10
For alfa = 0 To 3*koniec_okregu Step krok
r1 = r + amplituda*math.Sin(czestosc*alfa) 'sinusoida przes o r na osi y jeśli r1 = r to mamy model Bohra
xw1 = r1*math.Cos(alfa) 'punkt na sinusoidzie wsp.alfa wektora promienia
yw1 = r1*math.sin(alfa) ' j.w.
rysuj_punkt()
r2 = r + amplituda*math.Sin(czestosc*(alfa + krok)) 'promień następnego punktu na sinusoidzie
xw2 = r2*math.Cos(alfa + krok) - xw1 'wsp. x wektora pędu przy stałej prędkości
yw2 = r2*math.Sin(alfa + krok) - yw1 'wsp y wektora pędu
'skalowanie współrzednych wektora pędu
xw2 = xw2 * skala2
yw2 = yw2 * skala2
'moment pędu wektorów
'moment_pedu()
EndFor
'TextWindow.WriteLine("Średni moment pędu = " + Lesuma/indeks)
'podprocedury
Sub dane
ball = Shapes.AddEllipse(10,10) 'zdefiniowanie obiektu da animacji
ball2 = Shapes.AddEllipse(6,6) 'drugi biekt do animacji
GraphicsWindow.PenWidth=2
r = 1 'promień atomu wodoru w jednostkach atomowych
koniec_okregu = 2*Math.Pi
amplituda = 0.2 'amplituda sinusoidy
czestosc = 30 'częstość sinusoidy
skala = 180 'skala rysowania
skala2 = 996.001 'skala dla pędu aby uzyskać średni moment pędu pkoło 1.
transx = 300 'przesunięcie pocz. układu wsp. na osi x
transy = 220 'przesunięcie pocz. układu wsp. na osi y
krok = 0.001 'krok kąta
indeks = 1 'wskażnik do obliczenia średniego momentu pędu
Lesuma = 0 'początkowy moment pędu
EndSub
Sub rysuj_punkt
xe = xw1*skala + transx
ye = yw1*skala + transy
GraphicsWindow.SetPixel(xe,ye, "red")
xkolo = r * Math.Cos(alfa)
ykolo = r * Math.Sin(alfa)
GraphicsWindow.SetPixel(xkolo*skala + transx, ykolo*skala + transy, "blue")
Shapes.Move(ball, xe-5, ye-5)
opozniacz() 'lepiej działa niż program.delay()
EndSub
Sub rysuj_jadro
GraphicsWindow.SetPixel(transx,transy, "green") 'środek jądra
GraphicsWindow.DrawEllipse(transx -10, transy - 10, 20,20) 'koło imitujące jądro
EndSub
Sub moment_pedu
L = xw1*yw2 - xw2*yw1 'moment pędu z iloczynu wektorowego
xe = alfa*skala 'do rysunku zmian mpmentu pędu
Le = L*skala +100 'do rysunku zmian momętu pędu
Lesuma = Lesuma +L 'zliczanie pędu całkowitego
indeks = indeks+1 'zliczanie mianownika do średniego momętu pędu
GraphicsWindow.SetPixel(xe,Le, "green")
Shapes.Move(ball2, xe-3, Le-3)
EndSub
Sub opozniacz
For j = 1 To 2000 ' "opóźniacz rysowania" - komenda program.delay(100) jakoś słabo działa
a=1
EndFor
EndSub


Komentarze
Prześlij komentarz