add exercise 2: complete heat equation implementation in Jupyter notebook with matrix construction and solution

This commit is contained in:
Félix MARQUET
2025-04-01 09:53:40 +02:00
parent 2678991cca
commit b8db18b8bb

View File

@@ -43,20 +43,19 @@
"\n",
"Système linéaire\n",
"$$\n",
"-2T0 + T(1) = -T0\n",
"\n",
"T0 - 2T1 + T2 = 0\n",
"\n",
"T1 - 2T2 + T3 = 0\n",
"\n",
".\n",
".\n",
".\n",
"\n",
"TN - 2T(N+1) = -T1+\n",
"\\begin{cases}\n",
"-2T_0 + T_1 = -T_0 \\\\\n",
"T_0 - 2T_1 + T_2 = 0 \\\\\n",
"T_1 - 2T_2 + T_3 = 0 \\\\\n",
"\\vdots \\\\\n",
"T_{N-1} - 2T_N + T_{N+1} = 0 \\\\\n",
"T_N - 2T_{N+1} = -T_1\n",
"\\end{cases}\n",
"$$\n",
"\n",
"=> MT = b\n",
"\n",
"### Question 3: Montrer que l'équation discrétisée peut s'écrire: MT = b, avc M une matrice de taille N X N et b un vecteur de taille N. On précisera les termes non nuls de M et b.\n",
"Matrice du système (simplifiée pour N=6, normalement N indéfini)\n",
"$$\n",
"\\begin{bmatrix}\n",
@@ -87,8 +86,104 @@
"0\\\\\n",
"-T1+\n",
"\\end{bmatrix}\n",
"$$"
"$$\n",
"\n",
"### Question 4: Sous python, construire la matrice M et le vecteur b à l'aide de numpy. Résoudre ensuite le système linéaire à l'aide de la fonction numpy.linalg.solve(M, b).\n"
]
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-01T07:53:00.484017Z",
"start_time": "2025-04-01T07:53:00.474195Z"
}
},
"cell_type": "code",
"source": [
"import numpy as np\n",
"\n",
"# Constantes et paramètres\n",
"N = 100\n",
"\n",
"M = np.zeros((N + 1, N + 1))\n",
"\n",
"b = np.zeros(N + 1)\n",
"\n",
"# Conditions aux bords\n",
"T0 = 2\n",
"T1 = 25\n",
"\n",
"# Remplissage de la matrice M\n",
"for i in range(N + 1):\n",
" if i == 0:\n",
" M[i, i] = -2\n",
" M[i, i + 1] = 1\n",
" elif i == N:\n",
" M[i, i - 1] = 1\n",
" M[i, i] = -2\n",
" else:\n",
" M[i, i - 1] = 1\n",
" M[i, i] = -2\n",
" M[i, i + 1] = 1\n",
"\n",
"# Affichage de la matrice M\n",
"print(M)\n",
"\n",
"# Remplissage du vecteur b\n",
"b[0] = -T0\n",
"b[N] = -T1\n",
"\n",
"# Affichage du vecteur b\n",
"print(b)\n",
"\n",
"# Résolution du système linéaire\n",
"T = np.linalg.solve(M, b)\n",
"\n",
"# Affichage de la solution\n",
"print(T)"
],
"id": "d480d6e691bf7fbf",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-2. 1. 0. ... 0. 0. 0.]\n",
" [ 1. -2. 1. ... 0. 0. 0.]\n",
" [ 0. 1. -2. ... 0. 0. 0.]\n",
" ...\n",
" [ 0. 0. 0. ... -2. 1. 0.]\n",
" [ 0. 0. 0. ... 1. -2. 1.]\n",
" [ 0. 0. 0. ... 0. 1. -2.]]\n",
"[ -2. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. -25.]\n",
"[ 2.2254902 2.45098039 2.67647059 2.90196078 3.12745098 3.35294118\n",
" 3.57843137 3.80392157 4.02941176 4.25490196 4.48039216 4.70588235\n",
" 4.93137255 5.15686275 5.38235294 5.60784314 5.83333333 6.05882353\n",
" 6.28431373 6.50980392 6.73529412 6.96078431 7.18627451 7.41176471\n",
" 7.6372549 7.8627451 8.08823529 8.31372549 8.53921569 8.76470588\n",
" 8.99019608 9.21568627 9.44117647 9.66666667 9.89215686 10.11764706\n",
" 10.34313725 10.56862745 10.79411765 11.01960784 11.24509804 11.47058824\n",
" 11.69607843 11.92156863 12.14705882 12.37254902 12.59803922 12.82352941\n",
" 13.04901961 13.2745098 13.5 13.7254902 13.95098039 14.17647059\n",
" 14.40196078 14.62745098 14.85294118 15.07843137 15.30392157 15.52941176\n",
" 15.75490196 15.98039216 16.20588235 16.43137255 16.65686275 16.88235294\n",
" 17.10784314 17.33333333 17.55882353 17.78431373 18.00980392 18.23529412\n",
" 18.46078431 18.68627451 18.91176471 19.1372549 19.3627451 19.58823529\n",
" 19.81372549 20.03921569 20.26470588 20.49019608 20.71568627 20.94117647\n",
" 21.16666667 21.39215686 21.61764706 21.84313725 22.06862745 22.29411765\n",
" 22.51960784 22.74509804 22.97058824 23.19607843 23.42156863 23.64705882\n",
" 23.87254902 24.09803922 24.32352941 24.54901961 24.7745098 ]\n"
]
}
],
"execution_count": 4
}
],
"metadata": {