{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Calcul symbolique en python\n", "Le but de ce notebook est de montrer comment utiliser la bibliothèque sympy pour faire du calcul symbolique en python.\n", "Les outils mathématiques que nous traiterons avec sympy sont les suivants:\n", "- Représenter des expressions mathématiques symboliques comme les fonctions de plusieurs variables en fonction de symboles, les variables symboliques.\n", "- Dériver, intégrer et simplifier des expressions mathématiques symboliques.\n", "- Représenter graphiquement des fonctions mathématiques symboliques.\n", "- Faire du calcul matriciel symbolique, en particulier des opérations de base sur les matrices pouvant être paramétrées par des symboles. On pourra calculer des noyaux, des images, des déterminants, des inverses, des valeurs propres, des vecteurs propres, etc.\n", "\n", "Les outils visités ici sont une petite partie de ce que sympy peut faire. Pour plus d'informations, vous pouvez consulter la documentation officielle de sympy: https://docs.sympy.org/latest/index.html\n", "## Symboles et expressions symboliques\n", "Pour commencer, nous devons importer la bibliothèque sympy et déclarer les symboles que nous allons utiliser. Nous pouvons préciser si les symboles sont réels, complexes, entiers, etc.\n", "La fonction integrate de sympy permet de calculer des intégrales symboliques." ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2*a**3/3 + 2*a/3 + 4/3\n" ] }, { "data": { "text/latex": [ "$\\displaystyle \\frac{2 a^{3}}{3} + \\frac{2 a}{3} + \\frac{4}{3}$" ], "text/plain": [ "2*a**3/3 + 2*a/3 + 4/3" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\\frac{2 a^{3}}{3} + \\frac{2 a}{3} + \\frac{4}{3}\n" ] } ], "source": [ "import sympy as sy\n", "a,x,y=sy.symbols('a x y',real=True)\n", "r=sy.sqrt(x**2+y**2) # r est ici une expression symbolique en fonction de x et y\n", "f=r**2\n", "g=sy.integrate(f,(x,-1,a),(y,-1,1))\n", "print(g)\n", "display(g)# affichage de g esthétique pouvant être copié-collé dans un document LaTeX\n", "latex_g=sy.latex(g)# conversion de g en code LaTeX\n", "print(latex_g)# affichage de g en code LaTeX" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La fonction diff de sympy permet de calculer des dérivées symboliques, on peut préciser combien de fois on veut dériver une expression en fonction d'une variable donnée." ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2*a**2 + 2/3\n", "4*a\n" ] } ], "source": [ "gprime=sy.diff(g,a)\n", "print(gprime)\n", "gsec=sy.diff(g,a,2)\n", "print(gsec)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plutôt qu'utiliser la fonction diff, on peut aussi utiliser la méthode diff de l'objet symbolique et obtenir le même résultat." ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 4$" ], "text/plain": [ "4" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gprime=g.diff(a)\n", "gtierc=gprime.diff(a,2)\n", "display(gtierc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Exercice 1: Calculer la dérivée de la fonction $f(x) = x^3 + 2x^2 + 3x + 4$ par rapport à $x$.\n", "- Exercice 2: Calculer l'intégrale de la fonction $f(x) = x^3 + 2x^2 + 3x + 4$ par rapport à $x$.\n", "- Exercice 3: Calculer la dérivée seconde de la fonction $f(x) = \\sqrt{5\\cos(x)}$ par rapport à $x$.\n", "- Exercice 4: (Simplification) Simplifier l'expression $2x + x - 3x + 4 - 5$ à l'aide de la fonction simplify de sympy. Quand une expression proposée par un calcul symbolique semble compliquée, il est souvent utile de la simplifier pour mieux comprendre sa structure. Parfois le résultat sera décevant, mais parfois il sera surprenant. Il existe d'autres fonctions de simplification dans sympy, comme trigsimp, powsimp, etc. On peut également développer une expression avec la fonction expand et factoriser une expression avec la fonction factor. Tester ces fonctions sur des polynômes." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Résolution d'équations\n", "La fonction solve de sympy permet de résoudre des équations symboliques. On peut résoudre des équations polynomiales, des équations trigonométriques, des équations exponentielles, etc.\n", "Dans les exemples ci-dessous, nous résolvons des équations polynomiales, l'intersection d'une parabole et d'une droite." ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(1 - sqrt(3), 1 - sqrt(3)/2), (1 + sqrt(3), sqrt(3)/2 + 1)]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x,y=sy.symbols('x y',real=True)\n", "parabol=sy.Eq(x**2,4*y)\n", "droite=sy.Eq(x,2*y-1)\n", "sol=sy.solve([parabol,droite],(x,y))\n", "display(sol)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Représentation graphique de fonctions symboliques\n", "La fonction plot de sympy permet de représenter graphiquement des fonctions symboliques. On peut préciser l'intervalle sur lequel on veut représenter la fonction. On ne doit pas confondre la fonction plot de sympy avec la fonction plot de matplotlib qui permet de représenter des données numériques. On peut représenter plusieurs fonctions sur le même graphique.\n" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "f=sy.cos(x**2)\n", "sy.plot(f,(x,-1,3));\n", "sy.plot(f,sy.sin(x**2),(x,-1,3));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour représenter des graphes d'une fonction implicite, on peut utiliser la fonction plot_implicit de sympy. On doit préciser l'équation implicite de la fonction à représenter." ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x,y=sy.symbols('x y',real=True)\n", "circle = sy.Eq(x**2 + y**2, 4)\n", "\n", "sy.plot_implicit(circle);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On pourra fusionner deux graphes en un seul comme suit." ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "p1 = sy.plot_implicit(sy.Eq(x**2 + y**4, 4), show=False)\n", "p2 = sy.plot_implicit(sy.Eq(y**2, x + 1), show=False)\n", "\n", "# Fusionner les graphiques\n", "p1.extend(p2)\n", "p1.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour représenter des courbes paramétriques, on peut utiliser la fonction plot_parametric de sympy. On doit préciser les expressions des coordonnées x et y en fonction d'un paramètre t." ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABBh0lEQVR4nO3dd3hUZdrH8e+k94T0SkIKSQgklNA70lEUEQUbisqiuOKKu+sW33XddWUFV0VUFkXsYkNRDL2EIhBCkxIglfTe62RmzvsHkgUhkEAyZ5Lcn+vikmTOzHNzPPDLc85z7qNRFAUhhBDC1JipXYAQQghxNRJQQgghTJIElBBCCJMkASWEEMIkSUAJIYQwSRbXeV2W+AnRCpMnT2bTpk1qlyFER6Jp7gWZQQnRhoqLi9UuQYhOQwJKCCGESZKAEkIIYZIkoIQQQpgkCSghhBAmSQJKCCGESZKAEkIIYZIkoIQQQpgkCSghhBAmSQJKCCGESbpeqyMhhFCdVmegoq6RmgYd9To9DY0GdAYDOv2FbmwajQYzDViYm2FraX7hl5UZzrZWWFnIz+EdlQSUEEI1DY16civqyS6rJbusjsr6RlIKqimsaqC4uoHyWi2lNY3UNeoBcLK1oLJOB8DAoG4cyihr+iwzDRgu6R7ax8+ZEzkVONpY4GpvRU8vRyzNNfi52OLnYkuwhwNBbvb4d7PFzKzZdnBCRRJQQoh2V9Og42xBFRnFNZzKrSStqJrUohq0egP5FfVN2w3p4UpGSS0ejtZ4O9kQ4++CvbU5zraWONla4mBtgY2lOTaWZthYmAMXOlorChgUBb1BoVarp65Rj95goKCygdIaLaU1Wsw0Gn7OKWd7UiENOgOR3o4k5VdhY2lGqKcDI8M88HK0pm/3bkT6OGL9y+cL9UhACSHaVH2jnlO5FRzNLOdYVjnV9Tp2nSsCwNXeilqtjh7uDvTxdybY3Z7urnZ0d7XD39UOL0drLMzb95ScoigUV2vJLKklubCK5MJqkgurOZReSuL5CzMyK3MzpkX74Odiy7BQNwYEdpPAUoFGUa75RA153IYQrRAbG0tiYqLaZRhVVmktx7LKOZhewrGscs7kVaH75Vybr7MNE6O8cbW3IsLbkQhvR/xcbDFv5xC6EYqikFdRz/GsC8F6KreC/Wml6A0Kno7W9PFzYmKUN+MjvXBzsFa73M6k2fOrElBCtKGuEFB5FXXsTy258CuthOyyOgYFdeN0XhXR/s70DXBp+uXpZKN2uTelqr6Rg2ml/JxdzrqjOWSX1WGmgYFBrsyK9WdchBeu9lZql9nRSUAJYQydMaDqG/XsTyth55lCzuZXcTC9FABnW0uGBLsyNNiNIcFu9PRy7NSLDRRF4XReJZtP5rMtqZC0omr0isK4CE/uHxLIsBB3zDvxn78dSUAJYQydJaByyuvYcaaQnWcK+Sm1mPpGAzaWZszs708Pd3uGhrgR6e3UqQPpepLyKvnmcDabTuVTXNWAh5M1DwwJ5O7YAFzsZFbVChJQQhhDRw0oRVFIyqsi7kQeP6UWcySzHIAAV1vGhXsyNsKTIcFu2FjKQoFf0+r0bD1dyIf7M0hIL2VEqBuhno48NioYPxdbtcvrCCSghDCGjhRQF09ZxZ3II+5EPunFNZhp4M5+/oR7OzI2wpMQD3s0mq47S2qtM/mVfLAvg68PZ2NhrmH2wAAeHRmMfzc7tUszZRJQQhiDqQeUoiicyq3kxxN5bDyRR0ZJLWYaGBrixtQ+PkyK8sZdVqjdtJzyOr5IyGRlfBoA9w3pzsIxIbg7duxFI+1EAkoIYzDVgCqsqufbIzl8fzyXtKJqtHqFYb+E0sResmy6veSW1/HmjmRSCqs5k1fFU7eEMXdYkLRfupwElBDGYEoBpdMb2HW2iC8Ss9hxphC9QSE2sBuzBwXI8mgjSy6o4l9xSew8W8TEXl7MHRbE8FB3tcsyFRJQQhiDKQRUWlE1XyZm882RbIqqGnB3sGbmAD9mDQgg1NNB1dq6ul1nCnlt2zmOZ1dwZ38//jqtl/ygcI2AklZHQnQCtVodP/6cx5eJWRzKKMPcTMPYcA/ujg1gbIQnlibYuaErGhPhyZAQN1bsSGFlfCplNVruHxLILZFeapdmkmQGJUQbMuYMSlEUjmaV8+WhLH44nkuNVk+wuz2zYgOY2d+vw3dx6OxO51bwzJfHOZNfxYNDA/nz1MiuuoxfTvEJYQzGCKiiqnq+O5rLl4lZJBdWY2tpzrRoH+4ZGEBsYDdZFt6BNOj0vLLpLKv3ptPTy4Hlc/oR4e2kdlnGJgElhDG0Z0CdK6jivT1pZJfV8VNqCf26u3BPbADTon1wtLFslzGFccSfK2Lxl8epbmjk5Tv7MKOfv9olGZMElBDG0NYBpSgK+1NLWLUnjV1ni7CxNOOegd25b3B3eno5ttk4Qn3F1Q28uuUsnydk8dCwIP46LbLdHz1iImSRhBAdSaPeQNyJPFbtTuNUbiXuDlYsntCT+4cE0k1WfXVK7g7W/POOPthZWbB6bzrpxTW8eW8/nLrw7FhmUEK0oZudQVXVN/LFoSze35tObkU9IR72PDYymDv6+XXVC+hd0ucJmTz/3Ul6uNuzeu5Aurt16lZJcopPCGO40YDKLa/jg58y+PxgJlUNOoYEuzJ/VDBjenp26Y7hXdlPqcU8/skRzM00fPDQQKIDXNQuqb1IQAlhDK0NqFO5Fby3J50fjueiAFP7+PDYyB5E+7u0W42i40gvruHluCT2phTz/kMDGRLspnZJ7UECSghjaElAKYrC7uRi3t2dxt6UYuytzLlnYHceHh5EgGunPpUjbkBhZT33vneQ7LJaVs8d2BlbJElACWEM1wqoBp2e74/l8t6edM4WVOHlZM3Dw3swZ1B3nG277oVwcX1FVQ3c/95BMkpqWPVgLKN7eqhdUluSgBLCGK4WUOU1Wj47lMkH+zIorGogwtuRx0YGc1uMr3S1Fi1WUt3A/asTSC2s5r8PDGBshKfaJbWVZgNK/naILmnevHl4enrSu3fvq76uKApPPfUUoaGhREdHc+TIkVaPUVHbyKtbzvLYx4m8suks4d6OfPzIIDYuGsnMAf4STqJV3Bys+fyxwfT0duDdPWkcSCtRu6R2J39DRJf00EMPsWnTpmZf37hxI8nJySQnJ7Nq1Soef/zxFn92ZX0jr287x4h/7+DNHSm4O1gT99QIPn5kMCPDPKQVkbhhLnZWfPjwIAqrGpj/USLJBVVql9SuJKBElzRq1ChcXV2bfX39+vU8+OCDaDQahgwZQnl5OXl5edf8zKr6RgqrGhixZAevb0tmWKgbGxeN5J37B9DL17mt/wiii3JzsGbNQwOxtjTnoTWHKKysV7ukdiMBJcRV5OTkEBAQ0PS1v78/OTk5V912xcp36TXzaaL//B0FlfUM6uHKht+O4L8PxBLp0+UafwojCHC14/25Aymr1TLvw0PUNOjULqldSEAJcRVXWzz061NzdVo9q3an8n5RELVhExjTJ5BQDwfemzuQ3n4yYxLtq4+/M2/d25+kvCoWfnYEnd6gdkltTgJKiKvw9/cnKyur6evs7Gx8fX0BqG/U896eNEa+spN/xZ0hyteJdU8MY83Dg7C1knZEwnjGRnjyj9t7sz+1hLd3pqpdTpuTZrFCXMX06dNZsWIFs2fP5uDBgzg7O9PN3ZMP9qXz9q5UCqsaGB7qxsrx/YkNav5alhDt7d7B3ckpr+U/287Rw8Oe22J81S6pzUhAiS5pzpw57Nq1i+LiYvz9/fn73/9OY2MjAAsWLGDq1KnExcURGhqKrYMjc/68nDFLd5H/yzWm5XP6dda2M6IDenp8T/anlvCndSfo7edMD3d7tUtqE3KjrhDN0P3yyIt/bzpLTnkdsYHdeGZCT4aGuDW7VNyYj3wX4lK55XVMXb4HH2dbvn1iWEfqfi836grRUoqisONMAVOX7+HpL4413WD71YKhDAt1l/uYhEnydbHltbv7kpRXyYsbTqtdTpuQU3xCXOLn7HL+FZfEgbRSerjb8/Z9/ZkU5S2hJDqEsRGeLBgdwsr4VAb3cOX2vn5ql3RTJKCEALJKa1m6+SzfH8/Fzd6KF2+PYs6g7lh2jUdui05k8cSepBRWsWZfOoN6uOLjbKt2STdMrkGJLq28VsubO1L4eP95zMzgsZHBzB8VjOMNPmZbrkEJU5BZUsvE1+MZFuLO6rmxpn4GoNniZAYluqT6Rj0f/pTBWztTqG7QMWtAAL+b0BNvZxu1SxPipnV3s+PZieH888ckvj+e22FP9UlAiS7FYFBYfzyHZZvPkVNex9hwD56bEkm4t6PapQnRph4e3oMfT+TxwvenGB7qjruDtdoltZqcYBddxt7kYm5bsZfffXGcbvaWfPboYNY8PEjCSXRK5mYaXpkZTU2Dnhe+P6V2OTdEZlCi00vKq2TJxjPEnyvCz8WWN2b35bZoX8zMTPq8vBA3LczLkd+OC2X5jmT2JhcxIqxjPYlXAkp0WnkVdby65RzfHMnGycaSv06L5IGhgVhbdJgbGIW4aQvGhBCfXMQLP5xm06KRWHSglakSUKLTqaxvZOWuVFbvTUdRLqzMWzgmFGe7G1uZJ0RHZmluxiPDe/D4p0dYdzSHu2MDrv8mEyEBJToNrc7AZwfPs3xHCqU1Wu7o68viieEEuNqpXZoQqprc25tof2fe2JbM7X19O8xZBAko0eEpisKW0wWsO5zN5tMFDAtx489TI+WZTEL8QqPR8IdJEdy/+iCfHshk3ogeapfUIhJQokM7m1/FixtOsS+lhP7dXXj/oVjGhnua+o2JQhjdiDB3hoW4sWJnCncPDMDB2vT/+e84V8uEuERZjZbnvzvJlDd2czKnkr9Pj+LL3wxlXISXhJMQzfj9pHBKa7Ss3pOudiktYvoRKsQlGvUGPjlwnte3JVPdoOOBIYE8Pb4n3eyt1C5NCJPXr3s3JkV58e6eNB4YGoirif+9kRmU6DDizxUx5Y09/P2H00T7O7Nx0Uj+fntvCSchWuHZieHUanW8vTNF7VKuS2ZQwuSlFVXz0o9JbD9TSJCbHe8+GMv4SLnOJMSNCPNyZEY/fz46cJ55I3rg62K63c5lBiVMVmV9Iy/9eJpJr+/mYHopf5oSwebfjWJCL7nOJMTNeHp8GCiwfHuy2qVck8yghMnRGxS+TMxi2eazlNZquXtAAM9OCsfDseM1uxTCFAW42nHv4O58tD+Dx0YFE+LhoHZJVyUzKGFSDqaVcNube/nTuhMEe9jzw5Mj+Pdd0RJOQrSxJ8eFYmNpzpp9pruiT2ZQwiRkldby8sYk4k7k4+tsw5tz+nFrtI+cyhOinbg7WPPoiGDe2pnMU+PC8HQyvWehyQxKqKqmQceyzWe55T/x7DhTyO/G92T74jHcFuMr4SREO7ujny96Bb45kqN2KVclMyihCkVRWH8sl48PnOfw+TJu7+vLHydHmPSKIiE6m2APBwYFufJVYhYLRgeb3A+FMoMSRncyp4JZK/fz9BfH8HC05pvHh/LG7H4STkKoYFasP2nFNSSeL1O7lCtIQAmjKavR8pdvT3Dbir2kF9fw75l9ePve/gwIdFW7NCG6rGnRPthbmfPFoSy1S7mCnOIT7U6nN/B5QibLtpyjukHH3KFB/G5CT5xt5flMQqjNzsqC22J8WX8slxemR5lUE1nTqUR0SgfTSnjhh9Mk5VUyNNiNF6ZHEe7tqHZZQohL3D0wgLWHsthwPJfZg7qrXU4TCSjRLvIq6ng57gzfH8/Fz8WWt+/rz5Te3iZ3EVYIAf0CXAjzdODLxCwJKNF5Nej0vLcnnRU7UtArCk/dEsbjo0OwteoYT/AUoivSaDTcHRvAS3FJpBRWEeppGmc5ZJGEaDPbkwqY+Npulm4+y8gwd7Y/M5pnJvSUcBKiA5jR3w8LMw1fJmarXUoTmUGJm5ZWVM0/Npxm59kiQjzs+WjeIEb19FC7LCFEK7g7WHNLpCfrjmTz+0nhWJqrP3+RgBI3rKZBxzu7Uvnv7lSsLcz567RI5g4LMokDWwjRevcMDGDzqQK2JxUyube32uVIQInWu9gF4uWNSQS52XN7Xz/+MDkcT0fT6+UlhGi5UWEeeDpa81VilgSU6HhO5lTwwvenSDxfRrS/M3+cHE5/udFWiE7BwtyMuwb4szI+lYLKerxUbiAr52JEi1ytC8R3TwyXcBKik7k7NgCDAt8cUX+xhMygxDVJFwghupYgd3vu6OvL4Qz1e/NJQIlmSRcIIbqmMC9Hlm4+S3F1A+4O6j0sVE7xiSvkVdTx1OdHuWfVASpqtbx1b38+e2ywhJMQXcTwUHcAfkotUbUOCSjRpEGn562dKdzyajybTuXz1LhQti8ew7RO+mTbTZs2ER4eTmhoKEuWLLni9V27duHs7Ezfvn3p27cvL774ogpVCmF8ffyccbKxYF9ysap1yCk+AVzoAvHihtOcL6llYi8v/jqtF93d7NQuq93o9XoWLlzI1q1b8ff3Z+DAgUyfPp1evXpdtt3IkSPZsGGDSlUKoQ5zMw3DQtzZm1KMoiiq/YAqM6guLr24mofXJPDIh4mYm2n4aN4gVj0Y26nDCSAhIYHQ0FCCg4OxsrJi9uzZrF+/Xu2yhDAZw8PcySmvI6OkVrUaZAbVRVXVN7JiZwrfHsnBTAN/mXqhC4SVRdf4mSUnJ4eAgICmr/39/Tl48OAV2+3fv5+YmBh8fX1ZtmwZUVFRV2yzatUqVq1aBUBRUVH7FS2EEY385TrU3uQierjbq1KDBFQXYzAofH04m1d+WaEza4A/v++CXSAURbnie78+jdG/f3/Onz+Pg4MDcXFx3HHHHSQnJ1/xvvnz5zN//nwAYmNj26dgIYws0M0OPxdb9qYU88DQIFVq6Bo/LgsADmWUMv2tvfzhm58JdLPj+yeHs3RWTJcLJ7gwY8rK+t8jrrOzs/H19b1sGycnJxwcHACYOnUqjY2NFBere9FYCGPRaDSMDHPnp9QSdHqDKjVIQHUBOeV1/Pbzo8xauZ+Sai1vzO7L1wuGEu3vonZpqhk4cCDJycmkp6ej1WpZu3Yt06dPv2yb/Pz8pplWQkICBoMBNzc3NcoVQhXDQ92pqtdxIqdClfHlFF8nVqfVszL+QrdxRYFFt4Txm9HB2FnJ/3YLCwtWrFjBpEmT0Ov1zJs3j6ioKFauXAnAggUL+Prrr3nnnXewsLDA1taWtWvXdsrl9kI0Z1jIhR/I9qUU0697N6OPr7naufhLXPNFYZoUReGHn/NYEpdEbkU9t0b78NyUCPy7de6VeaYgNjaWxMREtcsQos1MW74HB2sLvvjN0PYaotmf+uRH6U7mRHYFf//hQrfxKF8nXp/dj0E9pKGrEOLGjAh15/196dRqdUY/+yLXoDqJwqp6fv/Vcaa/tZeMkgvdxr9/coSEkxDipowIc6dRr3AwvdToY8sMqoNr0OlZsy+DFTtSaNDpeWxkME+OC8XJRrqNCyFu3sAgVwb1cCWloJqx4Z5GHVsCqoNSFIWtpwt4KS6J8yW1jI/05C/Teql2Q50QonOysTSnrEbLoYxSHhsVbNSxJaA6oHP5Vby44TR7U4oJ9XTgo3mDGNXTQ+2yhBCdVIiHA8mFVUYfVwKqAymsrOe1befYcaYQFHjhtl7cNyQQS3O5lCiEaD8hnvZsSyqgUW8w6r83ElAdQK1Wx6rdaazanYZWZ+CBoYH8dlworvbqPUhMCNF1hHg4oDMoZJbWEuLhYLRxJaBMmN6g8FViFv/Zeo7Cqgam9vHmD5MiCJLrTEIII7oYSqmF1RJQXZ2iKOw6V8TLcUmcK6imf3cX3rm/PwMCZcm4EML4gj0u/FCcWlRj1HEloEzMqdwK/hWXxL6UEoLc7Hjnvv5M7u0tLXaEEKpxtLHEy8ma1KJqo44rAWUicsvrWLblLN8ezcHF1pK/3daL+wYHdpnnMwkhTFuIh4MEVFdTVd/IO7tSWb03HQWYPyqYJ8aE4mwrN9oKIUxHiIcD64/lGPUR8BJQKmnUG/g8IZM3tiVTUqPljr6+PDspXBq6CiFMUoiHPZX1OoqrtXg4GmcFsQSUkRkMCptO5bN6bxqHz5czJNiVD6b2oo+/s9qlCSFEs0I8f1nJV1QtAdXZXFyZ9+qWs5zMqWRKb29Wz41lXISnLIAQQpi8pqXmRdUMCTbOgzsloIwgIb2UpZvPcCijjABXW16dFcMd/fwwN5NgEkJ0DN5ONthZmZNaaLyl5hJQ7ehEdgVLt5xl97kiPB2t+ccdvbknNkBW5gkhOhwzMw093O2NupJPAqodJBdU8eqWc2w6lY+LnSV/nhrBA0OCsLUyV7s0IYS4YSEeDhzJLDPaeBJQbSizpJbXt5/ju6M52FlZ8PT4MB4Z0QNHeTaTEKITCPFw4Iefc6nT6o3yA7cEVBvIq6jjrZ0prE3IwtxMw2Mjg1kwOoRu9lZqlyaEEG0mxNMeRYH04hp6+Tq1+3gSUDchq7SWlfGpbD6Vj05vYM6g7jw5LhQvJxu1SxNCiDZ36Uo+CSgTlVZUzdu7UvnuaA4aDdw1IICFY0PkJlshRKfWw90ejQajLZSQgGqFM/mVvLUzlR9/zsXS3IwHhgYyf1QwPs62apcmhBDtzsbSnBh/Z2oadEYZTwKqBY5nlbNiZwpbTxdgb2XO/FEhPDKih9HuphZCCNOh4Uy+cR7/LgF1DYcySnlzRwq7zxXhZGPBolvCeHh4EC52svhBCNE12VubU6vVG2UsCahfURSFvcnFrNiZwsH0Utzsrfjj5AjuH9JdlosLIbo8OysLSqprjTKWBNQvGnR6vj+Wy/v7MrC3MierrJb/u7UXcwZ1lxtshRDiFw7WFtRo5RqUURRXN/DJgfN8cuA8xdVaeno5cO+gHkyL8cHaQoJJCCEuZWdlTm2DnOJrV0l5lby/N531x3LR6g2MDfdg3ogejAh1l+7iQgjRDHuZQbUPg0Fhx5lC3t+Xzk+pJdhamnP3QH8eHt6j6QY0IYQQzbO3sqC+0YBOb8DCvH0bX3eJgCqubuCbw9kcSi9l25lCfJxt+OPkCOYMCpAVeUII0Qr21hcufdQ26nGSgLoxeoPC3pRi1iZksvV0ATqDwq3RPiyf048pvb2xbOcdK4QQnZGd1YXYqG3Q49TOK5s7XUDlltfxVWI2XyZmkVNeRzc7Sx4aFsTsQQGEejqqXZ4QQnRoF2dQxrgO1SkCqr5Rz84zhXyZmEX8uSIMCowMc+dPUyOY0MtLVuMJIUQbsf9lBmWMdkcdNqB0egP7UktYfyyHLacKqG7QEePvzMKxodwdG0CAqzRuFUKItmZvfTGg2n+peYcKqEa9gQNpJexPK+GLhCxKarQ42lgwtY83t/f1Y0iwG+ZmskRcCCHaS9MiCTnFB5X1jRxMKyHuRD7bkwqorNfhbGvJmJ4eTI32YUy4h5zCE0III7m4SKK6K57i0+kNnM6rZE9yMfFnizicWYanozW1Wh0TenkzKcqLkWEe0n5I3LRNmzaxaNEi9Ho9jz76KM8999xlryuKwqJFi4iLi8POzo4PPviA/v37q1StEKbB4ZdTfMZoGKt6QFXWN3Iiu4JzBVXsOlvE4fNleDlZk1pUQx8/Zx4fHcLocA/6Bbi0+01houvQ6/UsXLiQrVu34u/vz8CBA5k+fTq9evVq2mbjxo0kJyeTnJzMwYMHefzxxzl48KCKVQuhPruLq/g6ywyquqGRxPRS9EBFbSMphdWkFlZzpqCKhkY9+ZUNBLvbY26m4Y5+vgwOcmNoqBvuDvK8JdE+EhISCA0NJTg4GIDZs2ezfv36ywJq/fr1PPjgg2g0GoYMGUJ5eTl5eXn4+PioVbYQqrOzvBhQnWQGdSi9jMc+SkSvgJO1BRX1OjwdrXC1t2ZEiBvDQtwZHuYuXR2E0eTk5BAQEND0tb+//xWzo6ttk5OTIwElujQLczMGBrliZ9X+Z7Q0iqI0++LkyZOV4uLimx6kUW8gs7AcG9sLj0bX6gw06Aw06g1YmGnQGRSsLMywt7LAzsocB2sLrCxM43ReUVERHh4eapdxQ6T25pWVlVFZWUlgYCAAJSUl1NTU0L1796ZtkpOT8fHxwcHhQp/Gc+fO4e/vj53d5bcwFBUVcfHvSUNDA3379m23utuTHC/G11HrPpFTgYO5nh7erjf9WYcPH96sKMrkq712zYACrvlia8TGxpKYmHjZ98pqtJzJr+RYVgVHMsuoqG0kIaMUgPGRnrg7WDMm3IPhoe6qPSzwanV3FFJ78/bv388LL7zA5s2bAXj55ZcB+NOf/tS0zW9+8xvGjBnDnDlzAAgPD2fXrl3XnEHZ29tTU1PTbnW3JzlejK8j1l1V30ifF7Zgd24zp9ctb4uPbPbeIFUXSXSzt2JoiDtDQ9yBC6umUouq2Z9awtmCKtYfzWXtoSysLTSMCPVgXKQnk6K85dqUuGkDBw4kOTmZ9PR0/Pz8WLt2LZ999tll20yfPp0VK1Ywe/ZsDh48iLOzs5zeE13exdV7Gr223cdSfRXfpTQaDaGejk098/52WxRHzpdxIL2E9Udz+cu3J3n+u5MM7uHG1GgfJkV54eloo3LVoiOysLBgxYoVTJo0Cb1ez7x584iKimLlypUALFiwgKlTpxIXF0doaCh2dnasWbNG5aqFUN/F+580uoZ2H8toATV//vxWv8fS3IzBwW4MDnbjqXFhnMmvYuOJPH48kcfz353k/9afZFCQK9NjfJnc2xu3dphZ3UjdpkJqv7apU6cyderUy763YMGCpt9rNBreeuutVn2mu7t7m9SmBjlejK8j1n1xefmU8WPbfSyjXYNqS4qicK6gmrgTecSdyMPWypykvEom9vLmnoEBjAh1x0xaHgkVdMRrCkK0xk+pxdz77kE+f2wIQ0Pc2uIjTfMa1I3SaDSEezsS7u3I7yb0JCmvgq8P57DuSDY/nsjDz8WWWbH+zIoNwM/FVu1yhRCi06j95f6niz352lObruX+6quviIqKwszM7Jo/RW7atInw8HBCQ0NZsmRJ0/dLS0uZMGECYWFhTJgwgbKyshaNG+njzPO39uLAn2/hrXv7E+xhzxvbkxnx7x08+H4CcSfy0OoMzb6/JeOePXuWvn37Nv1ycnLi9ddfB+CFF17Az8+v6bW4uLgW1d0WWrrPgoKC6NOnD3379iU2NrbV71ej7qysLMaOHUtkZCRRUVG88cYbTa+psc+bO24vUhSFrKwsQkNDiY6O5siRIy1+b3u63tiffvop0dHRREdHM2zYMI4fP970WnPHjbFcr/Zdu3bh7OzcdBy8+OKLLX5ve7ve+EuXLm2qu3fv3pibm1NaemEVs5r7fd68eXh6etK7d++rvl7d0AjAjFuntv9xrijKtX61yunTp5UzZ84oo0ePVg4dOnTVbXQ6nRIcHKykpqYqDQ0NSnR0tHLq1ClFURTl97//vfLyyy8riqIoL7/8svKHP/yhtSU0ySypUV7dclYZ8q9tSuAfNyj9Xtyi/OOHU0p6UdUV27Z2XJ1Op3h5eSkZGRmKoijK3/72N2Xp0qU3XOvNaGntgYGBSlFR0Q2/v621ZNzc3Fzl8OHDiqIoSmVlpRIWFtZ0rBh7n1/ruL3oxx9/VJycnBSDwaDs379fGTRoUIvfq2bd+/btU0pLSxVFUZS4uLimuhWl+ePGGFpS+86dO5Vp06bd0HvbU2vH//7775WxY8c2fa3mfo+Pj1cOHz6sREVFXfX1597doAT+cYOSV17bVsd5sxnUpjOoyMhIwsPDr7nNpS1mrKysmlrMwIXWMnPnzgVg7ty5fPfddzdcS4CrHc9M6MneP47jg4cHMriHK98cyWbKG3uZ98EhfkopRvnl+ltrx92+fTshISFNN3mq6Wb3WVvu87Ye18fHp6k5q6OjI5GRkeTk5Bilvl+71nF70fr163Fzc7uiNVJL3qtm3cOGDaNbt24ADBkyhOzsbKPUdj03s9/U3Oc3Mv7nn3/edL+d2kaNGoWra/M34B7++RRw4blQ7X2cG71dQ3PtYwAKCgqa7jPx8fGhsLDwpsczN9MwJtyTd+4fwOanR7FgdAg/Z5dz73sHmbp8L18fzqagqKRV465du/aKg2nFihVER0czb948o50mg5bvM41Gw8SJExkwYACrVq1q9fvbWmvHzcjI4OjRowwePLjpe8bc59c6bi/dxsrK6optWvLe9tLasVevXs2UKVOavm7uuDGGlta+f/9+YmJimDJlCqdOnWrVe9tLa8avra1l06ZNzJw5s+l7au736ymrrgX+92Td9jzOW71IYvz48eTn51/x/Zdeeonbb7/9uu9XrrJqUKNp/xV3l9atmFlg7deXs5UjeDavEqf7XufN7cncNyQQV/tr9wPUarV8//33TZ0HAB5//HGef/55NBoNzz//PIsXL+b9999vl9ov9dJLL7X4M/bt24evry+FhYVMmDCBiIgIRo0a1WY1Xk1b1A1QXV3NzJkzef3113FycgLaf5//WkuO2+a2UeuYh9b9fdu5cyerV69m7969Td9T47i5qCW19+/fn/Pnz+Pg4EBcXBx33HEHycnJqu5zaN1+/+GHHxg+fPhlsxY19/v1GDSWWJtz2Urp9jrOWx1Q27Ztu6kB/f39ycrKavo6OzsbX19fALy8vJq6Refl5eHp6XlTY13qanUrisLelGIefOlDXt16jhU7U5gc4Yp7yNUvDsKFRzD0798fLy+vpu9d+vvHHnuMW2+9tc3qbq72S8duyT67uI89PT2ZMWMGCQkJjBo1yuj7vLV1NzY2MnPmTO677z7uvPPOy95/UXvs81+71nF76TZJSUlXbKPVaq/73vbSkroBfv75Zx599FE2btyIm9v/lg43d9wYQ0tqv/gDC1y4r+2JJ56guLi4xX/u9tKa8a92RkbN/X49tk4uNGj+t+isPY9zo5/iu7TFjFarZe3atUyfPh240Frmww8/BODDDz9s0YzsZmg0GkaGeXCXRwF3O57jzv5+bDhZSOP453hoTQIH00qu+KngaueK8/Lymn7/7bffNrv6pT20ZJ/V1NRQVVXV9PstW7Y01Wjsfd6auhVF4ZFHHiEyMpJnnnnmsteMvc+vddxeNH36dEpKLhwzBw4caGqN1JL3qll3ZmYmd955Jx9//DE9e/Zs+v61jhtTqT0/P7/p72hCQgIG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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "t=sy.symbols('t')\n", "x=sy.cos(t)\n", "y=sy.sin(t)+sy.sin(2*t)/2\n", "sy.plot_parametric((x, y, (t, 0, 2 * sy.pi)));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Exercice 5: Représenter graphiquement la fonction $f(x) = x^3 + 2x^2 + 3x + 4$ sur l'intervalle $[-10, 10]$.\n", "- Exercice 6: Représenter graphiquement la fonction implicite $x^4 + 4y^4 = 1$.\n", "- Exercice 7: Représenter graphiquement la courbe paramétrique $x(t) = \\cos(t+t^2)$ et $y(t) = \\sin(t)$ sur l'intervalle $[0, 2\\pi]$.\n", "- Exercice 8: Définir l'intersection de la courbe implicite $x^2 + y^2 = 4$ (cercle) avec la droite $y = x+1$, afficher les coordonnées des points et représenter sur un même graphe les deux courbes. Vérifier que les points d'intersection sont visiblement les bons.\n", "- Exercice 9: Calculer l'intégrale de la fonction $f(x,y) = x^2 + y^2$ sur le domaine triangulaire $T = \\{(x,y) \\in \\mathbb{R}_+^2 | x + y \\leq c\\}$ avec $c>0$ et tracer le résultat en fonction de $c$." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evaluation numérique\n", "La fonction evalf de sympy permet d'évaluer une expression symbolique. On peut préciser la précision de l'évaluation.\n", "On peut également substituer une variable symbolique par une valeur numérique en utilisant la méthode subs de l'objet symbolique." ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{\\sqrt{3}}{2}$" ], "text/plain": [ "sqrt(3)/2" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\cos{\\left(1 \\right)}$" ], "text/plain": [ "cos(1)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle 0.54030230586814$" ], "text/plain": [ "0.540302305868140" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle 0.540302305868139717400936607443$" ], "text/plain": [ "0.540302305868139717400936607443" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle y^{2} - y + 1$" ], "text/plain": [ "y**2 - y + 1" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle 3$" ], "text/plain": [ "3" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle y^{2}$" ], "text/plain": [ "y**2" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import sympy as sy\n", "\n", "display(sy.cos(sy.pi/6))\n", "display(sy.cos(1))\n", "display(sy.cos(1).evalf())\n", "display(sy.cos(1).evalf(30))# avec 30 chiffres significatifs\n", "x, y = sy.symbols('x y')\n", "f = x**2 + y**2 - x*y\n", "display(f.subs(x, 1))\n", "display(f.subs(x, 1).subs(y, 2))\n", "display(f.subs(x, y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Exercice 10: Evaluer la dérivée seconde de la fonction $f(x) = \\sqrt{5\\cos(x)}$ en $x = 1$, avec 20 chiffres significatifs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Outils d'algebre linéaire\n", "Pour une description détaillée des outils d'algèbre linéaire de sympy, vous pouvez consulter la documentation officielle de sympy:\n", "https://docs.sympy.org/latest/tutorials/intro-tutorial/matrices.html\n", "\n", "On s'initiera ici avec quelques outils de base de l'algèbre linéaire de sympy.\n", "\n", "La fonction Matrix de sympy permet de définir des matrices symboliques. On peut faire des opérations de base sur les matrices comme l'addition, la soustraction, la multiplication, le calcul du déterminant, de l'inverse, de la transposée, etc.\n", "On définit une matrice de sympy en convertissant une liste de listes en une matrice de sympy.\n", "\n" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 2\\\\3 & 4\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[1, 2],\n", "[3, 4]])" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\\left[\\begin{matrix}1 & 2\\\\3 & 4\\end{matrix}\\right]\n" ] } ], "source": [ "import sympy as sy\n", "\n", "A=sy.Matrix([[1,2],[3,4]])\n", "display(A)\n", "Alatex=sy.latex(A)\n", "print(Alatex)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On peut renseigner une matrice diagonale à l'aide de ses coefficients diagonaux avec la fonction diag de sympy. On peut avoir des coefficients de la matrice qui sont des expressions symboliques. On peut modifier des sous-matrices d'une matrice de sympy. On ne confondra pas un vecteur ligne et un vecteur colonne. On pourra alors calculer des produits matriciels, des puissances de matrices, des transposées." ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 0\\\\0 & 2 & 0\\\\0 & 0 & 3\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[1, 0, 0],\n", "[0, 2, 0],\n", "[0, 0, 3]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}4\\\\5\\\\6\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[4],\n", "[5],\n", "[6]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 2 & a\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([[1, 2, a]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 4\\\\0 & 2 & 5\\\\0 & 0 & 6\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[1, 0, 4],\n", "[0, 2, 5],\n", "[0, 0, 6]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'M et B'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 4\\\\1 & 2 & a\\\\0 & 0 & 6\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[1, 0, 4],\n", "[1, 2, a],\n", "[0, 0, 6]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 4\\\\0 & 2 & 5\\\\0 & 0 & 6\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[1, 0, 4],\n", "[0, 2, 5],\n", "[0, 0, 6]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'M+B='" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}2 & 0 & 8\\\\1 & 4 & a + 5\\\\0 & 0 & 12\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[2, 0, 8],\n", "[1, 4, a + 5],\n", "[0, 0, 12]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'MB='" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 28\\\\1 & 4 & 6 a + 14\\\\0 & 0 & 36\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[1, 0, 28],\n", "[1, 4, 6*a + 14],\n", "[0, 0, 36]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'MC='" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}28\\\\6 a + 14\\\\36\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[ 28],\n", "[6*a + 14],\n", "[ 36]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'M^2='" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 28\\\\3 & 4 & 8 a + 4\\\\0 & 0 & 36\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[1, 0, 28],\n", "[3, 4, 8*a + 4],\n", "[0, 0, 36]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'M^t='" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 1 & 0\\\\0 & 2 & 0\\\\4 & a & 6\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[1, 1, 0],\n", "[0, 2, 0],\n", "[4, a, 6]])" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "B=sy.diag(1,2,3)\n", "Desun=sy.ones(3,3)\n", "display(B)\n", "C=sy.Matrix([4,5,6])\n", "display(C)\n", "a=sy.symbols('a')\n", "D=sy.Matrix([[1,2,a]])\n", "display(D)\n", "B[:,2]=C\n", "display(B)\n", "M=B.copy()\n", "M[1,:]=D\n", "display('M et B',M,B)\n", "display('M+B=',M+B)\n", "display('MB=',M*B)\n", "display('MC=',M*C)\n", "display('M^2=',M**2)\n", "display('M^t=',M.T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Exercice 11: Calculer le produit des matrices $A = \\begin{pmatrix} 1 & 2 \\\\ 3 & 4 \\end{pmatrix}$ et $B = \\begin{pmatrix} 5 & 6 \\\\ 7 & 8 \\end{pmatrix}$.\n", "- Exercice 12: Modifier la matrice obtenue en affectant que des $1$ à la dernière ligne, en utilisant la fonction ones de sympy.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "On dispose de fonctions ou méthodes pour calculer le déterminant, l'inverse, le noyau, l'image, les valeurs propres, les vecteurs propres, etc.\n", "En voici quelques exemples." ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}3 & 1 & 1 & 1\\\\1 & 3 & 1 & 1\\\\1 & 1 & 3 & 1\\\\1 & 1 & 1 & 3\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[3, 1, 1, 1],\n", "[1, 3, 1, 1],\n", "[1, 1, 3, 1],\n", "[1, 1, 1, 3]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle 48$" ], "text/plain": [ "48" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle 48$" ], "text/plain": [ "48" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}\\frac{5}{12} & - \\frac{1}{12} & - \\frac{1}{12} & - \\frac{1}{12}\\\\- \\frac{1}{12} & \\frac{5}{12} & - \\frac{1}{12} & - \\frac{1}{12}\\\\- \\frac{1}{12} & - \\frac{1}{12} & \\frac{5}{12} & - \\frac{1}{12}\\\\- \\frac{1}{12} & - \\frac{1}{12} & - \\frac{1}{12} & \\frac{5}{12}\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[ 5/12, -1/12, -1/12, -1/12],\n", "[-1/12, 5/12, -1/12, -1/12],\n", "[-1/12, -1/12, 5/12, -1/12],\n", "[-1/12, -1/12, -1/12, 5/12]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 0 & 0\\\\0 & 1 & 0 & 0\\\\0 & 0 & 1 & 0\\\\0 & 0 & 0 & 1\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[1, 0, 0, 0],\n", "[0, 1, 0, 0],\n", "[0, 0, 1, 0],\n", "[0, 0, 0, 1]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'B'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}2 & 1 & 1 & 1\\\\1 & 3 & 1 & 1\\\\1 & 1 & 1 & 1\\\\1 & 1 & 1 & 1\\end{matrix}\\right]$" ], "text/plain": [ "Matrix([\n", "[2, 1, 1, 1],\n", "[1, 3, 1, 1],\n", "[1, 1, 1, 1],\n", "[1, 1, 1, 1]])" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'B.det()'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A=sy.ones(4,4)+2*sy.diag(1,1,1,1)\n", "display(A)\n", "display(sy.det(A))\n", "display(A.det())\n", "display(A.inv())\n", "display(A*A.inv())\n", "B=sy.ones(4,4)\n", "B[0,0]=2\n", "B[1,1]=3\n", "display('B',B)\n", "display('B.det()',B.det())\n" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'valeurs propores de A'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{6: 1, 2: 3}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'valeurs propores de B'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{7/3 + 16/(9*(101/54 + sqrt(687)*I/18)**(1/3)) + (101/54 + sqrt(687)*I/18)**(1/3): 1,\n", " 7/3 + 16/(9*(-1/2 + sqrt(3)*I/2)*(101/54 + sqrt(687)*I/18)**(1/3)) + (-1/2 + sqrt(3)*I/2)*(101/54 + sqrt(687)*I/18)**(1/3): 1,\n", " 7/3 + (-1/2 - sqrt(3)*I/2)*(101/54 + sqrt(687)*I/18)**(1/3) + 16/(9*(-1/2 - sqrt(3)*I/2)*(101/54 + sqrt(687)*I/18)**(1/3)): 1,\n", " 0: 1}" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "-------------------\n", "eigenvects renseigne les valeurs propres, leur multiplicité\n", "et les vecteurs propres associés au format Matrix\n" ] }, { "data": { "text/plain": [ "[(2,\n", " 3,\n", " [Matrix([\n", " [-1],\n", " [ 1],\n", " [ 0],\n", " [ 0]]),\n", " Matrix([\n", " [-1],\n", " [ 0],\n", " [ 1],\n", " [ 0]]),\n", " Matrix([\n", " [-1],\n", " [ 0],\n", " [ 0],\n", " [ 1]])]),\n", " (6,\n", " 1,\n", " [Matrix([\n", " [1],\n", " [1],\n", " [1],\n", " [1]])])]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display('valeurs propores de A',A.eigenvals())# on obtient les valeurs propres et leur multiplicité\n", "display('valeurs propores de B',B.eigenvals())\n", "print('-------------------')\n", "print('eigenvects renseigne les valeurs propres, leur multiplicité')\n", "print('et les vecteurs propres associés au format Matrix')\n", "display(A.eigenvects())# on obtient les valeurs propres, leur multiplicité et les vecteurs propres associés" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Noyau de A'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'Noyau de B, de dimension 1, engendré par 1 vecteur'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[Matrix([\n", " [ 0],\n", " [ 0],\n", " [-1],\n", " [ 1]])]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'Rang de A'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "4" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'Rang de B'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "3" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'Image de A'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[Matrix([\n", " [3],\n", " [1],\n", " [1],\n", " [1]]),\n", " Matrix([\n", " [1],\n", " [3],\n", " [1],\n", " [1]]),\n", " Matrix([\n", " [1],\n", " [1],\n", " [3],\n", " [1]]),\n", " Matrix([\n", " [1],\n", " [1],\n", " [1],\n", " [3]])]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'Image de B, engendrée par 3 vecteurs (rang=3)'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[Matrix([\n", " [2],\n", " [1],\n", " [1],\n", " [1]]),\n", " Matrix([\n", " [1],\n", " [3],\n", " [1],\n", " [1]]),\n", " Matrix([\n", " [1],\n", " [1],\n", " [1],\n", " [1]])]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display('Noyau de A',A.nullspace())\n", "display('Noyau de B, de dimension 1, engendré par 1 vecteur',B.nullspace())\n", "display('Rang de A',A.rank())\n", "display('Rang de B',B.rank())\n", "display('Image de A',A.columnspace())\n", "display('Image de B, engendrée par 3 vecteurs (rang=3)',B.columnspace())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Exercice 13: Calculer le déterminant de la matrice $A = \\begin{pmatrix} 1 & 2 \\\\ 3 & 4 \\end{pmatrix}$. Son noyau et son image.\n", "- Exercice 14: Donner les valeurs propres et les vecteurs propres de la matrice $A = \\begin{pmatrix} 1 & 2 \\\\ 3 & 4 \\end{pmatrix}$.\n", "\n", "- Exercice 15: Calculer lorsque c'est possible l'inverse de la matrice $A = \\begin{pmatrix} 1 & 2 \\\\ a & 4 \\end{pmatrix}$ pour $a$ un parmètre réel et donner le noyau de $A$ en fonction de $a$.\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.5" } }, "nbformat": 4, "nbformat_minor": 2 }