{ "cells": [ { "cell_type": "markdown", "id": "7c8c115e-dc7b-41b3-907a-700b3503fc61", "metadata": {}, "source": [ "## MT09 - TP3 - Automne 2025\n", "### Factorisation de Choleski & méthodes 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 $k tol) and (k <= kmax):\n", " Fk, Jk = foncjac(xk)\n", " res = la.norm(Fk)\n", " xk -= la.solve(Jk, Fk)\n", " k += 1\n", " xout = xk\n", " kout = k\n", " Fout = Fk\n", " return xout, kout, Fout" ] }, { "cell_type": "markdown", "id": "25e5ddbf-e125-4f15-8173-8fc19c821ab3", "metadata": {}, "source": [ "Vérification : écrire la fonction ```foncjac()``` et tester la fonction ```newtonRaphson()``` pour la fonction à 2 variables\n", "$x=(x_1,x_2)$ :\n", "\n", "$$\n", "f(x) = \\begin{pmatrix} x_1^2 - 2 \\\\ x_1^4 + x_2^2 - 5 \\end{pmatrix} \n", "$$\n", "\n", "en prenant $x^0=(4,2)$, $k_{max}=16$, $tol=10^{-15}$." ] }, { "cell_type": "code", "execution_count": 15, "id": "b46104d6-a672-430f-9ffa-50d8da16315a", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "xout = [1.41421356 1. ] \n", "kout = 12 \n", "Résidu = [-4.4408921e-16 0.0000000e+00]\n", "Erreur = 0.0 4.440892098500626e-16\n" ] } ], "source": [ "# Exemple\n", "def foncjac(x):\n", " F = np.array([x[0]**2 - 2.0, x[0]**4 + x[1]**2 - 5.0], dtype=np.float64)\n", " J = np.array([ [2*x[0], 0], [4*x[0]**3, 2*x[1]] ])\n", " return F, J\n", "x0 = np.array([4, 2], dtype=np.float64)\n", "kmax = 16\n", "tol = 1e-15\n", "\n", "xout, kout, Fout = newtonRaphson(x0, foncjac, kmax, tol)\n", "print('xout = ', xout, \"\\nkout = \", kout, \"\\nRésidu = \", Fout)\n", "# Verif\n", "print('Erreur =', np.sqrt(2) - xout[0], 1.0 - xout[1])" ] }, { "cell_type": "markdown", "id": "3eff893a-0cd2-45df-808b-d68e578eae56", "metadata": {}, "source": [ "### 3. Problème inverse, identification paramétrique, solutions de systèmes d'équations algébriques, \n", "\n", "Un modèle simplifié de croissance cellulaire avec saturation donne l'évolution de la densité de cellules $\\rho(t)$ au cours du temps $t$ :\n", "$$\n", "\\rho(t) = \\rho_M\\, \\frac{e^{\\alpha t}}{\\frac{\\rho_M}{\\rho_0}-1 + e^{\\alpha t}},\n", "\\qquad t>0,\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_M,\\,\\alpha)=(3, 1000, 1.2)$." ] }, { "cell_type": "code", "execution_count": 26, "id": "6e475dde-fca2-4864-8c1a-29e685a2842b", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def rho(t):\n", " rho0 = 3\n", " rhoM = 1000\n", " alpha = 1.2\n", " y = rhoM * np.exp(alpha*t)/(rhoM/rho0 - 1.0 + np.exp(alpha*t))\n", " return y\n", "\n", "t = np.linspace(0, 10, 1000)\n", "import matplotlib.pyplot as plt\n", "plt.plot(t, rho(t), '.-'); plt.grid()" ] }, { "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 à trois 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": 30, "id": "a1825b00-e204-4dce-88ff-4efbc8e1f6d7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'nfev': 17, 'fjac': array([[1., 0., 0.],\n", " [0., 1., 0.],\n", " [0., 0., 1.]]), 'r': array([-0., 0., 0., -0., 0., 0.]), 'qtf': array([ 1.71812045e-04, 1.02358534e-02, -3.59713507e-05]), 'fvec': array([ 1.71812045e-04, 1.02358534e-02, -3.59713507e-05])}\n" ] } ], "source": [ " def F(X):\n", " rho0, rhoM, alpha = X\n", " t1 = 2.0\n", " t2 = 4.0\n", " t3 = 8.0\n", " rho1 = 32.104\n", " rho2 = 267.726\n", " rho3 = 977.987\n", " f1 = rhoM * np.exp(alpha*t1)/(rhoM/rho0 - 1.0 + np.exp(alpha*t1)) - rho1\n", " f2 = rhoM * np.exp(alpha*t2)/(rhoM/rho0 - 1.0 + np.exp(alpha*t2)) - rho2\n", " f3 = rhoM * np.exp(alpha*t3)/(rhoM/rho0 - 1.0 + np.exp(alpha*t3)) - rho3\n", " return np.array([f1,f2,f3])\n", "\n", "from scipy.optimize import fsolve\n", "X0 = np.array([1.0, 2000.0, 1.0])\n", "Xsol, infodict, ier, mesg = fsolve(F, X0, full_output=True)\n", "print(infodict)" ] }, { "cell_type": "code", "execution_count": 31, "id": "d587d448-8b7c-4bf3-b020-5e243ab73c45", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "rho0 = 1.0\n", "rhoM = 2000.0\n", "alpha = 1.0\n" ] } ], "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": 32, "id": "b491b1d9-dd6b-4562-8455-c4faedf3eb75", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[1;31mSignature:\u001b[0m\n", "\u001b[0mfsolve\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mx0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mfprime\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mfull_output\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mcol_deriv\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mxtol\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1.49012e-08\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mmaxfev\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mband\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mepsfcn\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mfactor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m \u001b[0mdiag\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\n", "\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mDocstring:\u001b[0m\n", "Find the roots of a function.\n", "\n", "Return the roots of the (non-linear) equations defined by\n", "``func(x) = 0`` given a starting estimate.\n", "\n", "Parameters\n", "----------\n", "func : callable ``f(x, *args)``\n", " A function that takes at least one (possibly vector) argument,\n", " and returns a value of the same length.\n", "x0 : ndarray\n", " The starting estimate for the roots of ``func(x) = 0``.\n", "args : tuple, optional\n", " Any extra arguments to `func`.\n", "fprime : callable ``f(x, *args)``, optional\n", " A function to compute the Jacobian of `func` with derivatives\n", " across the rows. By default, the Jacobian will be estimated.\n", "full_output : bool, optional\n", " If True, return optional outputs.\n", "col_deriv : bool, optional\n", " Specify whether the Jacobian function computes derivatives down\n", " the columns (faster, because there is no transpose operation).\n", "xtol : float, optional\n", " The calculation will terminate if the relative error between two\n", " consecutive iterates is at most `xtol`.\n", "maxfev : int, optional\n", " The maximum number of calls to the function. If zero, then\n", " ``100*(N+1)`` is the maximum where N is the number of elements\n", " in `x0`.\n", "band : tuple, optional\n", " If set to a two-sequence containing the number of sub- and\n", " super-diagonals within the band of the Jacobi matrix, the\n", " Jacobi matrix is considered banded (only for ``fprime=None``).\n", "epsfcn : float, optional\n", " A suitable step length for the forward-difference\n", " approximation of the Jacobian (for ``fprime=None``). If\n", " `epsfcn` is less than the machine precision, it is assumed\n", " that the relative errors in the functions are of the order of\n", " the machine precision.\n", "factor : float, optional\n", " A parameter determining the initial step bound\n", " (``factor * || diag * x||``). Should be in the interval\n", " ``(0.1, 100)``.\n", "diag : sequence, optional\n", " N positive entries that serve as a scale factors for the\n", " variables.\n", "\n", "Returns\n", "-------\n", "x : ndarray\n", " The solution (or the result of the last iteration for\n", " an unsuccessful call).\n", "infodict : dict\n", " A dictionary of optional outputs with the keys:\n", "\n", " ``nfev``\n", " number of function calls\n", " ``njev``\n", " number of Jacobian calls\n", " ``fvec``\n", " function evaluated at the output\n", " ``fjac``\n", " the orthogonal matrix, q, produced by the QR\n", " factorization of the final approximate Jacobian\n", " matrix, stored column wise\n", " ``r``\n", " upper triangular matrix produced by QR factorization\n", " of the same matrix\n", " ``qtf``\n", " the vector ``(transpose(q) * fvec)``\n", "\n", "ier : int\n", " An integer flag. Set to 1 if a solution was found, otherwise refer\n", " to `mesg` for more information.\n", "mesg : str\n", " If no solution is found, `mesg` details the cause of failure.\n", "\n", "See Also\n", "--------\n", "root : Interface to root finding algorithms for multivariate\n", " functions. See the ``method='hybr'`` in particular.\n", "\n", "Notes\n", "-----\n", "``fsolve`` is a wrapper around MINPACK's hybrd and hybrj algorithms.\n", "\n", "Examples\n", "--------\n", "Find a solution to the system of equations:\n", "``x0*cos(x1) = 4, x1*x0 - x1 = 5``.\n", "\n", ">>> import numpy as np\n", ">>> from scipy.optimize import fsolve\n", ">>> def func(x):\n", "... return [x[0] * np.cos(x[1]) - 4,\n", "... x[1] * x[0] - x[1] - 5]\n", ">>> root = fsolve(func, [1, 1])\n", ">>> root\n", "array([6.50409711, 0.90841421])\n", ">>> np.isclose(func(root), [0.0, 0.0]) # func(root) should be almost 0.0.\n", "array([ True, True])\n", "\u001b[1;31mFile:\u001b[0m c:\\users\\fdevu\\anaconda3\\lib\\site-packages\\scipy\\optimize\\_minpack_py.py\n", "\u001b[1;31mType:\u001b[0m function" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "?fsolve" ] }, { "cell_type": "code", "execution_count": null, "id": "379e1ea8-2b07-41d9-8a54-5120d001baf1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "25be2c39-04bb-434f-acf5-9f19a1fd2667", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a2a7bb39-f819-42b9-8943-9ffbf19d9837", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a3410b90-d828-466a-85bd-b9969e6b7e6b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "b16126ba-325f-4d7b-9a7f-c2fdfbbc1513", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "721dea6a-6ca7-4bbf-9a53-7e8cf26d367a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a8338d2a-520d-41f1-aae5-7d30a1bf351e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "011e696b-a04c-464f-85df-bb9b7ac9f3d8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9b37420b-f3f7-4875-847b-eac92e09c6a7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "97a2762c-9329-4b97-a1f1-ebc51ce4c221", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "fbb3c484-a4c8-4bdb-a92d-659dd08f03d3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a220949f-ffbb-4169-84f1-1ea8266600d5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ecf8c48c-2dae-441e-9307-8eb2803aff33", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "fceaaea4-5a63-41c2-b3b9-81e728950d57", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "43c19e15-9b80-467d-9db5-597bd01bf3be", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f51d65bb-d65e-4cf9-9f29-6cbb2152dfe8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "18e6f5a5-8b0f-452f-8568-2c19f7972bb7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ba219907-1371-45ec-9b43-33721e415509", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "69b0c562-cf75-457e-b7cd-eff77c110f4e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "bef6a4d7-52d7-4908-97f7-acd8020dbcb8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c98d4db5-d038-4124-91ba-681204f7f607", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c2daf2ec-3b2f-43f3-9f70-38203b8899d0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e897f947-af85-4706-8d11-3e7552a70953", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "28f01ac0-8192-477d-a92e-9da2f9983989", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3dbd890b-58da-433e-9fed-5c6a084415b9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "603d4274-e60f-4b92-9a0b-5ce51b4cee59", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "1381da85-4da8-4124-a4a0-b61919e465c0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6c739373-0a38-4087-bb6a-70b9e773f4d4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "74a26d26-38ac-48a7-bd79-97d219dbe99f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "0803d4bb-8aee-44cb-a244-76577825dbad", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3a0e4220-4574-4ae0-88a9-394d3ffd5077", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "bdbd41c3-d6da-4db4-b79d-05c6d3e5003b", "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 }