Final: Do task 4.4, draft task 4.5
This commit is contained in:
@ -1530,7 +1530,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 19,
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"deletable": false,
|
"deletable": false,
|
||||||
"nbgrader": {
|
"nbgrader": {
|
||||||
@ -1548,8 +1548,21 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"def getU_CN(tau, H):\n",
|
"def getU_CN(tau, H):\n",
|
||||||
" # YOUR CODE HERE\n",
|
" \"\"\"\n",
|
||||||
" raise NotImplementedError()\n",
|
" Calculates the time-propagation matrix for time-step tau using\n",
|
||||||
|
" the Crank-Nicolson algorithm.\n",
|
||||||
|
" \n",
|
||||||
|
" Args:\n",
|
||||||
|
" tau: time-step numeric to calculate the time-propagation matrix at\n",
|
||||||
|
" H: n by n array representing the hamiltonian matrix\n",
|
||||||
|
"\n",
|
||||||
|
" Returns:\n",
|
||||||
|
" The time-propagation matrix U(tau).\n",
|
||||||
|
" \"\"\"\n",
|
||||||
|
" \n",
|
||||||
|
" n = len(H)\n",
|
||||||
|
" \n",
|
||||||
|
" return (np.eye(n) - 1j*tau*H/2)@np.linalg.inv(np.eye(n) + 1j*tau*H/2)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# Yann notes that the definition of $U_{CN}(\\tau)$ here is a little\n",
|
"# Yann notes that the definition of $U_{CN}(\\tau)$ here is a little\n",
|
||||||
"# different from what Malte used on the slides. He recommends using\n",
|
"# different from what Malte used on the slides. He recommends using\n",
|
||||||
@ -1602,7 +1615,80 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"source": [
|
"source": [
|
||||||
"YOUR ANSWER HERE"
|
"% BEGIN NOTES %\n",
|
||||||
|
"Koen: vergeet niet -1j*tau mee te nemen.\n",
|
||||||
|
"\n",
|
||||||
|
"H = H_1 + H_2\n",
|
||||||
|
"H_1 = [[0,t],[t,0]] bla bla blok\n",
|
||||||
|
"H_2 \n",
|
||||||
|
"\n",
|
||||||
|
"verschil n even en n oneven?\n",
|
||||||
|
"\n",
|
||||||
|
"Zie slide 14 en omgeving in 08_Partial_Diff.\n",
|
||||||
|
"\n",
|
||||||
|
"Vergeet niet 1 op de diagonalon\n",
|
||||||
|
"% END NOTES %\n",
|
||||||
|
"\n",
|
||||||
|
"In the Trotter-Suzuki decomposition, we seek for block matrix forms for $\\mathbf{H_1}$ and $\\mathbf{H_2}$ such that their sum equals the original matrix $\\mathbf{H}$. The exponential is than done for each block instead of the whole matrix, which is a lot less complicated. Afterwards the result is combined such that\n",
|
||||||
|
"$$\n",
|
||||||
|
"e^{-i\\tau\\mathbf{H}} = e^{-i \\tau\\left( \\mathbf{H_1} + \\mathbf{H_2} \\right)} \\approx e^{-i\\tau\\mathbf{H_1}} \\cdot e^{-i\\tau\\mathbf{H_2}}\n",
|
||||||
|
"$$\n",
|
||||||
|
"\n",
|
||||||
|
"Here are the forms for the matrices. For $\\mathbf{H}$ an $n \\times n$ matrix, the form for $n$ odd is written down below. For $n$ even, the last row and column for both matrices can be omitted to see the shape.\n",
|
||||||
|
"\n",
|
||||||
|
"$$\n",
|
||||||
|
"\\mathbf{H_1} =\n",
|
||||||
|
"\\begin{pmatrix}\n",
|
||||||
|
"0 & t & & & & & & \\\\\n",
|
||||||
|
"t & 0 & & & & & & \\\\\n",
|
||||||
|
" & & 0 & t & & & & \\\\\n",
|
||||||
|
" & & t & 0 & & & & \\\\\n",
|
||||||
|
" & & & & \\ddots & & & \\\\\n",
|
||||||
|
" & & & & & 0 & t & \\\\\n",
|
||||||
|
" & & & & & t & 0 & \\\\\n",
|
||||||
|
" & & & & & & & 0\n",
|
||||||
|
"\\end{pmatrix}\n",
|
||||||
|
"\\qquad\n",
|
||||||
|
"\\mathbf{H_2} =\n",
|
||||||
|
"\\begin{pmatrix}\n",
|
||||||
|
"0 & & & & & & & \\\\\n",
|
||||||
|
" & 0 & t & & & & & \\\\\n",
|
||||||
|
" & t & 0 & & & & & \\\\\n",
|
||||||
|
" & & & 0 & t & & & \\\\\n",
|
||||||
|
" & & & t & 0 & & & \\\\\n",
|
||||||
|
" & & & & & \\ddots & & \\\\\n",
|
||||||
|
" & & & & & & 0 & t\\\\\n",
|
||||||
|
" & & & & & & t & 0\n",
|
||||||
|
"\\end{pmatrix}\n",
|
||||||
|
"$$\n",
|
||||||
|
"\n",
|
||||||
|
"For the exponents, we find the following for $n$ odd, again with the remark that the result for $n$ even can be reached by omitting the last row and column for both matrices and calculating the exponents for them.\n",
|
||||||
|
"\\begin{align}\n",
|
||||||
|
"\\exp{\\mathbf{H_1}} &=\n",
|
||||||
|
"\\begin{pmatrix}\n",
|
||||||
|
"\\exp{\\begin{pmatrix}0 & -i\\tau{}t \\\\ -i\\tau{}t & 0\\end{pmatrix}} & & & &\\\\\n",
|
||||||
|
" & \\exp{\\begin{pmatrix}0 & -i\\tau{}t \\\\ -i\\tau{}t & 0\\end{pmatrix}} & & &\\\\\n",
|
||||||
|
" & & \\ddots & &\\\\\n",
|
||||||
|
" & & & \\exp{\\begin{pmatrix}0 & -i\\tau{}t \\\\ -i\\tau{}t & 0\\end{pmatrix}} &\\\\\n",
|
||||||
|
" & & & & \\exp{0}\n",
|
||||||
|
"\\end{pmatrix}\n",
|
||||||
|
"\\\\\n",
|
||||||
|
"\\exp{\\mathbf{H_2}} &=\n",
|
||||||
|
"\\begin{pmatrix}\n",
|
||||||
|
"\\exp{0} & & & &\\\\\n",
|
||||||
|
" & \\exp{\\begin{pmatrix}0 & -i\\tau{}t \\\\ -i\\tau{}t & 0\\end{pmatrix}} & & &\\\\\n",
|
||||||
|
" & & \\exp{\\begin{pmatrix}0 & -i\\tau{}t \\\\ -i\\tau{}t & 0\\end{pmatrix}} & &\\\\\n",
|
||||||
|
" & & & \\ddots &\\\\\n",
|
||||||
|
" & & & & \\exp{\\begin{pmatrix}0 & -i\\tau{}t \\\\ -i\\tau{}t & 0\\end{pmatrix}}\\\\\n",
|
||||||
|
" & & & &\n",
|
||||||
|
"\\end{pmatrix}\n",
|
||||||
|
"\\end{align}\n",
|
||||||
|
"\n",
|
||||||
|
"As $\\exp{0} = 1$, we just calculate\n",
|
||||||
|
"$$\n",
|
||||||
|
"\\exp{\\begin{pmatrix}0 & -i\\tau{}t \\\\ -i\\tau{}t & 0\\end{pmatrix}}\n",
|
||||||
|
"= \\begin{pmatrix}\\cos{\\tau{}t} & -i\\sin{\\tau{}t} \\\\ -i\\sin{\\tau{}t} & \\cos{\\tau{}t}\\end{pmatrix}.\n",
|
||||||
|
"$$\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1625,6 +1711,26 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"def getU_TZ(tau, H):\n",
|
"def getU_TZ(tau, H):\n",
|
||||||
|
" # TODO: Add docstring.\n",
|
||||||
|
" \n",
|
||||||
|
" # First we calculate the exponent of the block.\n",
|
||||||
|
" exp_block = np.array([\n",
|
||||||
|
" [ np.cos(tau*t), -1j*np.sin(tau*t)],\n",
|
||||||
|
" [-1j*np.sin(tau*t), np.cos(tau*t)]\n",
|
||||||
|
" ])\n",
|
||||||
|
" \n",
|
||||||
|
" # Now we use the block to calculate the exponent of matrices\n",
|
||||||
|
" # H_1 and H_2.\n",
|
||||||
|
" n = len(H)\n",
|
||||||
|
" exp_H_1 = np.block([\n",
|
||||||
|
" [1, 0],\n",
|
||||||
|
" [0, np.kron(np.eye(n//2, dtype=int), exp_block)]\n",
|
||||||
|
" ])\n",
|
||||||
|
" exp_H_2 = np.block([\n",
|
||||||
|
" [1, 0],\n",
|
||||||
|
" [0, np.kron(np.eye(n//2, dtype=int), exp_block)]\n",
|
||||||
|
" ])\n",
|
||||||
|
" \n",
|
||||||
" # YOUR CODE HERE\n",
|
" # YOUR CODE HERE\n",
|
||||||
" raise NotImplementedError()\n",
|
" raise NotImplementedError()\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|||||||
Reference in New Issue
Block a user