{ "cells": [ { "cell_type": "code", "execution_count": 6, "id": "c5dc3dd5-c340-4aa6-a898-b467845121e6", "metadata": { "tags": [] }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.linalg import hilbert" ] }, { "cell_type": "code", "execution_count": 34, "id": "073124ba-d6bd-4f82-9431-fe81bdc77c21", "metadata": { "tags": [] }, "outputs": [], "source": [ "def decompoQR(A):\n", " \"\"\"\n", " A = QR\n", " \n", " Q = Matrice vecteurs orthogonaux (colonnes)\n", " R = Coéfficients des projections sur les vecteurs (triangulaire sup)\n", " \n", " \"\"\"\n", " m, n = A.shape\n", " Q = np.zeros((m,m))\n", " R = np.zeros((m,n))\n", " \n", " for i in range(m):\n", " # Vecteur ligne de A\n", " v = A[:,i]\n", " pr = 0\n", " \n", " # Retirer projection sur v des autres vecteurs\n", " # proj A sur B = A@B/(B@B) * B\n", " for j in range(0, i):\n", " av = Q[:,j]\n", "\n", " pr += (av.T@v)* av\n", " v = v - pr\n", "\n", " # normalisation vecteur\n", " Q[:,i] = v/np.linalg.norm(v)\n", " \n", " \n", " R = Q.T@A\n", " \n", " return Q, R" ] }, { "cell_type": "code", "execution_count": 16, "id": "e35d7cf5-cbbe-4948-98ed-a241643110d0", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-4.393707619954057e-14\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.arange(2, 201)\n", "y = np.zeros(len(x))\n", "yr = np.zeros(len(x))\n", "\n", "for i in range(len(x)):\n", " A = hilbert(x[i])\n", " \n", " Q, R = decompoQR(A)\n", " y[i] = np.linalg.norm(Q.T@Q - np.identity(x[i]))\n", " \n", " Q, R = np.linalg.qr(A)\n", " yr[i] = np.linalg.norm(Q.T@Q - np.identity(x[i]))\n", " \n", "Q, R = decompoQR(hilbert(8))\n", "print(Q[:,1]@Q[:,2])\n", "#print(y)\n", "plt.plot(x, y, color= 'b')\n", "plt.plot(x, yr, color= 'b')\n", "plt.xlabel('dimension n')\n", "plt.ylabel('Erreur ||Q\\'Q - I||')\n", "plt.title('Perte d\\'orthogonalité')\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "b5d9e208-d00f-4ef7-98ca-cd398c6fcf78", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 33, "id": "ea75b7ed-f555-46b7-af0c-6549d09ffe82", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.7085507187094725e-15\n", "3.4655609795412117\n" ] } ], "source": [ "n=10\n", "A = hilbert(n)\n", "\n", "Q, R = np.linalg.qr(A)\n", "# print('A=', A)\n", "print(np.linalg.norm(Q.T@Q - np.identity(n)))\n", "\n", "Q2, R2 = decompoQR(A)\n", "print(np.linalg.norm(Q2.T@Q2 - np.identity(n)))" ] }, { "cell_type": "code", "execution_count": null, "id": "e36ec24e-7673-4339-babe-57c12f248ae4", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.5" } }, "nbformat": 4, "nbformat_minor": 5 }