diff --git "a/Chapitre 9 - Produits scalaires et espaces euclidens/9.8-9.9 La projection orthogonale sur un sous-espace vectoriel - La projection orthogonale examples et remarques suppl\303\251mentaires.ipynb" "b/Chapitre 9 - Produits scalaires et espaces euclidens/9.8-9.9 La projection orthogonale sur un sous-espace vectoriel - La projection orthogonale examples et remarques suppl\303\251mentaires.ipynb" index 73d2b29..c2195f1 100644 --- "a/Chapitre 9 - Produits scalaires et espaces euclidens/9.8-9.9 La projection orthogonale sur un sous-espace vectoriel - La projection orthogonale examples et remarques suppl\303\251mentaires.ipynb" +++ "b/Chapitre 9 - Produits scalaires et espaces euclidens/9.8-9.9 La projection orthogonale sur un sous-espace vectoriel - La projection orthogonale examples et remarques suppl\303\251mentaires.ipynb" @@ -1,57 +1,338 @@ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# **Concept(s)-clé(s) et théorie**\n", "\n", "## Définition 1\n", "Soient $V$ un $\\mathbb{R}$-espace vectoriel muni d'un produit scalaire $\\langle \\cdot, \\cdot \\rangle$ et $W \\subset V$ un sous-espace vectoriel de $V$. L'**orthogonal à $W$ dans $V$** est le sous-ensemble de $V$ défini par $$W^\\perp = \\left\\{v \\in V: \\langle v,w \\rangle = 0 \\quad \\forall \\ w \\in W\\right\\}$$\n", "\n", "## Proposition 1\n", "Soient $V$ un $\\mathbb{R}$-espace vectoriel muni d'un produit scalaire $\\langle \\cdot, \\cdot \\rangle$ et $W \\subset V$ un sous-espace vectoriel de $V$. Alors le sous-ensamble $W^\\perp$ de $V$ est un sous-espace vectoriel de $V$.\n", "\n", "## Proposition 2\n", - "Soient $V$ un $\\mathbb{R}$-espace vectoriel et $W \\subset V$ un sous-espace vectoriel de $V$. Alors pour tout $v \\in V$, il existe $w \\in W$ et $x \\in W^\\perp$ tels que $v = w + x$. De plus, $w$ et $x$ sont uniquement déterminés par $v$.\n", + "Soient $V$ un $\\mathbb{R}$-espace vectoriel et $W \\subset V$ un sous-espace vectoriel de $V$. Alors pour tout $v \\in V$, il existe $w \\in W$ et $x \\in W^\\perp$ tels que $v = w + x$. De plus, $w$ et $x$ sont uniquement déterminés par $v$. Donc, cela revient à dire que $V = W \\oplus W^{\\perp}$.\n", "\n", "## Définition 2\n", "Soient $V$ un $\\mathbb{R}$-espace vectoriel et $W \\subset V$ un sous-espace vectoriel de $V$. Soient également $v \\in V$ et $w \\in W, x \\in W^\\perp$ tels que $v = w+x$, come ci-dessus. On appelle $w$ la **projection orthogonale de $v$ sur $W$** et on écrit $w = proj_Wv$.\n", "\n", "## Proposition 3\n", "Soient $V$ un $\\mathbb{R}$-espace euclidien de dimension $n$ et $W \\subset V$ un sous-espace vectoriel de $V$ de dimension $k$. Soit également $\\{v_1, \\dots, v_k, v_{k+1}, \\dots, v_n\\}$ un base orthonormée de $V$ tel que $\\{v_1, \\dots, v_k\\}$ est une base orthonormée de $W$ et $\\{v_{k+1}, \\dots, v_n\\}$ est une base orthonormée de $W^\\perp$. Alors nous pouvons calculer les projections orthogonales de $v \\in V$ sur $W$ et sur $W^\\perp$ respectivement comme suit:\n", "\\begin{align*}\n", "proj_Wv &= \\sum\\limits_{i=1}^k \\dfrac{\\langle v, v_i \\rangle}{\\langle v_i,v_i \\rangle} v_i\\\\\n", "proj_{W^\\perp}v &= \\sum\\limits_{j=k+1}^n \\dfrac{\\langle v, v_j \\rangle}{\\langle v_j,v_j \\rangle} v_j\n", "\\end{align*}\n", "\n", "## Corollaire 1 (de Gram-Schmidt)\n", "Soient $V$ un espace euclidien et $W \\subset V$ un sous-espace vectoriel de $V$. Alors $$dim W^\\perp = dim V - dim W$$\n", "\n", "## Corollaire 2\n", "Soient $V$ un espace euclidien et $W \\subset V$ un sous-espace vectoriel de $V$. Alors $$\\left(W^\\perp\\right)^\\perp = W$$" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exercises et Examples" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import Librairie.AL_Fct as al\n", + "import Corrections.corrections as corrections\n", + "import numpy as np\n", + "import sympy as sp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 1\n", + "\n", + "Some theoretical questions, in the form of T/F. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 2\n", + "\n", + "Soit $V = \\mathbb{R}^n, \\ n=2,3$. Considérez les paires suivantes, faites par un ensemble de vecteurs $\\mathcal{S}$ générant un sous-espace vectoriel $W$ de $V$ et par un élément $v$ de $V$. Calculez les projections orthogonales de $v$ sur $W$ et $W^\\perp$. Tous les produits scalaires sont censés être les produits usuels.\n", + "\n", + "1. $V = \\mathbb{R}^2 \\qquad \\mathcal{S} = \\left\\{ \\begin{bmatrix}1 \\\\ 1\\end{bmatrix} \\right\\} \\qquad \\qquad \\quad v = \\begin{bmatrix} -1 \\\\ 0 \\end{bmatrix}$\n", + "2. $V = \\mathbb{R}^2 \\qquad \\mathcal{S} = \\left\\{ \\begin{bmatrix}0 \\\\ 1\\end{bmatrix}, \\begin{bmatrix} 1 \\\\ -1 \\end{bmatrix} \\right\\} \\qquad v = \\begin{bmatrix} -3 \\\\ 5 \\end{bmatrix}$\n", + "3. $V = \\mathbb{R}^3 \\qquad \\mathcal{S} = \\left\\{ \\begin{bmatrix}1 \\\\ 2 \\\\ 1\\end{bmatrix} \\right\\} \\qquad \\qquad \\quad \\ \\ v = \\begin{bmatrix} 1 \\\\ 0 \\\\ 1\\end{bmatrix}$\n", + "4. $V = \\mathbb{R}^3 \\qquad \\mathcal{S} = \\left\\{ \\begin{bmatrix}1 \\\\ -1\\\\ 1\\end{bmatrix} \\begin{bmatrix} 0 \\\\ 1 \\\\ 1 \\end{bmatrix} \\right\\} \\qquad \\quad v = \\begin{bmatrix} -1 \\\\ 0 \\\\ 1 \\end{bmatrix}$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "case_number = 4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if case_number == 1:\n", + " S = [[1,1]]\n", + " v = [-1,0]\n", + " dim=1\n", + "elif case_number == 2:\n", + " S = [[0,1], [-1,1]]\n", + " v = [-3,5]\n", + " dim=2\n", + "elif case_number == 3:\n", + " S = [[1,2,1]]\n", + " v = [1,0,1]\n", + " dim=1\n", + "elif case_number == 4:\n", + " S = [[1,-1,1], [0,1,1]]\n", + " v = [-1,0,1]\n", + " dim=2\n", + "else:\n", + " print(f\"{case_number} n'est pas un numéro de cas valide!\" \n", + " f\"Numéros de cas disponibles: [1,2,3,4]\")\n", + "\n", + "step = 0\n", + "VectorsList = [S]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Aide\n", + "\n", + "Pour calculer la projection orthogonal de $v$ sur $W$, il peut être utile de dériver une base ortogonale (ou orthonormée) pour ce dernier. Vous pouvez utiliser la cellule suivante pour exécuter l'algorithme interactif de Gram-Schmidt.\n", + "\n", + "#### Instructions\n", + "\n", + "Pour utiliser la méthode interactive de Gram-Schmidt, procédez comme suit:\n", + "\n", + "1. Insérez le numéro de dossier souhaité dans la cellule suivante\n", + "2. Exécutez la cellule appelée \"SÉLECTION DES PARAMÈTRES\" pour sélectionner le type d'opération et les coefficients nécessaires\n", + "3. Exécutez la cellule appelée \"EXÉCUTER L'ÉTAPE DE L'ALGORITHME GRAM-SCHMIDT\" pour exécuter l'étape de l'algorithme de Gram-Schmidt avec les paramètres précédemment sélectionnés\n", + "\n", + "En outre:\n", + "\n", + "1. Vous pouvez annuler une opération en sélectionnant le bouton \"Revert\".\n", + "\n", + "2. Si les coefficients insérés sont incorrects, vous pouvez essayer avec de nouvelles valeurs sans effectuer une opération \"Revert\".\n", + "\n", + "3. Les coefficients qui ne sont pas liés à l'opération sélectionnée peuvent être définis sur n'importe quelle valeur, car ils ne sont pas utilisés dans le code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# SÉLECTION DES PARAMÈTRES\n", + "norm_coeff, proj_coeffs, operation, step_number = al.manual_GS(dim=dim)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# EXÉCUTER L'ÉTAPE DE L'ALGORITHME GRAM-SCHMIDT\n", + "S = al.interactive_gram_schmidt(norm_coeff, proj_coeffs,\n", + " operation, step_number, \n", + " S.copy(), VectorsList)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# INSERT HERE THE VALUES OF THE TWO PROJECTIONS\n", + "proj1 = [1,1,1] # projection onto W\n", + "proj2 = [0,0,0] # projection onto the orthogonal complement of W in V" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "corrections.Ex2Chapitre9_8_9(proj1, proj2, case_nb=case_number)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 3\n", + "\n", + "Soit $V = \\mathbb{P}^n(\\mathbb{R}), \\ n=2,3$. Considérez les paires suivantes, faites par un ensemble de fonctions $\\mathcal{S}$ générant un sous-espace vectoriel $W$ de $V$ et par un élément $v$ de $V$. alculez les projections orthogonales de $v$ sur $W$ e $W^\\perp$. Tous les produits scalaires sont censés être les produits usuels, dans l'intervalle spécifié $I$.\n", + "\n", + "1. $V = \\mathbb{P}^2(\\mathbb{R}) \\qquad \\mathcal{S} = \\left\\{ 1, x \\right\\} \\qquad \\qquad \\ \\ \\ v = x^2 \\qquad \\qquad \\qquad \\\n", + "I = [-1,1]$\n", + "2. $V = \\mathbb{P}^2(\\mathbb{R}) \\qquad \\mathcal{S} = \\left\\{ 1, x^2 \\right\\} \\qquad \\qquad v = x \\qquad \\qquad \\qquad \\ \\ \\ I = [0,1]$\n", + "3. $V = \\mathbb{P}^3(\\mathbb{R}) \\qquad \\mathcal{S} = \\left\\{ 1, 1+x^2, x^3 \\right\\} \\quad \\ v = x^2 + x \\qquad \\qquad \\ \\ \\ I = [-1,1]$\n", + "4. $V = \\mathbb{P}^3(\\mathbb{R}) \\qquad \\mathcal{S} = \\left\\{ x^2, x^3 \\right\\} \\qquad \\quad \\ \\ v = 1 + x + x^2 + x^3 \\quad \\ I=[-1,1]$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "case_number = 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = sp.Symbol('x')\n", + "if case_number == 1:\n", + " S = [1+0*x, x]\n", + " v = x**2\n", + " int_limits = [-1,1]\n", + " dim=2\n", + "elif case_number == 2:\n", + " S = [1+0*x, x**2]\n", + " v = x\n", + " int_limits = [0,1]\n", + " dim=2\n", + "elif case_number == 3:\n", + " S = [1+0*x, x**2, x**3]\n", + " v = x**2 + x\n", + " int_limits = [-1,1]\n", + " dim=3\n", + "elif case_number == 4:\n", + " S = [x**2, x**3]\n", + " v = 1 + x + x**2 + x**3\n", + " int_limits = [-1,1]\n", + " dim=2\n", + "else:\n", + " print(f\"{case_number} n'est pas un numéro de cas valide!\" \n", + " f\"Numéros de cas disponibles: [1,2,3,4]\")\n", + "\n", + "step = 0\n", + "VectorsList = [S]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Aide\n", + "\n", + "Pour calculer la projection de $v$ sur $W$, il peut\n", + "aider à dériver une base orthogonale (ou orthonormée) pour ce dernier. Vous pouvez utiliser la cellule suivante pour exécuter l'algorithme interactif de Gram-Schmidt pour fonctions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# SÉLECTION DES PARAMÈTRES\n", + "norm_coeff, proj_coeffs, operation, step_number = al.manual_GS(dim=dim)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# EXÉCUTER L'ÉTAPE DE L'ALGORITHME GRAM-SCHMIDT\n", + "S = al.interactive_gram_schmidt_func(norm_coeff, proj_coeffs,\n", + " operation, step_number, \n", + " S.copy(), VectorsList,\n", + " int_limits=int_limits,\n", + " weight_function=None)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# INSERT HERE THE VALUES OF THE TWO PROJECTIONS\n", + "proj1 = 1 + 0*x # projection onto W\n", + "proj2 = x # projection onto the orthogonal complement of W in V" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "corrections.Ex3Chapitre9_8_9(proj1, proj2, \n", + " int_limits=int_limits, \n", + " case_nb=case_number)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 4\n", + "\n", + "Give a basis for $W$ and ask to compute a basis for $W^\\perp$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**HERE**: link to next notebook!" + ] } ], "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.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }