{ "cells": [ { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# D. Scott\n", "# Linear Algebra: TCI\n", "# Code Challenge 11.2\n", "\n", "\n", "import random\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "sizes = list(range(3, 31))\n", "determinants = []\n", "\n", "# outer matrix dimension loop (3-30)\n", "for d in range(3,31):\n", " # inner experiment count loop (100)\n", " for i in range(0,100):\n", " dets = []\n", " m1 = np.random.normal(0, 1, d*(d-1))\n", " m2 = np.random.normal(0, 1, (d-1)*d)\n", "\n", " A1 = np.array(m1).reshape(d,d-1)\n", " A2 = np.array(m2).reshape(d-1,d)\n", "\n", " A = A1@A2\n", "\n", " dets.append(np.linalg.det(A))\n", "\n", " determinants.append(sum(dets)/len(dets))\n", "\n", "fig, ax = plt.subplots()\n", "\n", "ax.plot(sizes, determinants, label='Sample Line')\n", "ax.semilogy(sizes, determinants)\n", "\n", "ax.set_xlabel('Matrix size')\n", "ax.set_ylabel('Average determinant')\n", "ax.set_title('Matrix size vs Average determinant')\n", "\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.12" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }