Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
287 views
ubuntu2404
�

q8�h�$����dZddlZddlmZddlmZddlm	Z	ddl
mZmZejjd�Gd�d�ZGd	�d
�ZGd�d�Zd
�Zd�Zd�Zedk(re�e�e�yy)u,
Quantum Mechanics Simulations for Computational Physics
========================================================

This module contains implementations of fundamental quantum mechanics simulations:
- Time-dependent Schrödinger equation solver
- Quantum harmonic oscillator eigenstates
- Particle in a box solutions
- Quantum tunneling demonstrations

Keywords: quantum mechanics python, schrodinger equation solver, quantum harmonic oscillator,
particle in a box simulation, quantum tunneling python code

Author: CoCalc Scientific Templates
License: MIT
�N)�diags)�expm)�hermite�	factorial�*c�*�eZdZdZdd�Zd�Zd�Zd�Zy)�SchrodingerSolveru�
    Time-dependent Schrödinger equation solver using finite difference method.

    Solves: iℏ ∂ψ/∂t = Ĥ ψ where Ĥ = T̂ + V̂
    c�V�||_||_||_||_||z|_tjd||�|_dtj|�z}tj|dz
�}|dzd|z|jdzzzt|||ggd�||f��z|_
y)a?
        Initialize the solver.

        Parameters:
        -----------
        L : float
            Length of simulation box
        N : int
            Number of grid points
        hbar : float
            Reduced Planck constant (natural units)
        m : float
            Particle mass (natural units)
        r�������)�����rr)�shapeN)�L�N�hbar�m�dx�np�linspace�x�onesr�T_matrix)�selfrrrr�kinetic_diag�kinetic_offs       �code/quantum_mechanics.py�__init__zSchrodingerSolver.__init__#s�����������	�����a�%������Q��1�%����B�G�G�A�J����g�g�a��c�l����'�Q�q�S����!��^�4�5��;��k�:�J�q�RS�f�U�
��
�c�N�||_|jt|d�z|_y)z'Set the potential energy function V(x).rN)�Vrr�H)rr!s  r�
set_potentialzSchrodingerSolver.set_potential@s���������q�!��,��rc�D�tj|j|z
dzd|dzzz�tjd|z|jz�z}|tjtjtj
|�dz|j��zS)z�
        Create a Gaussian wave packet initial condition.

        Parameters:
        -----------
        x0 : float
            Initial position
        sigma : float
            Wave packet width
        k0 : float
            Initial momentum
        r
y�?)r�expr�sqrt�trapz�abs)r�x0�sigma�k0�psis     r�gaussian_wavepacketz%SchrodingerSolver.gaussian_wavepacketEsy���f�f�t�v�v��{�Q�&�&�!�E�1�H�*�5�6�����R��$�&�&�@P�9Q�Q���R�W�W�R�X�X�b�f�f�S�k�1�n�d�f�f�=�>�>�>rc�B�tjd||�}td|jj	�z|z|j
z�}|j
�}|j
�g}|ddD]&}||z}|j|j
���(||fS)z�
        Time evolution using matrix exponentiation.

        Returns:
        --------
        times : array
            Time points
        psi_evolution : list
            Wavefunction at each time step
        ry��rN)r�arangerr"�toarrayr�copy�append)	r�psi_initial�dt�t_final�times�Ur,�
psi_evolution�ts	         r�evolvezSchrodingerSolver.evolveUs����	�	�!�W�b�)����t�v�v�~�~�'�'�"�,�t�y�y�8�9����� �������
��q�r��A��c�'�C�� � �����,���m�#�#rN)�$@����?r=)�__name__�
__module__�__qualname__�__doc__rr#r-r:�rrr	r	s���
�:-�
?� $rr	c�,�eZdZdZdd�Zd�Zd�Zdd�Zy)	�HarmonicOscillatoru�
    Quantum harmonic oscillator analytical solutions.

    Energy eigenvalues: E_n = ℏω(n + 1/2)
    Wavefunctions: ψ_n(x) = N_n * exp(-ξ²/2) * H_n(ξ)
    where ξ = x/x₀ and x₀ = √(ℏ/mω)
    c�n�||_||_||_tj|||zz�|_y)z�
        Parameters:
        -----------
        omega : float
            Angular frequency
        m : float
            Mass
        hbar : float
            Reduced Planck constant
        N)�omegarrrr&r))rrFrrs    rrzHarmonicOscillator.__init__us2����
