Den generiske modellen for bindingsenergi fra Atombinding er bare en empirisk modell, og skal den ha noe nytte, må vi kunne finne/tilpasse de ulike parametrene slik at modellen passer med et virkelig system.
Oppsummering av relasjoner:
Energifunksjonen:
\begin{equation} E = -A r^{-m} + B r^{-n} \tag{1} \end{equation}Kraft er energi derivert med hensyn på $r$
\begin{equation} F = mA r^{-m-1} -nB r^{-n-1} \tag{2} \end{equation}Ved likevekt er $E = E_0$ når $r = r_0$ slik at (1) blir
\begin{equation} E_0 = -A r_0^{-m} + B r_0^{-n} \tag{3} \end{equation}Ved likevekt er $F=0$ og ligning (2) blir dermed
\begin{equation} 0 = mA r_0^{-m-1} -nB r_0^{-n-1} \tag{4} \end{equation}Dermed kan vi løse (3) og (4) med hensyn på $A$ og $B$:
Fra (4):
\begin{equation} B = \frac{m}{n} A r_0^{n-m} \tag{5} \end{equation}Substituerer $B$ fra (5) i (3):
\begin{equation} A = -\frac{E_0 r_0^m}{1-m/n} \tag{6} \end{equation}Bindingens stivhet $k$ ved likevektsavstanden $r_0$ er
\begin{equation} k = \frac{dF}{dr} \bigg |_{r=r_0} =-(m+1)mA r_0^{-m-2} + (n+1)nB r_0^{-n-2} \tag{7} \end{equation}Separasjonsavstanden $r_s$ er der kraften har et maksimum:
\begin{equation} \frac{dF}{dr}\bigg |_{r=r_s} = 0 \Rightarrow -(m+1)mA r_s^{-m-2} + (n+1)nB r_s^{-n-2} = 0 \Rightarrow r_s = \bigg( \frac{m(m+1)A}{n(n+1)B} \bigg)^\frac{1}{m-n} \tag{8} \end{equation}Maks kraft $F_s$ blir nå gitt av (2) innsatt for $r = r_s$ fra (8)
Numerisk eksempel:
import numpy as np
from matplotlib import pyplot as plt
E0 = -3
r0 = 0.25
m = 8
n = 4
A = -(E0*r0**m)/(1-m/n) # ligning (6)
B = (m/n)*A*r0**(n-m) # ligning (5)
r=np.linspace(0.2, 0.4, 1000)
E = -A*r**(-m) + B*r**(-n) # ligning (1)
F = m*A*r**(-m-1) -n*B*r**(-n-1) # ligning (2)
k = -(m+1)*m*A*r0**(-m-2) + (n+1)*n*B*r0**(-n-2) # ligning (7)
rs = ( (m*(m+1)*A)/(n*(n+1)*B) )**(1/(m-n)) # ligning (8)
Fs = m*A*rs**(-m-1) -n*B*rs**(-n-1) # ligning (2) for r=rs
fig,(ax1,ax2)=plt.subplots(nrows=1, ncols=2,figsize=(9,5))
ax1.plot(r,E ,color='blue',label='$E$')
ax1.set_xlabel('$r$ [nm]')
ax1.set_ylabel('$E$ [eV]')
ax1.legend(loc='best')
ax1.grid(True)
ax1.set_xlim(0.2,max(r))
ax1.set_ylim(E0*1.1,0)
ax1.set_title('$E_0$={}, $r_0$={}, $m$={:.1f}, $n$={:.1f}, $A$={:.2E}, $B$={:.2E}'.format(E0,r0,m,n,A,B), fontsize=10)
ax2.plot(r,F ,color='red',label='$F$')
ax2.set_xlabel('$r$ [nm]')
ax2.set_ylabel('$F$ [eV / nm]')
ax2.legend(loc='best')
ax2.grid(True)
ax2.set_xlim(0.2,max(r))
ax2.set_ylim(-Fs/3,Fs*1.1)
ax2.set_title('$F_s$={:.2f}, $r_s$={:.3f}, k={:.1f}'.format(Fs,rs,k), fontsize=10)
plt.tight_layout()
plt.draw()
Effekten av $m$ og $n$
Separasjonskraften $F_s$ og bindingens stivhet $k$ øker med økende verdier av $m$ og $n$ som vist i følgende eksempel:
E0 = -3 # holdes konstant
r0 = 0.25 # holdes konstant
fig,(ax1,ax2)=plt.subplots(nrows=1, ncols=2,figsize=(9,5))
r=np.linspace(0.2, 0.5, 1000)
for m,n in zip((2,2,2,3,3,3),(4,5,6,4,5,6)):
A = -(E0*r0**m)/(1-m/n) # ligning (6)
B = (m/n)*A*r0**(n-m) # ligning (5)
E = -A*r**(-m) + B*r**(-n) # ligning (1)
F = m*A*r**(-m-1) -n*B*r**(-n-1) # ligning (2)
k = -(m+1)*m*A*r0**(-m-2) + (n+1)*n*B*r0**(-n-2) # ligning (7)
ax1.plot(r,E ,label='m={}, n={}'.format(m,n))
ax1.set_xlabel('$r$ [nm]')
ax1.set_ylabel('$E$ [eV]')
ax1.legend(loc='best')
ax1.set_ylim(E0*1.1,0)
ax1.grid(True)
ax2.plot(r,F ,label='k={:.0f}'.format(k))
ax2.set_xlabel('$r$ [nm]')
ax2.set_ylabel('$F$ [eV]')
ax2.legend(loc='best')
ax2.set_ylim(-5,15)
ax2.grid(True)
plt.tight_layout()
plt.draw()
Parameter fra empiriske data
Anta at vi har, på en eller annen måte, funnet følgende data gjennom empiriske målinger:
$$E_0 = -4, \quad r_0 = 0.3, \quad k = 900, \quad F_s = 900$$Hva blir verdiene av $m$, $n$, $A$ og $B$?
Nå har vi tilstrekkelig med ligninger og grensebetingelser, men vi har et system av ligninger som ikke akkurat er lineære. Systemet kan løses numerisk med f.eks. scipy.optimize.fsolve, men denne metoden krever uansett god første gjetting på startverdier for iterasjonene, så vi kan likegodt gjøre en mindre avansert prosess:
E0 = -4 # holdes konstant
r0 = 0.3 # holdes konstant
k_empirisk = 900
Fs_empirisk = 16
for i in range(0,1000000): # kjører en million tester...
m = 1+10*np.random.random() # antar at n er mellom 1 og 10
n = 1+10*np.random.random() # antar at m er mellom 1 og 10
A = -(E0*r0**m)/(1-m/n) # ligning (6)
B = (m/n)*A*r0**(n-m) # ligning (5)
k = -(m+1)*m*A*r0**(-m-2) + (n+1)*n*B*r0**(-n-2) # ligning (7)
rs = ( (m*(m+1)*A)/(n*(n+1)*B) )**(1/(m-n)) # ligning (8)
Fs = m*A*rs**(-m-1) -n*B*rs**(-n-1) # ligning (2) for r=rs
if abs(k-k_empirisk) < 1 and abs(Fs-Fs_empirisk) < 0.1: # sjekker om resultater er tilstrekkelig nærme
print('m:{:.2f}, n:{:.2f}, k:{:.1f}, Fs:{:.2f}'.format(m,n,k,Fs))
Resultatet viser at det er to sett av parameter som tilfredstiller empiriske data:
$$m \approx 2.3, \quad n \approx 8.6$$og
$$m \approx 8.6, \quad n \approx 2.3$$... og de gir identiske kurver:
fig,(ax1,ax2)=plt.subplots(nrows=1, ncols=2,figsize=(9,5))
r=np.linspace(0.2, 0.5, 1000)
for m,n in zip((2.3, 8.6),(8.6,2.3)):
A = -(E0*r0**m)/(1-m/n) # ligning (6)
B = (m/n)*A*r0**(n-m) # ligning (5)
E = -A*r**(-m) + B*r**(-n) # ligning (1)
F = m*A*r**(-m-1) -n*B*r**(-n-1) # ligning (2)
k = -(m+1)*m*A*r0**(-m-2) + (n+1)*n*B*r0**(-n-2) # ligning (7)
ax1.plot(r,E,label='m={}, n={}'.format(m,n))
ax1.set_xlabel('$r$ [nm]')
ax1.set_ylabel('$E$ [eV]')
ax1.legend(loc='best')
ax1.set_ylim(E0*1.1,0)
ax1.grid(True)
ax2.plot(r,F ,label='k={:.0f}'.format(k))
ax2.set_xlabel('$r$ [nm]')
ax2.set_ylabel('$F$ [eV]')
ax2.legend(loc='best')
ax2.set_ylim(-5,16)
ax2.grid(True)
plt.tight_layout()
plt.draw()
Energipotensialet uttrykt som
\begin{equation} E = -\frac{A}{r^m} + \frac{B}{r^n} \tag{1} \end{equation}er en alternativ notasjon til Mie-potensialet som mer vanlig blir uttrykt på følgende form:
\begin{equation} E = C E_0 \bigg( \Big( \frac{r_c}{r} \Big)^m - \Big( \frac{r_c}{r} \Big)^n \bigg) \tag{9} \end{equation}hvor
$$C = \frac{n}{n-m}\Big( \frac{n}{m} \Big) ^{\frac{m}{n-m}} $$og parameteren $r_c$ angir hvor energien er null (til venstre for likevektsavstanden).
Sammenhengen mellom parametrene er illustrert i følgende kode:
E0 = -3
r0 = 0.25
m = 4
n = 8
A = -(E0*r0**m)/(1-m/n) # ligning (6)
B = (m/n)*A*r0**(n-m) # ligning (5)
r=np.linspace(0.15, 0.6, 50)
E = -A*r**(-m) + B*r**(-n) # ligning (1)
C = (n/(n-m))*(n/m)**(m/(n-m))
rc = (-A/(E0*C))**(1/m) # Oppgave: vis denne sammenhengen
E_Mie = C*E0*((rc/r)**m - (rc/r)**n) # ligning (9)
fig,ax=plt.subplots(nrows=1, ncols=1,figsize=(8,4))
ax.plot(r,E,color='red',label='(1)')
ax.plot(r,E_Mie,'.', color = 'blue', label='(9)')
ax.plot([rc,rc],[E0*1.1,0],'--', color = 'black') # illustrerer hvor rc er
ax.set_xlabel('$r$ [nm]')
ax.set_ylabel('$E$ [eV]')
ax.legend(loc='best')
ax.grid(True)
ax.set_xlim(0.1,max(r))
ax.set_ylim(E0*1.1,2)
ax.set_title('$C$={}, $r_c$={:.3f}, $A$={:.2E}, $B$={:.2E}'.format(C,rc,A,B), fontsize=10)
plt.tight_layout()
plt.draw()
Et annet energipotensial som er mye brukt er Morse-potensialet som har følgende form:
\begin{equation} E = -E_0 \big(\exp(-2a(r-r_0)-2\exp(-a(r-r_e)) \big) \tag{10} \end{equation}E0 = -3
r0 = 0.25
m = 4
n = 8
A = -(E0*r0**m)/(1-m/n) # ligning (6)
B = (m/n)*A*r0**(n-m) # ligning (5)
r=np.linspace(0.15, 0.6, 100)
E = -A*r**(-m) + B*r**(-n) # ligning (1)
a=16 # tilpasset på øyemål i forhold til (1)
E_Morse = -E0*(np.exp(-2*a*(r-r0)) -2*np.exp(-a*(r-r0)) ) # ligning (10)
fig,ax=plt.subplots(nrows=1, ncols=1,figsize=(8,4))
ax.plot(r,E,color='red',label='(1)')
ax.plot(r,E_Morse, color = 'blue', label='(10)')
ax.set_xlabel('$r$ [nm]')
ax.set_ylabel('$E$ [eV]')
ax.legend(loc='best')
ax.grid(True)
ax.set_xlim(0.1,max(r))
ax.set_ylim(E0*1.1,2)
plt.tight_layout()
plt.draw()