221 lines
44 KiB
Plaintext
221 lines
44 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"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": 2,
|
|
"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": 3,
|
|
"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": 4,
|
|
"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",
|
|
" # 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": 5,
|
|
"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 A[j, i] >= 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",
|
|
" # 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": 11,
|
|
"id": "556548f6-bc0c-4f04-8cad-8f0be037e8d2",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"C:\\Users\\theking\\AppData\\Local\\Temp\\ipykernel_35980\\378739895.py:13: RuntimeWarning: divide by zero encountered in scalar divide\n",
|
|
" c = A[j,i]/pivot\n",
|
|
"C:\\Users\\theking\\AppData\\Local\\Temp\\ipykernel_35980\\378739895.py:15: RuntimeWarning: invalid value encountered in multiply\n",
|
|
" A[j] -= c * A[i]\n",
|
|
"C:\\Users\\theking\\AppData\\Local\\Temp\\ipykernel_35980\\378739895.py:13: RuntimeWarning: invalid value encountered in scalar divide\n",
|
|
" c = A[j,i]/pivot\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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tG3bls8//xy9Xp+n9gcJCAgwBpq7rzUhIQGACxcukJOTk6dGNzc36tatW+jjPyyz7FPTuXPnPG+aOdPpdDze3Jd2tYu5FML107DxLfV612lQLch0xQkhygSdToeTnU2pX0w9q/HGjRu5evUq4eHh2NjYYGNjw5AhQ7hy5QqbNm3Ks29kZCQAt27d4tatW8btffv2JSoqynj554/7/d67hzF69GguXLjA8OHDOXr0KM2bNzf21fnll1+YOHEizzzzDJs2bSIqKoqnn36a7OzsPMf491pFOp0Og8EAgIuLCwcPHjSeXnvnnXcIDg5+4Art+b2u+73Wli1bUrNmTX7++WcyMjJYsWIFw4YNM96vKMo9jy1uf6qCXuvdY5rquYqjyKFmx44d9OnTB29vb3Q6HStXrrxnn9mzZxMYGIiDgwMhISEPPH9YFMnJyYSEhNCuXTu2b99usuNqIjcLfhsFuZlQswu0Gqt1RUIIUWxz585lyJAheUJJVFQUQ4cOzdNh+Pz580ycOJHvvvuO1q1b89RTT+UJAbVq1TJeHB3/brnes2dPnufbs2cP9erVe+i6fX19GTt2LMuXL+fll1/mu+++A2Dnzp20adOGcePG0bRpU2rVqsX58+eLfHwbGxu6du3KRx99xJEjR7h48SJbtmy57/65ubns37/fePv06dMkJiYW+FqffPJJFi1axOrVq7GysqJXr17G+xo0aMCff/6ZZ//IyEjq1KmTp/XsYdddqlmzJra2tuzdu9e4LTk5mbNnzz7UcYuiyOdL0tLSCA4O5umnn2bQoEH33L906VImTJjA7Nmzadu2Ld9++y1hYWGcOHECPz8/AEJCQsjKyrrnsZs2bXrgubeLFy/i7e3NsWPH6NWrF0ePHsXV1bWoL8M8/DEdrh0Fp0rqaCcrs2w4E0KIB7p+/TqrV69m1apVxn6Pd40YMYJevXpx/fp1PDw8GD58ON27d+fpp58mLCyMRo0a8emnn/Lqq68W+By7du3io48+on///kRERPDrr7+ydu3ah6p7woQJhIWFUadOHW7fvs2WLVuoX19ds69WrVosXLiQjRs3EhgYyI8//si+ffsIDAws9PHXrFnDhQsX6NChAxUrVmTdunUYDIYCT8nY2try0ksv8eWXX2Jra8uLL75I69at8z31dNfQoUOZNm0a77//Po899hgODn/PQv/y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5/D6+OOPefPNN5k6dSobN25k4sSJ1KtXj27duhW73szMTEJCQnj99ddxdXVl7dq1DB8+nBo1atCqVSsef/xxxo8fz9atW+nSpQsAt2/fZuPGjaxevRpQ1yscNmwYX375Je3bt+f8+fOMGTMGgClTpmAwGAgLCyMlJYWffvqJmjVrcuLECaytrQus7e233+bDDz/kiy++4Mcff+SJJ54gKCiI+vXr59nPysqKIUOGsGjRojwT3S5evJjQ0FBq1KiBoij0798fZ2dntm/fTm5uLuPGjSM8PJxt27YRHh7OsWPH2LBhA5s3bwbAzc3tvrW99dZbfPLJJ9SuXZu33nqLJ554gnPnzmFjY8OuXbsYO3Ys//3vf+nbty+bN2/m7bffLvo/TjFIqDEVRYE1EyH5CnjUgJ7/1boiIYQodfPmzSMsLIyKFSsC0LNnT+bNm8d7771n3Oe9995j8+bNjBkzhuPHjzN8+PA8S+vcT9u2bZk8eTIAderUYdeuXXz22WcPFWqqV6/OK6+8Yrz90ksvsWHDBn799VdatWqFh4cHPXv2ZPHixcZQ8+uvv+Lh4WG8/f777zN58mRjy02NGjV49913ee2115gyZQqbN29m7969nDx5kjp16hj3eZDHH3+c0aNHA/Duu+8SERHBV199xezZs+/Zd+jQocycOZNLly7h7++PwWDg559/5s033wRg8+bNHDlyhOjoaHx9fQH48ccfadiwIfv27aNFixZUqFABGxsbqlWr9sDaXnnlFXr16gXAtGnTaNiwIefOnaNevXp89dVXhIWFGd/XOnXqEBkZWWDLlKlIqDGVw0vg+AqwslGHb9tX0LoiIURZYeuktppo8bwmpNfrWbBgAV988YVx27Bhw5g4cSLTpk0ztkzY2dnx008/0bhxY/z9/fOMalq0aBHPPfec8fb69etp3749AKGhoXmeLzQ09IEjogpT84cffsjSpUu5evUqWVlZZGVl4ez8dwvW0KFDGTNmDLNnz8be3p5FixYxZMgQ4+s5cOAA+/bt4/33389z3MzMTNLT04mKisLHx8cYaAorv9d7v9FOTZs2pV69eixZsoTJkyezfft2EhISGDx4MAAnT57E19fXGGgAGjRogLu7OydPnqRFixZFqq1x478XZL7bwpaQkEC9evU4ffr0PSG1ZcuWEmrKjFsXYN2r6vXOb0L1EG3r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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"en = np.arange(3, 21, 1)\n",
|
|
"e = []\n",
|
|
"epivot = []\n",
|
|
"for n in en:\n",
|
|
" A,b = getAb(n)\n",
|
|
" x = GaussianElimination(A, b)\n",
|
|
" e.append(np.linalg.norm(A@x - b))\n",
|
|
" \n",
|
|
" x = GaussianEliminationWithPivoting(A, b)\n",
|
|
" epivot.append(np.linalg.norm(A@x - b))\n",
|
|
"\n",
|
|
"plt.plot(en, e, label='||Ax-b|| sans pivoting')\n",
|
|
"plt.plot(en, epivot, label='||Ax-b|| avec pivoting')\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
|
|
}
|