������	��'�'�$�!�e�)�,�-��rc�@�|j|jz|dzzS)z'Energy eigenvalue for quantum number n.��?)rrF�r�ns  r�energy_levelzHarmonicOscillator.energy_level�s���y�y�4�:�:�%��S��1�1rc�N�dtjd|zt|�z�z|j|jztj
|jzzdzz}||jz}t|�}|tj|dzdz�z||�z}|S)z�
        Harmonic oscillator wavefunction for quantum number n.

        Parameters:
        -----------
        x : array
            Position grid
        n : int
            Quantum number
        r=r
g�?)
rr&rrrF�pirr)rr%)rrrJ�norm�xi�H_n�psi_ns       r�wavefunctionzHarmonicOscillator.wavefunction�s����R�W�W�Q��T�I�a�L�0�1�1�T�V�V�D�J�J�5F����d�i�i��5X�\_�4`�`������[���a�j���r�v�v�r�1�u�f�q�j�)�)�C��G�3���rc���tj||d�}g}g}t|�D]G}|j|�}|j	||�}|j|�|j|��I|||fS)�
        Calculate first n_max energy eigenstates.

        Returns:
        --------
        x : array
            Position grid
        energies : list
            Energy eigenvalues
        wavefunctions : list
            Corresponding wavefunctions
        r<)rr�rangerKrRr2)	r�x_range�n_maxr�energies�
wavefunctionsrJ�E_nrQs	         r�calculate_eigenstatesz(HarmonicOscillator.calculate_eigenstates�s{��
�K�K���'�4�0�����
��u��A��#�#�A�&�C��%�%�a��+�E��O�O�C� �� � ��'���(�M�)�)rN�r=r=r=��)r>r?r@rArrKrRr[rBrrrDrDls���.� 2��0*rrDc�2�eZdZdZdd�Zd�Zd�Zd�Zd	d�Zy)
�
ParticleInBoxu�
    Infinite square well (particle in a box) exact solutions.

    Energy eigenvalues: E_n = n²π²ℏ²/(2mL²)
    Wavefunctions: ψ_n(x) = √(2/L) * sin(nπx/L)
    c�.�||_||_||_y)z�
        Parameters:
        -----------
        L : float
            Box length
        m : float
            Particle mass
        hbar : float
            Reduced Planck constant
        N�rrr)rrrrs    rrzParticleInBox.__init__�s����������	rc��|dztjdzz|jdzzd|jz|jdzzzS)u1Energy eigenvalue for quantum number n (n ≥ 1).r
)rrMrrrrIs  rrKzParticleInBox.energy_level�s?���1��r�u�u�a�x��$�)�)�Q�,�.�1�t�v�v�:�����	�3I�J�Jrc��tjd|jz�tj|tjz|z|jz�zS)u�
        Particle in box wavefunction for quantum number n.

        Parameters:
        -----------
        x : array
            Position grid (0 ≤ x ≤ L)
        n : int
            Quantum number (n ≥ 1)
        r
)rr&r�sinrM)rrrJs   rrRzParticleInBox.wavefunction�s>���w�w�q����x� �2�6�6�!�b�e�e�)�a�-�$�&�&�*@�#A�A�Arc��tj|t��}t||�D]\}}|||j	||�zz
}�|S)u8
        Create superposition of energy eigenstates.

        ψ(x) = Σ c_n ψ_n(x)

        Parameters:
        -----------
        x : array
            Position grid
        coefficients : array
            Complex amplitudes
        quantum_numbers : array
            Corresponding quantum numbers
        )�dtype)r�
