From de2c9265f2f3e52d92d8224ce542ed1fb11db601 Mon Sep 17 00:00:00 2001 From: Kees van Kempen Date: Mon, 14 Nov 2022 21:27:03 +0100 Subject: [PATCH] 08: Solve c for model B --- Exercise sheet 8/exercise_sheet_08.ipynb | 90 ++++++++++++++++------- Exercise sheet 8/qgdimension.hdf5 | Bin 0 -> 6896 bytes 2 files changed, 65 insertions(+), 25 deletions(-) create mode 100644 Exercise sheet 8/qgdimension.hdf5 diff --git a/Exercise sheet 8/exercise_sheet_08.ipynb b/Exercise sheet 8/exercise_sheet_08.ipynb index 2da8d05..6f624b7 100644 --- a/Exercise sheet 8/exercise_sheet_08.ipynb +++ b/Exercise sheet 8/exercise_sheet_08.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "220d541e", "metadata": {}, "outputs": [], @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "5e4391a6", "metadata": { "deletable": false, @@ -302,7 +302,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "bcc7acba", "metadata": { "deletable": false, @@ -325,7 +325,7 @@ "True" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -501,7 +501,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 51, "id": "ee683060", "metadata": { "deletable": false, @@ -517,15 +517,7 @@ "task": false } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 1 4 6 19 20 10 5 1 0 0]\n" - ] - } - ], + "outputs": [], "source": [ "models = ['U','W','S','B']\n", "sizes = [2**k for k in range(7,13)]\n", @@ -533,18 +525,29 @@ "measurements = 100\n", "\n", "# data gathering and storing in qgdimension.hdf5\n", - "#vertex_distance_profile(adj,max_distance=30) = rho_T_van_r\n", - "#def expt_distance(max_distance=30):\n", - "# return 1/V * [r for r in range(max_d)]@\n", - "N = 2**7\n", - "# TODO: Sum over different types of triangulations.\n", - "adj = generate_random_triangulation(N,'B')\n", - "print(vertex_distance_profile(adj,10))" + "import h5py\n", + "\n", + "max_distance = 30\n", + "samples = 100\n", + "N_space = 2**np.arange(7, 13)\n", + "\n", + "with h5py.File(\"qgdimension.hdf5\", \"a\") as f:\n", + " if not \"expectation-graph-distance\" in f:\n", + " graph_distance_expectations = np.zeros((len(N_space), samples))\n", + " for idx_N, N in enumerate(N_space):\n", + " V = (N + 4)/2\n", + " for idx_sample in range(samples):\n", + " adj = generate_random_triangulation(N,'B')\n", + " expectation = 1/V * vertex_distance_profile(adj,max_distance)@np.arange(max_distance)\n", + " graph_distance_expectations[idx_N][idx_sample] = expectation\n", + " \n", + " f.create_dataset(\"expectation-graph-distance\",data=graph_distance_expectations)\n", + " f.create_dataset(\"N-values\",data=N_space)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 78, "id": "351f7a01", "metadata": { "deletable": false, @@ -560,11 +563,48 @@ "task": false } }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZkAAAEMCAYAAAAWDss+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAxPUlEQVR4nO3dd3jV5fnH8fdNIEDYMhQIyJQRRti4g7iQpYIDRVukauuoWm3F1oq2tlKxRai4pc6CVVuRIQhoxIEsCciU4SCgskFIICS5f3+cmF8IARI453wzPq/rynXlfNdzn3DIJ893PI+5OyIiIpFQLugCRESk9FLIiIhIxChkREQkYhQyIiISMQoZERGJGIWMiIhETPmgCyhu6tSp402aNAm6DBGREmXx4sXb3L1u/uUKmXyaNGnCokWLgi5DRKREMbNvClqu02UiIhIxChkREYkYhYyIiESMrskUwsGDB0lNTWX//v1BlyIlVKVKlYiPj6dChQpBlyISVQqZQkhNTaVatWo0adIEMwu6HClh3J3t27eTmppK06ZNgy5HJKp0uqwQ9u/fT+3atRUwclzMjNq1a6snLGWSQqaQFDByIvT5kWIt6yCkTIQITP2i02UiImXZ5hSYfBv88AVUOxmanxfWwytkRETKooPpkDwKPv0nVKkDV70W9oABnS4rUcaNG0ebNm249tprOeOMMwDYtWsXTz75ZFTrmDFjBq1ataJFixaMGjXqiNvt2rWLwYMH07p1a9q0acO8efMAGDNmDAkJCbRr144hQ4Yc17WK4cOHM23atON+D3lt3LiRXr160aZNGxISEhg7dmyB2x2p7v3799O9e3c6duxIQkICI0eODEtdIhHzzafw9FnwyeOQeA3cOh/a9ItMW+6urzxfXbp08fxWrlx52LIgtGrVyjds2HDIsq+++soTEhKiVkNmZqY3a9bM169f7wcOHPAOHTr4ihUrCtz2+uuv9+eee87d3Q8cOOA7d+701NRUb9Kkiaelpbm7+xVXXOH/+te/ilxH586dfePGjcf9PvLavHmzL1682N3d9+zZ4y1btjzsPR2t7uzsbP/xxx/d3T0jI8O7d+/u8+bNO6yd4vI5kjJs/x73qb9xH1ndfUw793Xvh+3QwCIv4HeqejIlxC9/+Us2bNjAgAEDGDNmDFWrVgVgxIgRrF+/nsTERH77298e9RibN29m0KBBdOrUidatW7NgwYIi17FgwQJatGhBs2bNiI2N5eqrr2by5MmHbbdnzx7mzp3L8OHDAYiNjaVmzZoAZGZmkp6eTmZmJmlpaTRo0OCY7X755ZecddZZtG/fnjFjxvD9998THx9f5PoLUr9+fTp37gxAtWrVaNOmDZs2bTpsuyPVbWa5/x4HDx7k4MGDutAvxc/aWTC+Jyx8AXreArd8Bs17RbxZXZMpqndHwPdfhPeYp7SHPkc+7QTw9NNPM2PGDD744APq1KnDH//4RwBGjRrF8uXLSUlJyd32kksu4fnnnz/kl3dmZiZ9+vThL3/5C/369SMtLY2srKxD2jj77LP58ccfD2v7scce4/zzzwdg06ZNNGrUKHddfHw88+fPP2yfDRs2ULduXYYNG8bSpUvp0qULY8eOpWHDhtxzzz00btyYypUrc+GFF3LhhRce9b1nZmYydOhQnnjiCbp3784tt9xC69atj7pPUd5TXl9//TVLliyhR48ehyw/Vt1ZWVl06dKFdevWceuttx62v0hg0nbAjPtg2SSo2xqGz4JG3aLWvHoypdD06dMP6x28/fbbtGnThn79Qudd4+LiqFat2iHbfPTRR6SkpBz2lfeXsRdwi2NBf7VnZmby+eef86tf/YolS5ZQpUoVRo0axc6dO5k8eTJfffUVmzdvZt++fbz66qtHfT///e9/adOmDd27dwcgISGBxMREAAYOHJi73RVXXHFYcBbmPf1k7969DBo0iMcff5zq1asfsu5YdcfExJCSkkJqaioLFixg+fLlR31PIhHnDsv/C090g+Vvwjm/g5vnRjVgQD2ZojtGj6O4SklJoWfPnkfdpjB/9cfHx7Nx48bcdampqQWe7oqPjyc+Pj73L/rBgwczatQoZs+eTdOmTalbNzTtxOWXX86nn37K0KFDj1jXsmXL6NKlS+7rxYsXk5SUxMaNG6lfv37u8uzsbGJiYor8niB0mmvQoEFce+21XH755YdtX9i6a9asSVJSEjNmzKBdu3ZHfE8iEbXnO5h+D6yeCvUT4frJcEown0eFTAlXrVq1An+J5nfKKaewdOnS3Ndbt27N/YX5k48++uiYx+nWrRtr167lq6++omHDhkyaNIl///vfBbbXqFEj1qxZQ6tWrZgzZw5t27alcePGfPbZZ6SlpVG5cmXmzJlD165dAejduzcv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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Fitting and plotting\n", - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "from matplotlib import pyplot as plt\n", + "from scipy.optimize import curve_fit\n", + "\n", + "with h5py.File(\"qgdimension.hdf5\", \"r\") as f:\n", + " N_space = np.array(f[\"N-values\"])\n", + " V_space = (N_space + 4)/2\n", + " expectations = np.array(f[\"expectation-graph-distance\"])\n", + " \n", + " mu = np.mean(expectations, 1)\n", + " sigma = np.std(expectations, 1)\n", + " \n", + " fitfunc = lambda V, c, d_H: c*V**(1/d_H)\n", + " popt, pcov = curve_fit(fitfunc, V_space, mu, sigma=sigma)\n", + " V_space_fit = np.linspace(np.min(V_space)/2, np.max(V_space)*2, 1000)\n", + " \n", + " plt.figure()\n", + " plt.errorbar(V_space, mu, sigma, label=\"Monte Carlo\",\n", + " fmt='.', markersize=10, capsize=4)\n", + " plt.plot(V_space_fit, fitfunc(V_space_fit, *popt),\n", + " label=r\"fit: $c = {:.2f}$, $d_H = {:.2f}$\".format(*popt))\n", + " plt.xlabel(r\"volume $V$\")\n", + " plt.ylabel(r\"$\\mathbb{E}[d_T(X,Y)]$\")\n", + " plt.yscale(\"log\")\n", + " plt.xscale(\"log\")\n", + " plt.legend()\n", + " plt.show()" ] }, { diff --git a/Exercise sheet 8/qgdimension.hdf5 b/Exercise sheet 8/qgdimension.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..8a015ff5fbe26d7da801c0dc312f73cdd87eab69 GIT binary patch literal 6896 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 Jy7%8&{{*g?{2l-R literal 0 HcmV?d00001