From 3396d1d078a3f3ae16c258caca0e8e6b6c830d9b Mon Sep 17 00:00:00 2001 From: orosmatthew Date: Mon, 8 Apr 2024 11:45:54 -0400 Subject: [PATCH] Work on ps16-1 --- ps16-1.py | 15 ++++++++----- test.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 test.py diff --git a/ps16-1.py b/ps16-1.py index f5ac492..7f47742 100644 --- a/ps16-1.py +++ b/ps16-1.py @@ -2,30 +2,35 @@ import numpy as np import pylab as pl a = 5 -F = 1 +F = 4000 D = 1 hbar = 1 m = 1 -z = 6.933 +z = 2.851 l = z / a V0 = 2 + +def cot(x): + return 1 / np.tan(x) + + x = np.linspace(-10, 10, 1000) x_pos = x[x > 0] z0 = (a / hbar) * np.sqrt(2 * m * V0) print(f'z0 = {z0}') -k = l * np.tan(l * a) +k = -l * cot(l * a) psi_conditions = [ (0 < x_pos) & (x_pos <= a), (x_pos > a) ] psi_funcs = [ - lambda x: D * np.cos(l * x), + lambda x: D * np.sin(l * x), lambda x: F * np.exp(-k * x), ] psi_half = np.piecewise(x_pos, psi_conditions, psi_funcs) -psi = np.concatenate((np.flip(psi_half), psi_half)) +psi = np.concatenate((-np.flip(psi_half), psi_half)) V0_graph = np.piecewise(x, [(x < -a), (-a <= x) & (x <= a), (x > a)], [0, -V0, 0]) diff --git a/test.py b/test.py new file mode 100644 index 0000000..79d9721 --- /dev/null +++ b/test.py @@ -0,0 +1,66 @@ +import numpy as np +import pylab as pl +from scipy.optimize import fsolve + + +def cot(x): + return 1 / np.tan(x) + + +a = 5 +hbar = 1 +m = 1 +z = 2.851 +l = z / a +V0 = 2 +D = 1 + +x = np.linspace(-10, 10, 1000) +x_pos = x[x > 0] +z0 = (a / hbar) * np.sqrt(2 * m * V0) +print(f'z0 = {z0}') +k = -l * cot(l * a) + + +# Define the functions for the wavefunction and its derivative +def psi_inside(x): + return D * np.sin(l * x) + + +def psi_outside(x, F): + return F * np.exp(-k * x) + + +def dpsi_inside(x): + return D * l * np.cos(l * x) + + +def dpsi_outside(x, F): + return -F * k * np.exp(-k * x) + + +# Define the equations for the continuity conditions +def equations(p): + return psi_inside(a) - psi_outside(a, p) + + +# Solve for D and F +F = fsolve(equations, np.ndarray(1)) +print(f'F = {F}') + +psi_conditions = [ + (0 < x_pos) & (x_pos <= a), + (x_pos > a) +] +psi_funcs = [ + lambda x: psi_inside(x), + lambda x: psi_outside(x, F), +] +psi_half = np.piecewise(x_pos, psi_conditions, psi_funcs) +psi = np.concatenate((-np.flip(psi_half), psi_half)) + +V0_graph = np.piecewise(x, [(x < -a), (-a <= x) & (x <= a), (x > a)], [0, -V0, 0]) + +pl.plot(x, psi) +pl.plot(x, V0_graph) +pl.show()