diff --git a/Week 6/11 Parabolic PDEs: 1D Schrödinger Equation with Potential.ipynb b/Week 6/11 Parabolic PDEs: 1D Schrödinger Equation with Potential.ipynb old mode 100644 new mode 100755 index 954d847..9540291 --- a/Week 6/11 Parabolic PDEs: 1D Schrödinger Equation with Potential.ipynb +++ b/Week 6/11 Parabolic PDEs: 1D Schrödinger Equation with Potential.ipynb @@ -160,12 +160,13 @@ "\n", "with $\\delta_{ij} = 1 \\iff i = j$, and using the approximations $\\hbar = 1$, $m = 0.5$.\n", "\n", - "\n", - "finite differences for second derivative to get a tridiagonal matrix (one lower and one higher than diagonal)\n", - "then plot eigenvalues\n", - "no time component -> not complex?\n", - "energy should be real\n", - "eigenvectors squared should be normalized" + "$$\n", + "%finite differences for second derivative to get a tridiagonal matrix (one lower and one higher than diagonal)\n", + "%then plot eigenvalues\n", + "%no time component -> not complex?\n", + "%energy should be real\n", + "%eigenvectors squared should be normalized\n", + "$$" ] }, { @@ -201,7 +202,6 @@ " A tuple of the eigenvalues E and eigenfunctions \\Psi of the hamiltonian H.\n", " \"\"\"\n", " \n", - " # TODO: Is n the dimensionality of Psi?\n", " n = len(x)\n", " h = x[1] - x[0]\n", " \n", @@ -286,7 +286,6 @@ "fig = plt.figure(figsize=(12,12))\n", "\n", "for n in range(the_first_few):\n", - " # TODO: Should SEQStat return normalized eigenfunctions?\n", " # Normalize the found eigenfunctions using Riemann midpoint sums\n", " prob_mass = np.sum((x[1:] - x[:-1])*(Psi[1:, n]**2 + Psi[:-1, n]**2)/2)\n", " Psi[:, n] /= np.sqrt(prob_mass)\n", @@ -383,7 +382,50 @@ } }, "source": [ - "YOUR ANSWER HERE" + "To do the derivation of the Crank-Nicolson approach following $\\textit{Numerical Analysis}$ by Burden and Faires, we start from averaging our 'Forward-Difference method' at the jth step in t:\n", + "\n", + "$$\n", + "\\frac{w_{i,j+1}-w_{i,j}}{k}-\\alpha^2\\frac{w_{i+1,j}-2w_{i,j}+w_{i-1,j}}{h^2} = 0.\n", + "$$\n", + "\n", + "The local truncation error is:\n", + "\n", + "$$\n", + "\\tau_F = \\frac{k}{2}\\frac{\\partial^2 u}{\\partial t^2}(x_i,\\mu_j)+O(h^2).\n", + "$$\n", + "\n", + "We do the same for the 'Backward-Difference method' to get:\n", + "\n", + "$$\n", + "\\frac{w_{i,j+1}-w_{i,j}}{k}-\\alpha^2\\frac{w_{i+1,j+1}-2w_{i,j+1}+w_{i-1,j+1}}{h^2} = 0,\n", + "$$\n", + "\n", + "again with a local truncation error:\n", + "\n", + "$$\n", + "\\tau_B = -\\frac{k}{2}\\frac{\\partial^2 u}{\\partial t^2}(x_i,\\hat{u} _j)+O(h^2).\n", + "$$\n", + "\n", + "If we make the following assumption:\n", + "\n", + "$$\n", + "\\frac{\\partial^2 u}{\\partial t^2}(x_i,\\hat{\\mu}_j) \\approx \\frac{\\partial^2 u}{\\partial t^2}(x_i,\\mu_j),\n", + "$$\n", + "\n", + "Then we can get the 'averaged-difference method' to write:\n", + "\n", + "$$\n", + "\\frac{w_{i,j+1}-w_{i,j}}{k}-\\frac{\\alpha^2}{2}\\left[\\frac{w_{i+1,j}-2w_{i,j}+w_{i-1,j}}{h^2}+\\frac{w_{i+1,j+1}-2w_{i,j+1}+w_{i-1,j+1}}{h^2}\\right] = 0,\n", + "$$\n", + "\n", + "which now has an truncation error of the order $O(k^2+h^2)$. This is known as the Crank-Nicolson method and is represented in the form described above.\n", + "\n", + "For $\\lambda_1$ and $\\lambda_2$ we have the following expressions:\n", + "\n", + "$$\n", + "\\lambda_1 = \\alpha^2\\frac{k}{h^2}\\\\\n", + "\\lambda_2 = 1.\n", + "$$" ] }, { @@ -432,8 +474,7 @@ "outputs": [], "source": [ "def SEQDyn(x, t, V, f):\n", - " # YOUR CODE HERE\n", - " raise NotImplementedError()" + " # YOUR CODE HERE" ] }, { @@ -457,8 +498,7 @@ "source": [ "# Animate your solution here ...\n", "\n", - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "# YOUR CODE HERE" ] }, { @@ -502,8 +542,7 @@ }, "outputs": [], "source": [ - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "# YOUR CODE HERE" ] }, { @@ -567,7 +606,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" },