06: Draft ugh

This commit is contained in:
2022-10-18 16:42:21 +02:00
parent fd55a71a9e
commit 6c18275280

View File

@ -20,13 +20,13 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 1,
"id": "b388fbcf",
"metadata": {},
"outputs": [],
"source": [
"NAME = \"\"\n",
"NAMES_OF_COLLABORATORS = \"\""
"NAME = \"Kees van Kempen\"\n",
"NAMES_OF_COLLABORATORS = \"Bart Steeman\""
]
},
{
@ -62,7 +62,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 2,
"id": "cb41d2a1",
"metadata": {
"deletable": false,
@ -219,7 +219,18 @@
}
},
"source": [
"YOUR ANSWER HERE"
"The condition for detailed balance is $$\\frac{P(s\\rightarrow s')}{P(s'\\rightarrow s)}=\\frac{\\pi(s')}{\\pi(s)}.$$\n",
"Let's work to that expression by following the idea of the proof for the Ising model proof.\n",
"\n",
"Starting from the left-hand side, consider the same cluster from the same seed and unit vector $\\hat{n}$ but from different states $s$ and $s'$. Flipping between $s$ and $s'$ is done by the same cluster $C$. The probability of this happening is given by the boundaries of the clusters, namely that they are not added to the cluster, with probability $1 - p_{add}$ per boundary site. Again, like in the Ising model proof, we take the boundary of $C$ to be of $m + n$ length with $m$ the number of aligned sites and $n$ the number of anti-aligned sites. This gives a ratio $$\\frac{P(s\\rightarrow s')}{P(s'\\rightarrow s)} = (1-p_{add})^{m-n}.$$\n",
"\n",
"For the right-hand side, $$\\frac{\\pi(s')}{\\pi(s)} = e^{\\beta \\left[H_{XY}(s)-H_{XY}(s')\\right]}$$ just from the definition of $\\pi$.\n",
"This difference in energy we can write as\n",
"$$\n",
"H_{XY}(s)-H_{XY}(s') = \\sum_{<i,j> \\in boundary} \\left[ s_i \\cdot s_j - s'_i \\cdot s_j \\right]\n",
" = \\sum_{<i,j> \\in boundary} 2(s_i \\cdot \\hat{n})(s_j \\cdot \\hat{n})\n",
"$$\n",
"by summing over all pairs $i, j$ on the boundary of $C$, with $i \\in C$ and $j$ an outside neigbour, as pairs not across the boundary do not give rise to an energy change. The last step is due to"
]
},
{
@ -245,7 +256,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 3,
"id": "6e4a6d63",
"metadata": {
"deletable": false,
@ -269,8 +280,17 @@
"def xy_cluster_flip(state,seed,nhat,beta):\n",
" '''Perform a cluster move with specified seed and vector nhat on the state at temperature beta.'''\n",
" w = len(state)\n",
" # YOUR CODE HERE\n",
" raise NotImplementedError()\n",
" spin = state[seed]\n",
" state[seed] = state[seed] - 2*np.dot(state[seed], nhat)*nhat\n",
" cluster_size = 1\n",
" unvisited = deque([seed]) # use a deque to efficiently track the unvisited cluster sites\n",
" while unvisited: # while unvisited sites remain\n",
" site = unvisited.pop() # take one and remove from the unvisited list\n",
" for nbr in neighboring_sites(site,w):\n",
" if state[nbr] == spin and rng.uniform() < p_add:\n",
" state[nbr] = -spin\n",
" unvisited.appendleft(nbr)\n",
" cluster_size += 1\n",
" return cluster_size\n",
"\n",
"def xy_cluster_move(state,beta):\n",
@ -666,7 +686,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": "Python 3",
"language": "python",
"name": "python3"
},