zeros_like�complex�ziprR)rr�coefficients�quantum_numbersr,�crJs       r�superposition_statez!ParticleInBox.superposition_state�sL���m�m�A�W�-����o�6�D�A�q��1�t�(�(��A�.�.�.�C�7��
rc��tjd|jd�}g}g}td|dz�D]G}|j	|�}|j||�}|j
|�|j
|��I|||fS)rTrr<r)rrrrUrKrRr2)rrWrrXrYrJrZrQs        rr[z#ParticleInBox.calculate_eigenstates�s���
�K�K��4�6�6�4�(�����
��q�%�!�)�$�A��#�#�A�&�C��%�%�a��+�E��O�O�C� �� � ��'�%��(�M�)�)rNr\r])	r>r?r@rArrKrRrnr[rBrrr`r`�s"���
�K�B��,*rr`c	��td�tdd��}d}d|jz|dzz|j|jdzz
dzz}|dtj|j|jd	zz
|jd
zzdz�zz
}|j|�|j|jdz|jd
zd�
�}|j|dd��\}}tdt|��d��tdtjtj|d�dz|j�d���|j|||fS)zD
    Demonstrate quantum tunneling through a potential barrier.
    z=== Quantum Tunneling Demo ===r;r<)rrr=rHr
g@���g@)r)r*r+g����MbP?)r4r5zSimulation completed: z time stepszFinal norm: rz.6f)
�printr	rrrrr%r#r-r:�lenr'r()�solverrFr!r3r6r8s      r�demo_quantum_tunnelingrwsA��
�
*�+����
.�F�
�E��f�h�h�����!�V�X�X�����
�%:�Q�$>�>�A���r�v�v����F�H�H�Q�J�.����"��=��A�A�B�	B�B�A�
������,�,�����
�&�(�(�2�+�RU�,�V�K�"�=�=����=�L��E�=�	�"�3�u�:�,�k�
:�;�	�L����"�&�&��r�):�";�Q�">����I�#�N�
O�P��8�8�Q��}�,�,rc�4�td�tddd��}|jd|jzd��\}}}tdt	|��d��td	|d
dD�cgc]}||j
z|jz�� c}���||||fScc}w)z>
    Demonstrate quantum harmonic oscillator eigenstates.
    z === Harmonic Oscillator Demo ===r=)rFrrrs�)rVrW�Calculated � eigenstatesu#Energy levels (in units of ℏω): N)rtrDr[r)rurrF)�
oscillatorrrXrY�Es     r�demo_harmonic_oscillatorr~0s���
�
,�-�#�#��3�?�J�!+�!A�!A�!�J�M�M�/�ab�!A�!c��A�x��	�K��H�
��l�
3�4�	�/�]e�fh�gh�]i�0j�]i�XY��:�?�?�1B�:�CS�CS�1S�]i�0j�/k�
l�m��h�
�z�1�1��1ks�##B
c	�x�td�tddd��}|jd��\}}}dtjd�zdtjd�zg}ddg}|j|||�}tdt
|��d	��td
|D�cgc]
}||dz��c}���||||fScc}w)z2
    Demonstrate particle in a box solutions.
    z=== Particle in Box Demo ===r=rbr^)rWrr
rzr{zEnergy ratios E_n/E_1: r)rtr`r[rr&rnru)�boxrrXrYrkrl�psi_superpositionr}s        r�demo_particle_in_boxr�>s���
�
(�)�
�#��3�
/�C�!$�!:�!:��!:�!C��A�x���b�g�g�a�j�L�!�B�G�G�A�J�,�/�L��!�f�O��/�/��<��Q��	�K��H�
��l�
3�4�	�#�H�$E�H�q�Q�x��{�]�H�$E�#F�
G�H��h�
�'8�8�8��%Fs�B7
�__main__)rA�numpyr�matplotlib.pyplot�pyplot�plt�scipy.sparser�scipy.linalgr�
scipy.specialrr�random�seedr	rDr`rwr~r�r>rBrr�<module>r�s����"����,��	�	���r��N$�N$�`N*�N*�`W*�W*�r-�62�9�&�z��������	r