251 lines
53 KiB
Plaintext
251 lines
53 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "6c549f44-d375-49c4-9b4f-8a576c81ff2a",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"from scipy.linalg import hilbert"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "91cfb434-788e-44e0-bf36-7da87016e895",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def getAb(n):\n",
|
|
" A=hilbert(n)\n",
|
|
" b = np.ones(n)\n",
|
|
" return A, b"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "a6e789b3-494c-4fe7-b6fc-922eff00cd6f",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def forward(A, b):\n",
|
|
" n = len(b)\n",
|
|
" x = np.zeros(n)\n",
|
|
" \n",
|
|
" for i in range(0, n):\n",
|
|
" x[i] = b[i]\n",
|
|
" \n",
|
|
" for j in range(i+1, n):\n",
|
|
" x[i] -= x[j] * A[i, j]\n",
|
|
" \n",
|
|
" x[i] /= A[i, i]\n",
|
|
" \n",
|
|
" return x"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 43,
|
|
"id": "2c362bf6-3f7d-4c1e-9411-13f298a73179",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def gsseidel(A,b,x0,maxiter=10**3):\n",
|
|
" \"\"\" méthode pt fixe Ax=b\n",
|
|
" Avec A = B+C\n",
|
|
" <-> (B+C) x = b\n",
|
|
" <-> Bx + Cx = b\n",
|
|
" <-> x = (B^-1)b - (B^-1)Cx\n",
|
|
" <-> x = (B^-1)b - (B^-1)(A-B)x\n",
|
|
" <-> x = (B^-1)b - (B^-1)Ax + x\n",
|
|
" <-> x = x + (B^1)b - (B^-1)Ax\n",
|
|
" <-> x = x - (B^-1)(Ax-b)\n",
|
|
" \n",
|
|
" Jacobi : B=diag(A)\n",
|
|
" GaussSeidel : B=trigInf(A)\n",
|
|
" \"\"\"\n",
|
|
" \n",
|
|
" B = np.tril(A)\n",
|
|
" Bi = np.linalg.inv(B)\n",
|
|
" \n",
|
|
" err = np.zeros(maxiter)\n",
|
|
" x = x0\n",
|
|
" \n",
|
|
" for k in range(maxiter):\n",
|
|
" x = x - Bi@(A@x-b)\n",
|
|
" err[k] = np.linalg.norm(A@x-b)\n",
|
|
" \n",
|
|
" return x, err"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 46,
|
|
"id": "d57bd138-7784-43e9-9a31-4d2931a232ad",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def grnormal(A,b,x0,maxiter=10**3):\n",
|
|
" \"\"\"\n",
|
|
" Méthode du gradient normal\n",
|
|
" Direction : -(Ax-b)\n",
|
|
" Pas optimal : -dT(Ax-b)/(dT A d)\n",
|
|
" \"\"\"\n",
|
|
" \n",
|
|
" err = np.zeros(maxiter)\n",
|
|
" x = x0\n",
|
|
" for k in range(maxiter):\n",
|
|
" d = -(A@x - b)\n",
|
|
" pas = -d.T@(A@x - b)/(d.T@A@d)\n",
|
|
" err[k] = np.linalg.norm(A@x-b)\n",
|
|
" \n",
|
|
" x = x + pas * d\n",
|
|
" \n",
|
|
" return err, x"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 72,
|
|
"id": "d76b3894-3ad1-49c3-9d7f-6f4e294bec1a",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def grconjug(A,b,x0,maxiter=10**3):\n",
|
|
" \"\"\"\n",
|
|
" Méthode du gradient conjugué\n",
|
|
" Direction : -(Ax-b) + ||Ax-b||/||Ax(k-1)|| * d(k-1)\n",
|
|
" Pas optimal : -dT(Ax-b)/(dT A d)\n",
|
|
" \"\"\"\n",
|
|
" \n",
|
|
" err = np.zeros(maxiter)\n",
|
|
" \n",
|
|
" x = x0\n",
|
|
" g = A@x - b\n",
|
|
" d = -g\n",
|
|
" \n",
|
|
" for k in range(maxiter):\n",
|
|
" step = -d.T@g/(d.T@A@d)\n",
|
|
" x = x + step * d\n",
|
|
" \n",
|
|
" # Nouvelle direction\n",
|
|
" gn = A@x - b\n",
|
|
" d = -gn + ((gn@gn)/(g@g) * d)\n",
|
|
" g = gn\n",
|
|
" \n",
|
|
" err[k] = np.linalg.norm(A@x-b)\n",
|
|
" \n",
|
|
" return x, err"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 74,
|
|
"id": "99db6da4-471b-472b-92dd-adf0d9565444",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[-7.99999949e+00 5.03999972e+02 -7.55999963e+03 4.61999980e+04\n",
|
|
" -1.38599995e+05 2.16215992e+05 -1.68167995e+05 5.14799985e+04] [1. 1. 1. 1. 1. 1. 1. 1.]\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[]"
|
|
]
|
|
},
|
|
"execution_count": 74,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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o9G4qVXu061bNyQmJiIgIABA8WHt559/xpEjR/DVV1857fPSaDRYs2aN6tiMGTOwZcsWpzw/EdnHMERUgxmNRixYsAA3btxwd1NKpKCgwGXP7enpifDw8BIHm6FDh+LPP/+Ep6dnkeeZzWZ5R/Sy8PX1RXBwcJkfT0TFYxgiqsH69OmD8PBwzJ8/v8jzfv75Z7Rp0wYGgwENGzbEu+++q7q/YcOGeO211zBq1Cj4+vqiQYMG+OWXX3D16lXcd9998PX1Rdu2bbFv3z6b516zZg2aN28Oo9GIvn374sKFC/J9UhfRF198gcaNG8NgMEAQBKSlpeGJJ55A7dq14e/vj169euHgwYNFvoc9e/agY8eOMBqNiImJwYEDB1T3K7vJtm3bhrFjxyItLQ0ajQYajQazZ88GII4Tev7551GnTh34+Pjg1ltvxbZt2+TnkSpKv/32G1q3bg2DwYDz589j79696Nu3L0JCQhAQEIA777wT+/fvV32GAHD//fdDo9HIt627ySwWC+bOnYu6devCYDCgQ4cO2LBhg3y/1P23atUq9OzZE97e3mjfvj3++ecf+Zzz589j4MCBqFWrFnx8fNCmTRusX7++yM+PqDpjGCKqwXQ6Hd544w18+OGHuHjxot1zYmNj8dBDD+Hhhx/G4cOHMXv2bLzyyiv48ssvVee999576N69Ow4cOIB77rkHI0eOxKhRozBixAjs378fTZs2xahRo6DcGzo7Oxuvv/46vvrqK/z9999IT0/Hww8/rHreM2fOYOXKlfj555/l8T333HMPkpKSsH79esTGxqJTp07o3bs3rl+/bvc9ZGVl4d5770WLFi0QGxuL2bNnY8aMGQ4/l27dumHRokXw9/dHYmIiEhMT5fPHjh2Lv//+Gz/++CMOHTqEBx98EHfddRdOnz6tel/z58/HsmXLcPToUdSuXRsZGRkYPXo0duzYgX///RfNmjXD3XffjYyMDADA3r17AQDLly9HYmKifNva+++/j3fffRfvvPMODh06hP79+2PQoEGq1weAl156CTNmzEBcXByaN2+ORx55BCaTCQAwadIk5OXlYfv27Th8+DAWLFgAX19fh58HUbVX7n3viahKGj16tHDfffcJgiAIXbp0EcaNGycIgiCsXr1aUP5oePTRR4W+ffuqHvvcc88JrVu3lm83aNBAGDFihHw7MTFRACC88sor8rF//vlHACAkJiYKgiAIy5cvFwAI//77r3zO8ePHBQDC7t27BUEQhFmzZgkeHh5CcnKyfM6WLVsEf39/ITc3V9WmJk2aCJ988ond9/rJJ58IQUFBQlZWlnxsyZIlAgDhwIEDgiAIwtatWwUAwo0bN+T2BQQEqJ7nzJkzgkajES5duqQ63rt3b2HmzJmq9xUXF2e3LRKTyST4+fkJa9eulY8BEFavXq06b9asWUL79u3l25GRkcLrr7+uOqdz587CxIkTBUEQhPj4eAGAsGzZMvn+o0ePCgCE48ePC4IgCG3bthVmz55dZPuIahJWhogICxYswFdffYVjx47Z3Hf8+HF0795ddax79+44ffo0zGazfKxdu3by9bCwMABA27ZtbY4lJyfLx/R6PWJiYuTbLVu2RGBgoGqqeoMGDRAaGirfjo2NRWZmJoKDg+Hr6ytf4uPjcfbsWbvv7/jx42jfvj28vb3lY127dnXwaTi2f/9+CIKA5s2bq177r7/+Ur22p6en6vOQ3veECRPQvHlzBAQEICAgAJmZmUhISCjx66enp+Py5ct2vx7W0/uVrx8RESG3AQAmT56M1157Dd27d8esWbNw6NChEreBqDrSu7sBROR+d9xxB/r374//+7//w5gxY1T3CYJgM6hYUHR1STw8POTr0vn2jlkPJrY3YFl5zMfHR3WfxWJBRESEapyOxNHsL3vtLQuLxQKdTofY2FjodDrVfcpuJi8vL5v3NWbMGFy9ehWLFi1CgwYNYDAY0LVrV+Tn55e6Hfa+HtbHivrsH3/8cfTv3x/r1q3Dpk2bMH/+fLz77rt45plnSt0WouqAlSEiAgC8+eabWLt2LXbt2qU63rp1a+zcuVN1bNeuXWjevLlNICgtk8mkGlR98uRJpKamFrluT6dOnZCUlAS9Xo+mTZuqLiEhIXYf07p1axw8eBA5OTnysX///bfItnl6eqoqXwDQsWNHmM1mJCcn27x2eHh4kc+3Y8cOTJ48GXfffbc8GP3atWuqczw8PGxeU8nf3x+RkZF2vx6tWrUq8vWt1atXDxMmTMCqVavw7LPP4rPPPivV44mqE4YhIgIgdmkNHz4cH374oer4s88+iy1btmDevHk4deoUvvrqK3z00UdFDkAuKQ8PDzzzzDPYvXs39u/fj7Fjx6JLly645ZZbHD6mT58+6Nq1KwYPHoyNGzfi3Llz2LVrF15++WW7s9UA4NFHH4VWq8Vjjz2GY8eOYf369XjnnXeKbFvDhg2RmZmJLVu24Nq1a8jOzkbz5s0xfPhwjBo1CqtWrUJ8fDz27t2LBQsWFDsbq2nTpvjmm29w/Phx7N69G8OHD4eXl5fNa27ZsgVJSUkOlzt47rnnsGDBAqxYsQInT57Eiy++iLi4OEyZMqXI11eaOnUqNm7ciPj4eOzfvx9//vlnqcMUUXXCMEREsnnz5tl0KXXq1AkrV67Ejz/+iKioKLz66quYO3euTXdaWXh7e+OFF17Ao48+iq5du8LLyws//vhjkY/RaDRYv3497rjjDowbNw7NmzfHww8/jHPnzsnjkqz5+vpi7dq1OHbsGDp27IiXXnoJCxYsKPJ1unXrhgkTJmDYsGEIDQ3FW2+9BUCc7TVq1Cg8++yzaNGiBQYNGoTdu3ejXr16RT7fF198gRs3bqBjx44YOXIkJk+ejNq1a6vOeffdd7F582bUq1cPHTt2tPs8kydPxrPPPotnn30Wbdu2xYYNG/Drr7+iWbNmRb6+ktlsxqRJk9CqVSvcddddaNGiBRYvXlzixxNVNxrBWZ3pRERERFUQK0NERERUozEMERERUY3GMEREREQ1GsMQERER1WgMQ0RERFSjMQwRERFRjcYwRERERDUawxARERHVaAxDREREVKMxDBEREVGNxjBERERENdr/A6hW0v1qXBFhAAAAAElFTkSuQmCC",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"A, b = getAb(8)\n",
|
|
"x0 = np.ones(8)\n",
|
|
"maxiter = 1000\n",
|
|
"\n",
|
|
"x, err = gsseidel(A, b, x0, maxiter)\n",
|
|
"\n",
|
|
"xs = np.arange(0, maxiter, 1)\n",
|
|
"\n",
|
|
"plt.plot(xs, err, label='Gauss-Seidel', color='b')\n",
|
|
"\n",
|
|
"plt.xlabel('Nombre d''itérations')\n",
|
|
"plt.ylabel('Erreur ||Ax-b||')\n",
|
|
"plt.yscale('log')\n",
|
|
"\n",
|
|
"x, err = grnormal(A, b, x0, maxiter)\n",
|
|
"plt.plot(xs, err, label='Gradient', color='orange')\n",
|
|
"\n",
|
|
"x, err = grconjug(A, b, x0, maxiter)\n",
|
|
"print(x, A@x)\n",
|
|
"plt.plot(xs, err, label='Gradient conjugué', color='green')\n",
|
|
"\n",
|
|
"plt.legend(loc=4)\n",
|
|
"plt.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "37aa7820-c174-41d4-ba43-43011688b7af",
|
|
"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
|
|
}
|