{ "cells": [ { "cell_type": "code", "execution_count": 4, "id": "0ae8d8f4-2f60-4ef3-bf50-eae61169de5d", "metadata": { "tags": [] }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 5, "id": "d984aa22-593e-48ea-a27d-beeb3b6377d8", "metadata": { "tags": [] }, "outputs": [], "source": [ "def getAb(n):\n", " A = np.zeros((n,n))\n", " for i in range(n):\n", " for j in range(n):\n", " A[i,j] = (i + 1)**(n-1-j)\n", " \n", " b = np.random.rand(n)\n", " return A,b" ] }, { "cell_type": "code", "execution_count": 6, "id": "8835175c-38bc-42cf-8af5-ec9a13c7410f", "metadata": { "tags": [] }, "outputs": [], "source": [ "def backward(A,b):\n", " \"\"\" A matrice triangulaire supérieure\"\"\"\n", " n = len(b)\n", " x = np.zeros(n)\n", " \n", " for i in range(n-1, -1, -1):\n", " x[i] = b[i]\n", " for j in range(i+1, n):\n", " x[i] -= A[i,j]*x[j]\n", " #print(A[i,i])\n", " x[i] /= A[i, i]\n", " return x" ] }, { "cell_type": "code", "execution_count": 16, "id": "94e34e9e-d397-4010-8b0a-d51d79ae52a4", "metadata": { "tags": [] }, "outputs": [], "source": [ "def GaussianElimination(A, b):\n", " \"\"\" Descente \"\"\"\n", " n=len(b)\n", " A = np.array(A)\n", " b = np.array(b)\n", " for i in range(n-1):\n", " pivot = A[i, i]\n", " #print(A, 'pivot=',i,i, '=', pivot, 'b=',b)\n", " for j in range(i+1, n):\n", " if pivot == 0:\n", " pass\n", " raise Exception('Singular Matrix')\n", " # print('pivot is 0', 'ij',i,j, A[i,:])\n", " c = A[j,i]/pivot\n", " b[j] -= c * b[i]\n", " A[j] -= c * A[i]\n", " #print(A, b)\n", " return backward(A, b)" ] }, { "cell_type": "code", "execution_count": 17, "id": "6834425f-f943-4c17-906d-5409e0f90413", "metadata": { "tags": [] }, "outputs": [], "source": [ "def GaussianEliminationWithPivoting(A, b):\n", " \"\"\" Descente \"\"\"\n", " n=len(b)\n", " A = np.array(A)\n", " b = np.array(b)\n", " for i in range(n-1):\n", " # Pivotage : on échange la ligne avec abs(A[x, i])\n", " pmax =A[i,i]\n", " lmax = i\n", " for j in range(i+1,n):\n", " if abs(A[j, i]) >= abs(pmax):\n", " pmax = A[j,i]\n", " lmax = j\n", " \n", " # print('Pivot max = ', pmax)\n", " # print('échange ligne', i, lmax)\n", " # switch lmax and i\n", " # print('bef switch', A)\n", " # print(b)\n", " A[i], A[lmax] = A[lmax], A[i].copy()\n", " b[i], b[lmax] = b[lmax], b[i].copy()\n", " # print('after switch', A)\n", " # print(b)\n", " \n", " pivot = A[i, i]\n", " #print(A, 'pivot=',i,i, '=', pivot, 'b=',b)\n", " for j in range(i+1, n):\n", " if pivot == 0:\n", " pass\n", " raise Exception('Singular Matrix')\n", " # print('pivot is 0', 'ij',i,j, A[i,:])\n", " c = A[j,i]/pivot\n", " b[j] -= c * b[i]\n", " A[j] -= c * A[i]\n", " #print(A, b)\n", " return backward(A, b)" ] }, { "cell_type": "code", "execution_count": 26, "id": "556548f6-bc0c-4f04-8cad-8f0be037e8d2", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.1102230246251565e-16\n", "1.1157603309187458e-15\n", "3.356474311340335e-15\n", "1.0045524680675924e-14\n", "4.368329060208651e-14\n", "1.952160427256209e-13\n", "1.9973313828599363e-11\n", "3.7077837198237614e-10\n", "5.231805851568996e-11\n", "3.0347215613783297e-10\n", "6.285550799311683e-11\n", "6.777947420435342e-11\n", "1.3628762349179106e-11\n", "2.8897510754239285e-12\n", "7.201856338832219e-12\n", "1.5802032097691353e-10\n", "Enable to solve(gauss) for n = 19 Singular Matrix\n", "4.3542124286715616e-12\n", "Enable to solve(gauss) for n = 20 Singular Matrix\n", "2.9464159842374688e-12\n" ] }, { "data": { "image/png": "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UQNnZ+en+h7Wrl07++uyZQ2ThUZFRQFw6dIlGjRokGP/f98XoqAwyai0f69xpChKntY92r59+0O3N2nShLNnzz7RMd577z3Gjx+ffT8hIcEkwcbaUmP8CfaiLsLaYexOvMaE0q7oVSq6VezC+00nm3X9KPEELG0NrSbmOK+Rbd++ndu3b9O7d+8c23U6HTt27CAwMDB72/2W2NjYWGJjY7GzM7Qade7cmYYNG2bvV67c45ffeNaf7xkzZvD1118za9YsatWqhZ2dHWPHjiUjIyN7n06dOqHX69myZQv169fnwIEDzJw5M/txvV7PpEmT6NatW67jW1tbG/Xqr8e93v79+7NixQomTJjAihUraN++ffbVUY96T83re+19lpb/zKd1//n3xx097JiKjAUxCvkuGp9RQ42rqysajSZXq0xUVFSu1htTs7KyKnwj/BUFTiyA7R+wzxLeciuFTqWik08nPm4yCbVKrmQq8FQqk3QDmcOCBQvo06cPH3zwQY7tn332GQsWLMgONdeuXWPcuHHMmzePVatWMWjQIHbv3o1arcbBwQEHB4eHHv/IkSO57lerVu2Zaj5w4ABdunTJbl3S6/VcuXKF6tWrZ+9jY2NDt27dWL58OVevXqVKlSoEBARkP163bl0uXbpEpUqVHnqO2rVrExYWxuXLl/PUWnPkyBEGDRqU436dOnUeuX+/fv348MMPCQoKYs2aNcyZMyf7sRo1ahASEkJoaGj2H2vnz58nPj4++7VqtdocLWpPq1q1ahw7dizHthMnTjzzcYUwBaOGGq1WS0BAADt37szRp75z5066dOlizFMVPckxsPE1uLSVgzbWjCvjRhYKHbw7MLnpZDRq01wiLsTD3L17l02bNrFx48bsGbzvGzx4MC+++CJ3797FxcWFgQMH0q5dO4YOHUpgYCC1atVixowZvP322489x8GDB/niiy946aWX2LlzJ6tXr2bLli3PVHelSpVYu3Ythw4dokSJEsycOZPIyMgcoQYMrSCdOnXi3LlzObrXAD7++GM6duyIp6cnPXv2RK1Wc+bMGc6ePcvUqVNp2bIlLVq0oHv37sycOZNKlSpx8eJFVCoVHTo8elX71atXU69ePZo1a8by5cs5duxYrqvJHlShQgWaNGnCsGHDyMrKyvEe+vzzz1O7dm369+/PrFmzyMrKYsyYMbRs2ZJ6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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "en = np.arange(3, 21, 1)\n", "e = []\n", "epivot = []\n", "\n", "er = []\n", "for n in en:\n", " A,b = getAb(n)\n", " try:\n", " x = GaussianElimination(A, b)\n", " e.append(np.linalg.norm(A@x - b))\n", " except Exception as ex:\n", " print('Enable to solve(gauss) for n =', n, ex)\n", " e.append(0)\n", " \n", " try:\n", " x = GaussianEliminationWithPivoting(A, b)\n", " epivot.append(np.linalg.norm(A@x - b))\n", " except Exception as e:\n", " print('Enable to solve(Pivot) for n =', n, e)\n", " epivot.append(0)\n", " \n", " try:\n", " x = np.linalg.solve(A, b)\n", " print(np.linalg.norm(A@x - b))\n", " er.append(np.linalg.norm(A@x - b))\n", " except Exception as e:\n", " print('Enable to solve for n =', n, e)\n", "\n", "plt.plot(en, e, label='||Ax-b|| sans pivoting')\n", "plt.plot(en, epivot, label='||Ax-b|| avec pivoting')\n", "plt.plot(en, er, label='||Ax-b|| avec numpy')\n", "plt.yscale('log')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "f03a740f-35bb-4bac-8cfe-c6d497151a83", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d19b8b72-c5b0-4685-ba7c-f041af75bde8", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.5" } }, "nbformat": 4, "nbformat_minor": 5 }