{ "cells": [ { "cell_type": "markdown", "id": "7c8c115e-dc7b-41b3-907a-700b3503fc61", "metadata": {}, "source": [ "## MT09 - TP3 - Automne 2025\n", "### Factorisation de Choleski. Méthode de Newton" ] }, { "cell_type": "markdown", "id": "9c071e68-a309-4a2c-96ad-ecc661d6891a", "metadata": {}, "source": [ "### 1. Programmation de la factorisation de Choleski sous forme vectorielle\n", "Pour une matrice $A$ ***symétrique définie positive***, programmez la factorisation de Choleski :\n", "\n", "\\begin{align*}\n", "& b_{11} = \\sqrt{a_{11}},\\quad b_{i1}=\\frac{a_{i1}}{b_{11}}, \\ \\text{ pour } i>1, \\\\[1.5ex]\n", "& b_{jj} = \\sqrt{a_{jj}-\\sum_{k=1}^{j-1} b_{jk}^2},\\ \\text{ pour } j\\geq 2,\\quad\n", "b_{ij} =\\frac{1}{b_{jj}} \\left( a_{ij}-\\sum_{k=1}^{j-1} b_{ik} b_{jk}\\right),\\ 1 tol\n", "$$\n", "\n", "(si oui et si $k0,\n", "$$\n", "\n", "où $\\rho_0$ est la densité initiale, $\\rho_M$ est la densité maximale $(\\rho_M\\gg \\rho_0)$, et $\\alpha$ est le taux de croissance cellulaire dans la phase exponentielle. \n", "\n", "Tracer la fonction $t\\mapsto \\rho(t)$ sur l'intervalle $[0,10]$ pour les paramètres\n", "$(\\rho_0,\\rho_,\\alpha)=(3, 1000, 1.2)$." ] }, { "cell_type": "code", "execution_count": null, "id": "02bc00f4-e5d3-46d8-a7d0-ccfe8a96fd5b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c1d12d01-4a45-4259-a237-303f12325903", "metadata": {}, "source": [ "Les quantités $\\rho_M$ et $\\alpha$ sont d'intérêt biologique, mais ne sont pas des observables (ne peuvent pas être mesurées directement).\n", "Expérimentalement, on peut compter le nombre de cellules sur un élément de surface, on peut donc mesurer la densité à un temps de prolifération donné.\n", "\n", "À partir de trois mesures de densité de cellules à rois instants différents, on peut\n", "espérer déterminer les trois paramètres $\\rho_0$, $\\rho_M$ et $\\alpha$ du modèle.\n", "\n", "Supposons que les trois mesures sont les suivantes :\n", "\n", "| Temps $t^k$ | Densité $\\rho(t^k)$ | \n", "| :---------------- | :------: | \n", "| 2.0 | 32.104 | \n", "| 4.0 | 267.726 | \n", "| 8.0 | 977.987 | \n", "\n", "À partir des mesures, déterminer les paramètres $\\rho_0$, $\\rho_M$ et $\\alpha$.\n", "Pour cela, dans un premier temps, écrivez le système d'équations $\\mathbf{F}(\\mathbf{x})=0$ à résoudre.\n", "\n", "En utilisant `scipy.optimize.fsolve()` (voir l'aide associée), résoudre le problème. On pourra utiliser l'initialisation :\n", "\n", "```\n", "X0 = np.array([1.0, 2000.0, 1.0]) # X0=(rho0, rhoM, alpha) initial guess \n", "```\n", "\n", "Affichez les valeurs de $\\rho_0$, $\\rho_M$ et $\\alpha$ ainsi obtenues.\n", "Arrondir les valeurs à deux décimales en utilisant `np.round(...,2)`.\n" ] }, { "cell_type": "code", "execution_count": 83, "id": "a1825b00-e204-4dce-88ff-4efbc8e1f6d7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'nfev': 25, 'fjac': array([[-0.15555545, -0.98174627, -0.10943838],\n", " [-0.0258552 , -0.1067026 , 0.99395476],\n", " [ 0.98748874, -0.15744463, 0.00878508]]), 'r': array([-6.54560640e+01, -1.61890211e-01, -7.87285652e+02, 9.22863106e-01,\n", " 1.00575418e+02, -6.18274814e+01]), 'qtf': array([ 3.00091968e-08, 9.62977997e-08, -8.41232527e-09]), 'fvec': array([ 5.90105742e-11, 3.48677531e-10, -1.95541361e-11])}\n" ] } ], "source": [ " def F(X):\n", " # ....\n", " return np.array([f1,f2,f3])\n", "\n", "\n", "from scipy.optimize import fsolve\n", "\n", "X0 = np.array([1.0, 2000.0, 1.0])\n", "\n", "Xsol, infodict, ier, mesg = fsolve(F, X0, full_output=True)\n", "\n", "print(infodict)" ] }, { "cell_type": "code", "execution_count": null, "id": "d587d448-8b7c-4bf3-b020-5e243ab73c45", "metadata": {}, "outputs": [], "source": [ "rho0, rhoM, alpha = Xsol\n", "print('rho0 = ', np.round(rho0,2) )\n", "print('rhoM = ', np.round(rhoM,2) )\n", "print('alpha = ', np.round(alpha,2) )" ] }, { "cell_type": "code", "execution_count": null, "id": "b491b1d9-dd6b-4562-8455-c4faedf3eb75", "metadata": {}, "outputs": [], "source": [ "?fsolve" ] }, { "cell_type": "code", "execution_count": null, "id": "379e1ea8-2b07-41d9-8a54-5120d001baf1", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:base] *", "language": "python", "name": "conda-base-py" }, "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" }, "toc-autonumbering": false, "toc-showcode": true, "toc-showmarkdowntxt": false }, "nbformat": 4, "nbformat_minor": 5 }