Initial commit for qutip

This commit is contained in:
dfty
2026-01-28 12:44:53 +08:00
commit 74cda14151
6 changed files with 2468 additions and 0 deletions

293
references/core_concepts.md Normal file
View File

@@ -0,0 +1,293 @@
# QuTiP Core Concepts
## Quantum Objects (Qobj)
All quantum objects in QuTiP are represented by the `Qobj` class:
```python
from qutip import *
# Create a quantum object
psi = basis(2, 0) # Ground state of 2-level system
rho = fock_dm(5, 2) # Density matrix for n=2 Fock state
H = sigmaz() # Pauli Z operator
```
Key attributes:
- `.dims` - Dimension structure
- `.shape` - Matrix dimensions
- `.type` - Type (ket, bra, oper, super)
- `.isherm` - Check if Hermitian
- `.dag()` - Hermitian conjugate
- `.tr()` - Trace
- `.norm()` - Norm
## States
### Basis States
```python
# Fock (number) states
n = 2 # Excitation level
N = 10 # Hilbert space dimension
psi = basis(N, n) # or fock(N, n)
# Coherent states
alpha = 1 + 1j
coherent(N, alpha)
# Thermal states (density matrices)
n_avg = 2.0 # Average photon number
thermal_dm(N, n_avg)
```
### Spin States
```python
# Spin-1/2 states
spin_state(1/2, 1/2) # Spin up
spin_coherent(1/2, theta, phi) # Coherent spin state
# Multi-qubit computational basis
basis([2,2,2], [0,1,0]) # |010⟩ for 3 qubits
```
### Composite States
```python
# Tensor products
psi1 = basis(2, 0)
psi2 = basis(2, 1)
tensor(psi1, psi2) # |01⟩
# Bell states
bell_state('00') # (|00⟩ + |11⟩)/√2
maximally_mixed_dm(2) # Maximally mixed state
```
## Operators
### Creation/Annihilation
```python
N = 10
a = destroy(N) # Annihilation operator
a_dag = create(N) # Creation operator
num = num(N) # Number operator (a†a)
```
### Pauli Matrices
```python
sigmax() # σx
sigmay() # σy
sigmaz() # σz
sigmap() # σ+ = (σx + iσy)/2
sigmam() # σ- = (σx - iσy)/2
```
### Angular Momentum
```python
# Spin operators for arbitrary j
j = 1 # Spin-1
jmat(j, 'x') # Jx
jmat(j, 'y') # Jy
jmat(j, 'z') # Jz
jmat(j, '+') # J+
jmat(j, '-') # J-
```
### Displacement and Squeezing
```python
alpha = 1 + 1j
displace(N, alpha) # Displacement operator D(α)
z = 0.5 # Squeezing parameter
squeeze(N, z) # Squeezing operator S(z)
```
## Tensor Products and Composition
### Building Composite Systems
```python
# Tensor product of operators
H1 = sigmaz()
H2 = sigmax()
H_total = tensor(H1, H2)
# Identity operators
qeye([2, 2]) # Identity for two qubits
# Partial application
# σz ⊗ I for 3-qubit system
tensor(sigmaz(), qeye(2), qeye(2))
```
### Partial Trace
```python
# Composite system state
rho = bell_state('00').proj() # |Φ+⟩⟨Φ+|
# Trace out subsystem
rho_A = ptrace(rho, 0) # Trace out subsystem 0
rho_B = ptrace(rho, 1) # Trace out subsystem 1
```
## Expectation Values and Measurements
```python
# Expectation values
psi = coherent(N, alpha)
expect(num, psi) # ⟨n⟩
# For multiple operators
ops = [a, a_dag, num]
expect(ops, psi) # Returns list
# Variance
variance(num, psi) # Var(n) = ⟨n²⟩ - ⟨n⟩²
```
## Superoperators and Liouvillians
### Lindblad Form
```python
# System Hamiltonian
H = num
# Collapse operators (dissipation)
c_ops = [np.sqrt(0.1) * a] # Decay rate 0.1
# Liouvillian superoperator
L = liouvillian(H, c_ops)
# Alternative: explicit form
L = -1j * (spre(H) - spost(H)) + lindblad_dissipator(a, a)
```
### Superoperator Representations
```python
# Kraus representation
kraus_to_super(kraus_ops)
# Choi matrix
choi_to_super(choi_matrix)
# Chi (process) matrix
chi_to_super(chi_matrix)
# Conversions
super_to_choi(L)
choi_to_kraus(choi_matrix)
```
## Quantum Gates (requires qutip-qip)
```python
from qutip_qip.operations import *
# Single-qubit gates
hadamard_transform() # Hadamard
rx(np.pi/2) # X-rotation
ry(np.pi/2) # Y-rotation
rz(np.pi/2) # Z-rotation
phasegate(np.pi/4) # Phase gate
snot() # Hadamard (alternative)
# Two-qubit gates
cnot() # CNOT
swap() # SWAP
iswap() # iSWAP
sqrtswap() # √SWAP
berkeley() # Berkeley gate
swapalpha(alpha) # SWAP^α
# Three-qubit gates
fredkin() # Controlled-SWAP
toffoli() # Controlled-CNOT
# Expanding to multi-qubit systems
N = 3 # Total qubits
target = 1
controls = [0, 2]
gate_expand_2toN(cnot(), N, [controls[0], target])
```
## Common Hamiltonians
### Jaynes-Cummings Model
```python
# Cavity mode
N = 10
a = tensor(destroy(N), qeye(2))
# Atom
sm = tensor(qeye(N), sigmam())
# Hamiltonian
wc = 1.0 # Cavity frequency
wa = 1.0 # Atom frequency
g = 0.05 # Coupling strength
H = wc * a.dag() * a + wa * sm.dag() * sm + g * (a.dag() * sm + a * sm.dag())
```
### Driven Systems
```python
# Time-dependent Hamiltonian
H0 = sigmaz()
H1 = sigmax()
def drive(t, args):
return np.sin(args['w'] * t)
H = [H0, [H1, drive]]
args = {'w': 1.0}
```
### Spin Chains
```python
# Heisenberg chain
N_spins = 5
J = 1.0 # Exchange coupling
# Build Hamiltonian
H = 0
for i in range(N_spins - 1):
# σᵢˣσᵢ₊₁ˣ + σᵢʸσᵢ₊₁ʸ + σᵢᶻσᵢ₊₁ᶻ
H += J * (
tensor_at([sigmax()], i, N_spins) * tensor_at([sigmax()], i+1, N_spins) +
tensor_at([sigmay()], i, N_spins) * tensor_at([sigmay()], i+1, N_spins) +
tensor_at([sigmaz()], i, N_spins) * tensor_at([sigmaz()], i+1, N_spins)
)
```
## Useful Utility Functions
```python
# Generate random quantum objects
rand_ket(N) # Random ket
rand_dm(N) # Random density matrix
rand_herm(N) # Random Hermitian operator
rand_unitary(N) # Random unitary
# Commutator and anti-commutator
commutator(A, B) # [A, B]
anti_commutator(A, B) # {A, B}
# Matrix exponential
(-1j * H * t).expm() # e^(-iHt)
# Eigenvalues and eigenvectors
H.eigenstates() # Returns (eigenvalues, eigenvectors)
H.eigenenergies() # Returns only eigenvalues
H.groundstate() # Ground state energy and state
```