KodHTML

czwartek, 6 lutego 2020

Przykładowa hybryda orbitali atomowych

   Hybrydyzacja to procedura matematyczna, której użył Linus Pauling do wyjaśnienia wyznaczonych doświadczalnie kątów między wiązaniami w prostych cząsteczkach np. metanu, etenu, wody czy amoniaku. Hybrydyzacja to procedura sumowania orbitali, czyli dodawania (i odejmowania oczywiście) funkcji. Zrobił to bo orbitale 2s i 2p dawały dziwaczny obraz wiązań w tych cząsteczkach. Sumy orbitali odtwarzały rozsądnie dane doświadczalne. Jak się sumuje funkcje. Zupełnie prosto. Bierzemy dwie (albo więcej) funkcji i dodajemy je do siebie. Czasem mnożymy je przez współczynniki. To wszystko.
   Zrealizujmy praktycznie dodawanie funkcji 2s oraz 2px, ale z pominięciem współczynników, które są konieczne w obliczeniach szczegółowych, ale zaciemniają istotę zagadnienia. Wynik i tak będzie sensowny. Dodawanie realizują programy, których wydruki są na końcu tego wpisu zamieszczony poniżej.

   Wynik działania programu z zaznaczeniem na fioletowo części ujemnej orbitalu, a na kolor niebieski części dodatniej.
   Proszę o dokonanie doświadczeń z mnożeniem poszczególnych orbitali przez współczynniki, aby zorientować się, co do wpływu wartości tych stałych na kształt hybrydy. Proszę sprawdzić, jak wpływa usunięcie apostrofu sprzed zmiennej orbital3 na orientację "hantli" hybrydy. Czy powstanie wtedy jedno z ramion hybrydy sp2? Jeszcze tylko małe usprawiedliwienie. Wybrałem hybrydę sp, dlatego że bez żadnych kłopotów daje się narysować na płaszczyźnie ekranu. Podobnie jest z hybrydą sp2. Inne hybrydy rozmieszczone są często między osiami (np. hybryda sp3). Rysowanie przekrojów w jednej płaszczyźnie daje mocno zubożony obraz takiej funkcji. W celu uzyskania poprawnych obrazów należy stosować przekroje trójwymiarowe.

Starsza wersja programu w QBASICu:
'-------------- poczatek danych
skala = 45
ustawx = 300
ustawy = 230
kontur = .15
startx = -4.2
koniecx = 3.2
starty = -4.2
koniecy = 4.2
boksiatki = .02
'-------------- koniec danych
screen 12
for x = startx to koniecx step boksiatki
   for y = starty to koniecy step boksiatki
     r = sqr(x * x + y * y)
     orbital1 = (2 - r) * exp(-r)
     orbital2 = x * exp(-r)
     'orbital3 = y * exp(-r)
     hybryda = orbital1 + orbital2 '+ orbital3
     xekran = x * skala + ustawx
     yekran = y * skala + ustawy
     if hybryda >= kontur then pset (xekran, yekran), 3
     if hybryda <= -kontur then pset (xekran, yekran), 5
   next y
next x

Nowsza wersja (2020) programu w SmallBasicu:
dane()
for x = startx to koniecx step boksiatki
   for y = starty to koniecy step boksiatki
     r = Math.SquareRoot(x * x + y * y)
     orbital1 = (2 - r) * Math.Power(exp, -r)
     orbital2 = x * Math.Power(exp, -r)
     'orbital3 = y * Math.Power(exp, -r)
     hybryda = orbital1 + orbital2 '+ orbital3
     xekran = x * skala + ustawx
     yekran = y * skala + ustawy
     if hybryda >= kontur then
        GraphicsWindow.SetPixel(xekran, yekran, "blue")
       ElseIf hybryda <= -kontur then
        GraphicsWindow.SetPixel(xekran, yekran, "magenta")
       EndIf  
   EndFor 
  EndFor
 
Sub dane
 skala = 45
 ustawx = 300
 ustawy = 230
 kontur = .15
 startx = -4.2
 koniecx = 3.2
 starty = -4.2
 koniecy = 4.2
 boksiatki = .02
 exp = 2.71
EndSub

   

Brak komentarzy:

Prześlij komentarz