1D ժամանակի անկախ Շրյոդինգերի հավասարման թվային լուծում
Թվում է, թե ոչ ոք, նույնիսկ փորձագետները, իսկապես չեն հասկանում քվանտային մեխանիկա: Ոչ իսկապես! Ռիչարդ Ֆեյնմանը, ֆիզիկայի հայտնի Նոբելյան դափնեկիր և երկրագնդի վրա քայլած ամենահանճարեղ գիտնականներից մեկը, մի անգամ մեջբերել է. Չնայած այս անհասկացողությանը՝ քվանտային մեխանիկա նույնպես պարզվել է, որ մարդկության կողմից երբևէ ստեղծած ամենահաջող գիտական տեսությունն է:
Քվանտային մեխանիկան քիմիայի հիմքն է, որը կենսաբանության և հետևաբար կյանքի հիմքն է: Քվանտային մեխանիկան բացատրում է, թե ինչու է ոսկին ոսկեգույն և ոչ արծաթագույն, ինչպես մյուս մետաղները, ինչու է արևը փայլում, ինչպես են արևային բջիջները լույսը վերածում էլեկտրականության և ինչպես են աշխատում միջուկային ռումբերը։ Առանց քվանտային մեխանիկայի, աշխարհը շատ այլ կերպ կզարգանա:
Պատճառներից մեկը, թե ինչու ես ընտրեցի զբաղվել ֆիզիկայով, այն էր, որ ես պարզապես պետք է ավելին իմանայի քվանտային մեխանիկայի մասին: Սա ինձ համար ասացվածքային անտանելի քորն էր, որը պարզապես պետք էր քորել: Այսօր ես ուզում եմ մի փոքր կիսվել իմ իմացածով և հուսով եմ, որ դուք նույնպես ավելի կհետաքրքրվեք այս հետաքրքրաշարժ ոլորտով:
Ժամանակի անկախ Շրյոդինգերի հավասարումը
Շրյոդինգերի հավասարումը քվանտային մեխանիկայի համար նույնն է, ինչ Նյուտոնի շարժման օրենքները կինեմատիկայի համար: Շրյոդինգերի հավասարումը նկարագրում է, թե ինչպես են ենթաատոմային մասնիկներն իրենց պահում քվանտային մեխանիկական համակարգում։ Ընդհանուր դեպքում, Շրյոդինգերի հավասարումը պարունակում է և՛ ժամանակային, և՛ տարածական ածանցյալներ, որոնք նույնիսկ հաշվողական մեթոդներով լուծելը չնչին չէ:
Բարեբախտաբար, կարելի է ենթադրել, որ լուծման ժամանակային և տարածական մասերը կարելի է ձեռք բերել փոփոխականների տարանջատման միջոցով, և մենք կարող ենք կենտրոնանալ միայն տարածական ածանցյալներ պարունակող հատվածի լուծման վրա: Հավասարման այս մասը ժամանակի անկախ Շրյոդինգերի հավասարումն է, որը մենք կուսումնասիրենք այսօր:
Սեփական արժեքներ և սեփական վեկտորներ
Ժամանակից անկախ Շրյոդինգերի հավասարումը սեփական արժեքի խնդիր է: Սա նշանակում է, որ այն կարող է ձուլվել մատրիցային ձևով՝ Hψ = Eψ, որտեղ H-ը Համիլտոնյան մատրիցն է (Համիլտոնյան ըստ էության մասնիկի գումարն է։ կինետիկ և պոտենցիալ էներգիաներ), ψ-ը ալիքի ֆունկցիայի վեկտորն է, իսկ E էներգիայի սեփական արժեքն է: Ավելի քիչ մաթեմատիկական հակվածների համար այս հարաբերությունը պարզապես նշանակում է, որ H մատրիցը բազմապատկելով ψ վեկտորին տալիս է նույն արդյունքը, ինչ E սկալյար արժեքը բազմապատկելը: վեկտորին ψ. Ֆիզիկապես սա նշանակում է, որ Համիլտոնի գործարկումը, որը կինետիկ և պոտենցիալ էներգիաների գումարն է, վերադարձնում է մասնիկի ընդհանուր էներգիան:
Եթե մենք կարողանանք որոշել H մատրիցայի ձևը, ապա կարող ենք թվայինորեն լուծել սեփական արժեքի հավասարումը` ստանալով ինչպես քվանտային մեխանիկական ալիքի ֆունկցիան ψ, այնպես էլ համապատասխան ընդհանուր մասնիկը: էներգիա E:
Ինչպես երևում է այս գրառման վերևի հավասարման մեջ, Hմատրիցան երկրորդ կարգի ածանցյալի գումարն է (ֆիզիկապես սա կինետիկ էներգիան է) և պոտենցիալ էներգիան V em>. Պարզության համար մենք կենթադրենք, որ Պլանկի հաստատունը ħ և մասնիկների զանգվածը m երկուսն էլ հավասար են 1-ի: Նաև Շրյոդինգերի հավասարումը թվային կերպով կլուծենք միայն մեկ հարթությունում:
1D Շրյոդինգերի հավասարման դիսկրետիզացում
Առաջին քայլը տարածական ածանցյալի թվային իրականացումն է: Երկրորդ կարգի կենտրոնական վերջավոր տարբերությունները մեկ հարթության մեջ օգտագործելով՝ ψ ալիքի ֆունկցիան թվայինորեն տարբերվում է հետևյալ կերպ՝ -1/(2dx²)(ψ >[n-1]–2ψ[n] + ψ[n+1]): Արդյունքը դիսկրետացված 1 ծավալային Շրյոդինգերիհավասարումն է, որը ներկայացված է ստորև: Նկատի ունեցեք, որ մենք պարզության համար սահմանել ենք ħ = m = 1, և որ dx օգտագործված տարածական ցանցի քայլի չափն է:
Հետևաբար, եթե V և E արժեքները չափենք 2 գործակցով, ապա Համիլտոնյան մատրիցը H ստանում է եռանկյուն մատրիցայի ձև։ 2/dx²-ով հիմնական անկյունագծով, և -1/dx²-ով` հիմնական անկյունագծից վերևում և ներքևում գտնվող առաջին անկյունագծերում: Այնուհետև մենք ավելացնում ենք V պոտենցիալ էներգիան, որպեսզի լրացնենք Համիլտոնյան մատրիցը H:
Նկատի ունեցեք, որ Համիլտոնյան մատրիցը նման ձևով կարգավորելը հանգեցնում է նրան, որ Դիրիխլեի սահմանային պայմանները ներհատուկ կերպով կիրառվում են թվային համակարգի վրա: Սա նշանակում է, որ ալիքային ֆունկցիան ψանհետանում է մեր համակարգի սահմաններում։ Սա պետք է գործի ընդհանուր առմամբ իրավիճակների մեծ մասի համար, բայց կարող է խախտվել այն իրավիճակների համար, որոնք պահանջում են սահմանային պայմանների այլ ձևեր, ինչպիսիք են պարբերական սահմանային պայմանները:
Սեփական արժեքի խնդրի լուծումը թվային եղանակով
Ստանդարտ գծային հանրահաշվի գրադարաններ օգտագործելու փոխարեն մենք օգտագործում ենք նոսր մատրիցային գծային հանրահաշվի գրադարանը: Դա պայմանավորված է նրանով, որ Համիլտոնյան մատրիցը H բաղկացած է հիմնականում 0-երից (այսինքն՝ մատրիցը նոսր է), և նոսր մատրիցային գրադարանների օգտագործումը կօգնի արագացնել հաշվարկը չափազանց մեծ համակարգերի համար: Նաև նոսր մատրիցային սեփական արժեքի հաշվիչների օգտագործումը թույլ է տալիս մեզ վերահսկել գտնելու լուծումների քանակը, այլ ոչ թե հաշվարկել յուրաքանչյուր հնարավոր լուծումը, որը կխլի շատ ժամանակ և ռեսուրսներ:
H-ը կառուցելուց հետո մենք հաշվարկում ենք նրա սեփական վեկտորները և սեփական արժեքները՝ օգտագործելով [evl, evt] = sla.eigs(H, k = neigs, which = 'SM')
: Մենք ընտրում ենք լուծումների քանակը, որոնք պետք է ստացվեն՝ սահմանելով k = neigs
արժեքը, ինչպես նաև ընտրում ենք ստանալ ամենափոքր մեծության լուծումները which = 'SM'
-ով: Այնուհետև սեփական վեկտորները նորմալացվում են:
Python կոդը, որն օգտագործվում է H կառուցելու և դրա սեփական վեկտորներն ու սեփական արժեքները հաշվարկելու համար, ներկայացված է ստորև: Նկատի ունեցեք, որ schrodinger1D
ֆունկցիան ունի հետևյալ արգումենտները՝ xmin = minimum x grid value
, xmax = maximum x grid value
, Nx = number of grid points
, Vfun = potential energy function
, neigs = number of eigenvalues to solve for
և findpsi = flag
, որպեսզի գործառույթին ասի, որ վերադարձնի և՛ սեփական արժեքները, և՛ սեփական վեկտորները, եթե flag = True
:
import numpy as np import matplotlib.pyplot as plt from scipy import sparse from scipy.sparse import linalg as sla def schrodinger1D(xmin, xmax, Nx, Vfun, params, neigs=20, findpsi=False): x = np.linspace(xmin, xmax, Nx) # x axis grid dx = x[1] - x[0] # x axis step size # Obtain the potential function values: V = Vfun(x, params) # create the Hamiltonian Operator matrix: H = sparse.eye(Nx, Nx, format='lil') * 2 # implement the numerical derivative for i in range(Nx - 1): H[i, i + 1] = -1 H[i + 1, i] = -1 H = H / (dx ** 2) # Add in the potential energy V for i in range(Nx): H[i, i] = H[i, i] + V[i] # convert to csc sparse matrix format: H = H.tocsc() # obtain neigs solutions from the sparse matrix: [evl, evt] = sla.eigs(H, k=neigs, which='SM') for i in range(neigs): # normalize the eigenvectors: evt[:, i] = evt[:, i] / np.sqrt( np.trapz(np.conj( evt[:,i])*evt[:,i],x)) # eigen values MUST be real: evl = np.real(evl) if findpsi == False: return evl else: return evl, evt, x
Քվանտային ներդաշնակ տատանվողը
Այժմ, երբ մենք ունենք 1 ծավալային Շրյոդինգերի հավասարումը թվային կերպով լուծելու ֆունկցիոնալությունը, այն ամենը, ինչ մենք պետք է անենք, այն լուծելու բան տալն է՝ նշելով Vfun
պոտենցիալ էներգիան: Առաջին օրինակի համար մենք կուսումնասիրենք քվանտային պարզ ներդաշնակ տատանվողը:
Քվանտային պարզ ներդաշնակ տատանիչն ունի պոտենցիալ էներգիայի ֆունկցիա, որը տրված է V = kx²-ով, որտեղ k-ը «աղբյուրի հաստատունն է»: Հարցերը պարզեցնելու համար մենք սահմանում ենք k = 1, այնպես որ կարող ենք սահմանել V = x²: Այնուհետև մենք փոխանցում ենք այս պոտենցիալ էներգիայի ֆունկցիան վերևում գտնվող լուծիչին՝ սեփական արժեքները և սեփական վեկտորները լուծելու համար: Քվանտային ներդաշնակ տատանվողի էներգիայի տեսական սեփական արժեքները տրված են E = ħω(n + 1/2): Մեր դեպքում մենք սահմանել ենք ħ = ω = 1, և հիշել, որ մենք էներգիաները չափել ենք 2 գործակցով մեր թվային տարբերակման սխեմայում, ուստի ճշգրտված տեսական էներգիայի սեփական արժեքները վերցնում են. ձևը E = 2n + 1:
Այս ամենը իրականացվում է ստորև sho_wavefunctions_plot
-ում:
def sho_wavefunctions_plot(xmin = -10, xmax = 10, Nx = 500, neigs = 20, params = [1]): def Vfun(x, params): V = params[0] * x**2 return V eval_wavefunctions(xmin, xmax, Nx, Vfun, params, neigs, True)
eval_wavefunctions
ֆունկցիան կանչում է schrodinger1D
ը՝ լուծելու տրված սեփական արժեքի խնդիրը, ալիքի ֆունկցիաներից հաշվարկում է ցանցի որոշակի կետում առկա մասնիկի հավանականությունը և գծագրում հավանականությունները: Նաև որպես առողջական վիճակի ստուգում, մենք տպում ենք սեփական արժեքները դասավորված աճող մեծությամբ:
def eval_wavefunctions(xmin, xmax, Nx, Vfun, params, neigs, findpsi = True): # call the 1D Schrodinger solver: H = schrodinger1D(xmin, xmax, Nx, Vfun, params, neigs, findpsi) evl = H[0] # energy eigenvalues indices = np.argsort(evl) print("Energy eigenvalues:") for i,j in enumerate(evl[indices]): print("{}: {:.2f}".format(i+1,j)) evt = H[1] # eigenvectors x = H[2] # x grid i = 0 plt.figure(figsize=(8,8)) while i < neigs: n = indices[i] # obtain probabilities from wave functions y = np.real(np.conj(evt[:, n]) * evt[:, n]) plt.subplot(neigs, 1, i+1) plt.plot(x, y) plt.axis('off') i = i + 1 plt.show()
Գործարկելով sho_wavefunctions_plot
ֆունկցիան, գծագրվում են ստորև ներկայացված քվանտային ներդաշնակ տատանվող առաջին 20 հավանականությունները՝ էներգիայի վիճակների մեծացման կարգով: Մենք տեսնում ենք, որ գծապատկերի վերևում գտնվող էներգիայի ամենացածր մակարդակի դեպքում մասնիկը, ամենայն հավանականությամբ, գտնվի պոտենցիալ ջրհորի կենտրոնում, որտեղ պոտենցիալ էներգիան ամենացածրն է: Քանի որ էներգիան մեծանում է, մասնիկը կարող է շարժվել դեպի ավելի բարձր պոտենցիալ էներգիայի շրջաններ ջրհորի կենտրոնի երկու կողմերում, հետևաբար մեծանում է հավանականությունը, որ այն գտնվի այլ վայրերում:
Նաև թվային հաշվարկված էներգիայի սեփական արժեքները 20 դիսկրետ էներգիայի մակարդակների համար n պարզվում է, որ համընկնում են E = 2n + 1-ով տրված տեսական արժեքներին: շատ սերտորեն, հատկապես n-ի փոքր արժեքների համար, այնպես որ մենք գիտենք, որ մեր 1 ծավալային Շրյոդինգերի հավասարումների լուծիչը աշխատել է: Նկատի ունեցեք, որ n սկսվում է 0-ից և ոչ թե 1-ից:
sho_wavefunctions_plot() Energy eigenvalues: 1: 1.00 2: 3.00 3: 5.00 4: 7.00 5: 9.00 6: 10.99 7: 12.99 8: 14.99 9: 16.99 10: 18.98 11: 20.98 12: 22.97 13: 24.97 14: 26.96 15: 28.96 16: 30.95 17: 32.95 18: 34.94 19: 36.93 20: 38.92
Փակման խոսք
Սա եզրակացնում է, թե ինչպես կարելի է լուծել ժամանակի անկախ Շրյոդինգերի հավասարումը մեկ չափման համար: Հուսով եմ, որ դուք որոշակի պատկերացում ստացաք այն մասին, թե ինչպես են ֆիզիկոսներն ուսումնասիրում քվանտային մեխանիկա՝ օգտագործելով հաշվողական մեթոդները:
Ցավոք, միաչափ համակարգերը սովորաբար այնքան էլ իրատեսական չեն, և մենք պետք է հասնենք առնվազն երկու հարթության՝ շատ ֆիզիկական համակարգեր իրատեսորեն նմանակելու համար: Կարո՞ղ եք մտածել, թե ինչպես բարելավել Python-ի գործառույթները՝ լուծելու Շրյոդինգերի հավասարումը երկու կամ երեք հարթություններում: Շնորհակալություն կարդալու համար:
GitHub
Ամբողջ 1D Շրյոդինգերի հավասարումների լուծիչ կոդը կարելի է գտնել իմ Github շտեմարանում: Jupyter-ի նոթատետրի բովանդակության տարբերակը կարելի է գտնել նաև իմ GitHub շտեմարանում:
Հղումներ
[1] Bransden and Joachain (2000).Քվանտային մեխանիկա (2-րդ հրատարակություն), Prentice Hall.