diff --git a/Exercise sheet 6/exercise_sheet_06.ipynb b/Exercise sheet 6/exercise_sheet_06.ipynb index c2c7467..abd31a8 100644 --- a/Exercise sheet 6/exercise_sheet_06.ipynb +++ b/Exercise sheet 6/exercise_sheet_06.ipynb @@ -469,6 +469,11 @@ "\n", "t_0 = time.time()\n", "def toc():\n", + " \"\"\"Return how many seconds the function was last called.\"\"\"\n", + " \n", + " if not 't_0' in globals():\n", + " return -np.inf\n", + " \n", " global t_0\n", " dt = time.time() - t_0\n", " t_0 = time.time()\n", @@ -479,8 +484,8 @@ " state = xy_aligned_init_config(width)\n", " cluster_sizes = np.zeros(len(temperatures))\n", " \n", - " t_0 = time.time()\n", " for idx, T in enumerate(temperatures):\n", + " toc()\n", " print(\"T =\", T)\n", " beta = 1/T\n", " \n", @@ -491,7 +496,7 @@ " \n", " # Measure\n", " for _ in range(measurement_moves):\n", - " cluster_sizes[idx] += xy_cluster_move(state,beta)\n", + " cluster_sizes[idx] += np.norm(xy_cluster_move(state,beta))\n", " cluster_sizes[idx] /= measurement_moves\n", " print(\"\\tmeasuring took\", toc(), \" seconds\")\n", " print()\n", @@ -547,7 +552,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -561,8 +566,8 @@ "source": [ "# Plotting\n", "with h5py.File(\"xy_data.hdf5\", \"r\") as f:\n", - " plt.scatter(temperatures, f[\"cluster-size\"], marker='x')\n", - " plt.xlabel(\"T\")\n", + " plt.scatter(temperatures, f[\"cluster-size\"], marker='4', s=100)\n", + " plt.xlabel(\"temperature $T$\")\n", " plt.ylabel(\"average cluster size\")\n", " plt.title(\"Average cluster size for the $w \\\\times w$ XY model \\n\"\n", " \"(w = {}, #equilibrations = {}, #measurements = {})\"\n", @@ -600,7 +605,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "71323e81", "metadata": { "deletable": false, @@ -615,19 +620,101 @@ "task": false } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "T = 0.5\n", + "\tequilibrating took 2.6317245960235596 seconds\n", + "\tmeasuring took 13.053837060928345 seconds\n", + "\n", + "T = 0.6\n", + "\tequilibrating took 2.8574910163879395 seconds\n", + "\tmeasuring took 12.967190027236938 seconds\n", + "\n", + "T = 0.7\n", + "\tequilibrating took 3.4188122749328613 seconds\n", + "\tmeasuring took 16.535584449768066 seconds\n", + "\n", + "T = 0.8\n", + "\tequilibrating took 3.129852294921875 seconds\n", + "\tmeasuring took 14.666396617889404 seconds\n", + "\n", + "T = 0.9\n", + "\tequilibrating took 2.749675750732422 seconds\n", + "\tmeasuring took 12.164067506790161 seconds\n", + "\n", + "T = 1.0\n", + "\tequilibrating took 2.770905017852783 seconds\n", + "\tmeasuring took 11.673817873001099 seconds\n", + "\n", + "T = 1.1\n", + "\tequilibrating took 2.59846830368042 seconds\n", + "\tmeasuring took 9.312909126281738 seconds\n", + "\n", + "T = 1.2000000000000002\n", + "\tequilibrating took 2.9586286544799805 seconds\n", + "\tmeasuring took200] 10.83272385597229 seconds\n", + "\n", + "T = 1.3\n", + "\tequilibrating took 2.4720122814178467 seconds\n", + "\tmeasuring took 9.212384223937988 seconds\n", + "\n", + "T = 1.4\n", + "\tequilibrating took 3.3535523414611816 seconds\n", + "\tmeasuring took 10.767858028411865 seconds\n", + "\n", + "T = 1.5\n", + "\tequilibrating took 3.0648155212402344 seconds\n", + "\tmeasuring took 9.897510051727295 seconds\n", + "\n" + ] + } + ], "source": [ "measurements = 200\n", "equil_sweeps = 100\n", "measure_sweeps = 2\n", "\n", - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "with h5py.File(\"xy_data.hdf5\", \"a\") as f:\n", + " if not \"square-magn\" in f:\n", + " state = xy_aligned_init_config(width)\n", + " square_magn = np.zeros((len(temperatures), measurements))\n", + " \n", + " t_0 = time.time()\n", + " for idx, T in enumerate(temperatures):\n", + " print(\"T =\", T)\n", + " beta = 1/T\n", + " # We let the sweep size depend on the width and the average cluster size\n", + " # from before:\n", + " sweep_size = np.ceil(width**2/f[\"cluster-size\"][idx]).astype(int)\n", + " \n", + " # Equilibrate\n", + " for j in range(equil_sweeps*sweep_size):\n", + " xy_cluster_move(state,beta)\n", + " print(\"\\tequilibrating... [{}/{}]\".format(j, equil_sweeps*sweep_size), end='\\r')\n", + " print(\"\\tequilibrating took\", toc(), \" seconds\")\n", + " \n", + " # Measure\n", + " for j in range(measurements):\n", + " xy_cluster_move(state,beta)\n", + " square_magn[idx][j] = np.linalg.norm(np.mean(state, axis=(0,1)))**2\n", + " print(\"\\tmeasuring... [{}/{}]\".format(j, measurements), end='\\r')\n", + " \n", + " # Sweeps between measurements\n", + " # TODO: Skip sweeps between measurements for last measurement in set.\n", + " for _ in range(measure_sweeps*sweep_size):\n", + " xy_cluster_move(state,beta)\n", + " print(\"\\tmeasuring took\", toc(), \" seconds\")\n", + " print()\n", + " \n", + " f.create_dataset(\"square-magn\",data=square_magn)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "35782ff3", "metadata": { "deletable": false, diff --git a/Exercise sheet 6/xy_data.hdf5 b/Exercise sheet 6/xy_data.hdf5 index 1162d11..ba7936a 100644 Binary files a/Exercise sheet 6/xy_data.hdf5 and b/Exercise sheet 6/xy_data.hdf5 differ