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 = : Այնուհետև մենք փոխանցում ենք այս պոտենցիալ էներգիայի ֆունկցիան վերևում գտնվող լուծիչին՝ սեփական արժեքները և սեփական վեկտորները լուծելու համար: Քվանտային ներդաշնակ տատանվողի էներգիայի տեսական սեփական արժեքները տրված են 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.