{ "cells": [ { "cell_type": "markdown", "id": "7c8c115e-dc7b-41b3-907a-700b3503fc61", "metadata": {}, "source": [ "---\n", "## MT94 - P2026\n", "### Chapitre *Problèmes non linéaires 1* (F. De Vuyst)\n", "### Cas vectoriel, méthode de Newton-Raphson et applications\n", "### TP n° 2 - 26 mars 2026\n", "---" ] }, { "cell_type": "markdown", "id": "d23a28f5-93c4-4bf3-a303-71e1cdf8caed", "metadata": {}, "source": [ "### Ex 1 . - La fonction ```fsolve()``` de ```Scilab```\n", "La fonction prédéfinie ```fsolve()``` \n", "\n", "```\n", "[x [,v [,info]]] = fsolve(x0, fct [,fjac] [,tol])\n", "```\n", "\n", "de ```Scilab``` permet de résoudre un système d'équations algébriques non linéaires\n", "écrit sous forme condensée\n", "\n", "$$\n", "\\mathbf{F}(\\mathbf{x}) = \\mathbf{0}.\n", "$$" ] }, { "cell_type": "markdown", "id": "b4a165a5-7edd-4e20-8c14-a51b82f36a68", "metadata": {}, "source": [ "Dans cet exercice, considérez l'application $F:\\mathbb{R}^2\\to \\mathbb{R}^2$ définie par\n", "\n", "$$\n", "F(x_1,x_2) = \\begin{pmatrix} x_1\\cos(x_2) -4\\\\ x_1x_2-x_2 -5 \\end{pmatrix}.\n", "$$\n", "\n", "Utilisez ```fsolve(F, x0)``` pour trouver une racine $\\mathbf{x}^\\star$ de $\\mathbf{F}$, en partant de la donnée initiale $\\mathbf{x}=(1,1)^T$." ] }, { "cell_type": "code", "execution_count": null, "id": "9797ce13-5c54-49ce-bb78-02fd050a6953", "metadata": { "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "e971acbf-213f-49d9-a934-8dc77b717e4d", "metadata": { "tags": [] }, "source": [ "### Ex 2. - Méthode Newton-Raphson\n", "\n", "Ecrire une fonction `Scilab`\n", "\n", "```\n", "function [xout, nout, Fout] = NewtonRaphson(x0, foncjac, nmax, tol)\n", "```\n", "\n", "qui résout $\\mathbf{F}(\\mathbf{x})=\\mathbf{0}$ en utilisant la méthode de Newton-Raphson \n", "\n", "$$\n", "\\mathbf{x}_{n+1} = \\mathbf{x}_n - [J(\\mathbf{x}_n)]^{-1}\\, \\mathbf{F}(\\mathbf{x}_n)\n", "$$\n", "\n", "avec `x0` comme donnée initiale (vecteur), la fonction ```foncjac()```\n", "\n", "```\n", "function [F, J] = foncjac(x)\n", "``` \n", "\n", "qui retourne à la fois $F(\\mathbf{x})$ et $J(\\mathbf{x})$ la matrice jacobienne de\n", "$\\mathbf{F}$ au point $\\mathbf{x}$, `nmax` est le nombre maximum d'itérations (en cas de non-convergence), `tol` est la tolérance pour le critère d'arrêt :\n", "\n", "$$\n", "\\|\\mathbf{F}(\\mathbf{x}_n)\\| \\leq \\text{tol}.\n", "$$\n", "\n", "La fonction```NewtonRaphson()``` retourne l'approximation de la racine $\\mathbf{x}_{out}$ , l'itération $n_{out}$\n", "pour laquelle le critère d'arrêt est satisfait, et $F_{out}=\\mathbf{F}(\\mathbf{x}_{out})$." ] }, { "cell_type": "code", "execution_count": null, "id": "ac627cd6-9fe7-4e63-a5b7-ffae92f03876", "metadata": { "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "25e5ddbf-e125-4f15-8173-8fc19c821ab3", "metadata": {}, "source": [ "Vérification : écrire une fonction```foncjac()``` et tester votre fonction ```NewtonRaphson()``` pour l'application de $\\mathbb{R}^2$\n", "dans $\\mathbb{R}^2$ suivante :\n", "\n", "$$\n", "F(\\mathbf{x}) = \\begin{pmatrix} x_1^2 - 2 \\\\ x_1^4 + x_2^2 - 5 \\end{pmatrix} \n", "$$\n", "\n", "(racines évidentes $(\\pm\\sqrt{2},\\pm 1)^T$ ), prenant $\\mathbf{x}^0=(4,9)$, $n_{max}=20$, $tol=10^{-14}$\n" ] }, { "cell_type": "code", "execution_count": null, "id": "b46104d6-a672-430f-9ffa-50d8da16315a", "metadata": { "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "2947ff4d-9e76-4d1d-9d99-9d5656b77461", "metadata": {}, "source": [ "Utiliser à nouveau `NewtonRaphson()` pour l'application et la donnée initiale données en exercice 1." ] }, { "cell_type": "code", "execution_count": null, "id": "721a4227-df92-47b9-81ff-66b2fbaf6c85", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "9d22f581-4390-4712-bdc4-3a7c89cccbda", "metadata": {}, "source": [ "### Ex 3. - Application : bras articulé à 3 sections\n", "\n", "On considère ici un bras articulé à trois sections de longueurs respectives $\\ell_1$, $\\ell_2$ and $\\ell_3$. \n", "Le bras articulé est fixé à l'origine à l'aide d'une rotule.\n", "L'autre extrémité est libre, de position représentée par le point $M(x,y)$. \n", "Il y trois angles $\\theta_1, \\theta_2,\\theta_3$ entre l'axe des $x$ et les sections. \n", "\n", "Objectif : on souhaite que le point $M(x,y)$ atteigne la position cible $A(x_A,y_A)$. \n", "Les deux contraintes à satisfaire sont\n", "\n", "\\begin{align*}\n", "& \\ell_1 \\cos \\theta_1 + \\ell_2 \\cos\\theta_2 + \\ell_3\\cos\\theta_3 = x_A, \\\\\n", "& \\ell_1 \\sin \\theta_1 + \\ell_2 \\sin\\theta_2 + \\ell_3\\sin\\theta_3 = y_A.\n", "\\end{align*}\n", "\n", "Comme il y a deux équations pour trois inconnues (les angles), le système est\n", "sous-déterminé. On peut ajouter une condition supplémentaire (préférence) \n", "sur les angles. Soit\n", "\n", "$$\n", "\\theta_A = \\arctan (y_A/x_A)\n", "$$\n", "\n", "l'angle formé entre l'axes des $x$ et le segment $OA$. On demande alors que les angles $\\theta_1,\\theta_2,\\theta_3$ satisfassent la contrainte\n", "supplémentaire d'angle moyen pondéré par les longueurs\n", "\n", "$$\n", "\\frac{\\ell_1 \\theta_1+\\ell_2\\theta_2+\\ell_3\\theta_3}{\\ell_1+\\ell_2+\\ell_3} = \\theta_A.\n", "$$\n", "\n", "Ecrire le système algébrique sous la forme condensée $\\mathbf{F}(\\mathbf{X})=\\mathbf{0}$. \n", "\n", "Résoudre ensuite numériquement le problème en utilisant la méthode de Newton-Raphson.\n", "\n", "Utiliser `plot()` pour tracer le bras articulé résultant.\n", "On affichera aussi les valeurs des angles trouvées.\n", "\n", "Paramètres : $A=(6,4)$, $(\\ell_1,\\ell_2,\\ell_3) = (4,3,2)$." ] }, { "cell_type": "code", "execution_count": null, "id": "7d90092c-7717-403e-9394-051e8f2394cf", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3cc8bd48-49e4-44e9-9b33-835448556721", "metadata": {}, "source": [ "Résoudre le problème pour la cible $A=(4,6)$." ] }, { "cell_type": "code", "execution_count": null, "id": "59d551d8-d6aa-4831-9fad-42ec71fbc9a0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "9fd388f4-1965-4ff0-b41e-f1f515ca2098", "metadata": {}, "source": [ "'Résoudre' numériquement le problème pour la cible $A=(9,9)$. Que se passe-t-il ?" ] }, { "cell_type": "code", "execution_count": null, "id": "7d1edb38-5091-4246-bb40-680541f3f3dc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a6d48fec-28ea-4d4b-8fab-2e8fecf4e161", "metadata": {}, "source": [ "### Ex 4. - Application \n", "#### Recherche d'une paire (valeur propre - vecteur propre) pour une matrice symétrique $A$.\n", "\n", "La recherche de couples valeur propre-vecteur propre $(\\mathbf{x},\\lambda)$ solutions de \n", "\n", "$$\n", "A\\mathbf{x}=\\lambda\\, \\mathbf{x}\n", "$$ \n", "\n", "peut être réalisée par la résolution d'un système algébrique non linéaire d'inconnues $(\\mathbf{x},\\lambda)^T$. \n", "\n", "En cherchant un vecteur unitaire $\\mathbf{x}$ ($\\|\\mathbf{x}\\|=1$), on cherche \n", "$\\mathbf{X}=(\\mathbf{x},\\lambda)^T$ tel que\n", "\n", "$$\n", "\\left\\{\\begin{array}{l}\n", "A\\mathbf{x} - \\lambda\\, \\mathbf{x} = 0, \\\\\n", "\\|\\mathbf{x}\\|^2 - 1 = 0.\n", "\\end{array}\\right.\n", "$$ \n", "\n", "On a à résoudre $\\mathbf{F}(\\mathbf{X})=\\mathbf{0}$ avec\n", "\n", "$$\n", "\\mathbf{F}(\\mathbf{X}) \n", "= \\begin{pmatrix} \n", " A\\mathbf{x} - \\lambda\\, \\mathbf{x} \\\\ \n", " \\|\\mathbf{x}\\|^2 - 1 \n", " \\end{pmatrix}.\n", "$$\n", "\n", "On se limite ici au cas $A$ symétrique. Le problème a-t-il une solution à coefficients réels ? La racine est-elle unique ?\n", "\n", "Déterminer sur papier la matrice jacobienne $J(\\mathbf{x})$ de $\\mathbf{F}$ \n", "au point $\\mathbf{x}$. Ecrire ensuite une fonction `Scilab` \n", "\n", "```\n", "function [y, J] = Fvp(X)\n", "```\n", "\n", "qui calcule $\\mathbf{y}=\\mathbf{F}(\\mathbf{X})$ ainsi que la matrice jacobienne $J(\\mathbf{X})$ de $\\mathbf{F}$. \n" ] }, { "cell_type": "code", "execution_count": null, "id": "565135c2-8057-4e42-873e-38bad8ab6ca1", "metadata": { "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "8f008c0f-77a3-40a6-af36-aa55952be978", "metadata": {}, "source": [ "Pour l'application numérique, on prendra la matrice (symétrique) :\n", "\n", "$$\n", "A = \\begin{pmatrix}\n", "2 & -1 & 0 \\\\\n", "-1 & 2 & -1 \\\\\n", "0 & -1 & 2\n", "\\end{pmatrix}.\n", "$$\n", "\n", "Utilisez la méthode de Newton-Raphson précédente avec les paramètres d'entrée suivants :\n", "$X^0=((1,1,1), 1)^T$, $n_{max}=30$, $\\text{tol}=10^{-15}$.\n", "\n", "Vérifiez que vous avez bien trouvé une paire (valeur propre-vecteur propre) de\n", "$A$ en affichant le résultat de \n", "\n", "```\n", "A*xout - lambda_out*xout\n", "```" ] }, { "cell_type": "code", "execution_count": null, "id": "f96d51f5-bd7b-4e46-a4bf-97637d40a1d3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "4a77d7c5-d749-4e7d-a2d3-ea37888d76e0", "metadata": {}, "source": [ "### Ex 5.- Caractérisation des paramètres mécaniques (problème inverse)\n", "\n", "Un système masse-ressort est fixé verticalement à un plafond. L'objet pesant fixé au ressort est de masse $m$. Sous l'influence de la gravité $g$, le ressort subit un déplacement de longueur $u$. Si on appelle $F_{el}$ la force de rappel élastique, l'équilibre statique se traduit par l'équation\n", "\n", "$$\n", "F_{el} + mg = 0.\n", "$$\n", "\n", "Le matériau a un comportement non linéaire, de loi générale\n", "\n", "$$\n", "F_{el} = - ku - \\alpha u^\\beta\n", "$$\n", "\n", "avec $k,\\alpha,\\beta>0$ les paramètres de la loi mécanique. Comment déterminer expérimentalement $k$, $\\alpha$ et $\\beta$ ? (indication : on a le droit d'utiliser plusieurs masses). " ] }, { "cell_type": "markdown", "id": "bf096f64-0877-4e08-875a-0054e85d3f7a", "metadata": {}, "source": [ "On effectue expérimentalement 3 mesures de déplacements du ressort avec 3 masses différentes (voir tableau ci-dessous). La gravité $g$ est $9.81$ $m.s^{-2}$. Déterminer les \n", "paramètres $k$, $\\alpha$ et $\\beta$.\n", "\n", "| Masse m | Déplacement u |\n", "|:-------- |:--------:|\n", "| 0.1 | 0.096 |\n", "| 0.2 | 0.123 |\n", "| 0.3 | 0.141 |" ] }, { "cell_type": "code", "execution_count": 45, "id": "83b3076e-0028-400a-9e0a-519d6b59be2e", "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true, "source_hidden": true } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " u = \n", " 0.1409799" ] } ], "source": [ "function [res] = static(u)\n", " m = 0.3 \n", " g = 9.81\n", "\n", " k = 1.0\n", " alpha = 1000.0\n", " beta = 3.0\n", "\n", " res = k * u + alpha * u^beta - m*g\n", "endfunction\n", "\n", "u = fsolve(0.1, static)\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "4c9991f5-ad80-4631-bc0a-189a0e8c1e33", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Scilab", "language": "scilab", "name": "scilab" }, "language_info": { "file_extension": ".sci", "help_links": [ { "text": "MetaKernel Magics", "url": "https://metakernel.readthedocs.io/en/latest/source/README.html" } ], "mimetype": "text/x-scilab", "name": "scilab", "version": "0.10.2" }, "toc-autonumbering": false, "toc-showcode": true, "toc-showmarkdowntxt": false }, "nbformat": 4, "nbformat_minor": 5 }