This commit is contained in:
2024-12-10 14:58:15 +01:00
parent 2678f91366
commit 74b5c790d8
2 changed files with 86 additions and 40 deletions

View File

@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 72,
"id": "349bd8d2-2bc8-45e3-9f8a-7d60f7dedd39",
"metadata": {
"tags": []
@@ -15,7 +15,7 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 73,
"id": "885fccca-d36b-4d94-ba40-03eb06df2c57",
"metadata": {},
"outputs": [],
@@ -33,7 +33,7 @@
},
{
"cell_type": "code",
"execution_count": 32,
"execution_count": 74,
"id": "69c3443f-b60c-4ebd-a640-c187eedc0e69",
"metadata": {
"tags": []
@@ -41,12 +41,43 @@
"outputs": [],
"source": [
"def decompoQR(A):\n",
" return np.linalg.qr(A) # tkt"
" \"\"\"\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\n",
" #return np.linalg.qr(A) # tkt"
]
},
{
"cell_type": "code",
"execution_count": 59,
"execution_count": 78,
"id": "0a1a13da-c084-4a5d-945f-b9edd39b5a24",
"metadata": {
"tags": []
@@ -56,7 +87,7 @@
"def algoQR(A, maxiter=10**3):\n",
" B = A\n",
" Q = np.identity(A.shape[0])\n",
" print('init', 'B=',B,'Q=', Q)\n",
" #print('init', 'B=',B,'Q=', Q)\n",
" for k in range(maxiter):\n",
" Qk, Rk = decompoQR(B)\n",
" B = Rk@Qk\n",
@@ -67,7 +98,7 @@
},
{
"cell_type": "code",
"execution_count": 56,
"execution_count": 79,
"id": "0662681f-fac3-4db2-b296-a6720eb41ad2",
"metadata": {
"tags": []
@@ -82,13 +113,6 @@
" [0. 1. 2. 1.]\n",
" [0. 0. 1. 2.]]\n",
"Valeur propres [3.61803399 2.61803399 0.38196601 1.38196601]\n",
"init B= [[2. 1. 0. 0.]\n",
" [1. 2. 1. 0.]\n",
" [0. 1. 2. 1.]\n",
" [0. 0. 1. 2.]] Q= [[1. 0. 0. 0.]\n",
" [0. 1. 0. 0.]\n",
" [0. 0. 1. 0.]\n",
" [0. 0. 0. 1.]]\n",
"[3.61803399 2.61803399 1.38196601 0.38196601]\n"
]
}
@@ -106,38 +130,19 @@
},
{
"cell_type": "code",
"execution_count": 68,
"execution_count": 80,
"id": "bfde5aa5-407f-400f-9347-3e1a7a9a47e4",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"init B= [[2. 1. 0. ... 0. 0. 0.]\n",
" [1. 2. 1. ... 0. 0. 0.]\n",
" [0. 1. 2. ... 0. 0. 0.]\n",
" ...\n",
" [0. 0. 0. ... 2. 1. 0.]\n",
" [0. 0. 0. ... 1. 2. 1.]\n",
" [0. 0. 0. ... 0. 1. 2.]] Q= [[1. 0. 0. ... 0. 0. 0.]\n",
" [0. 1. 0. ... 0. 0. 0.]\n",
" [0. 0. 1. ... 0. 0. 0.]\n",
" ...\n",
" [0. 0. 0. ... 1. 0. 0.]\n",
" [0. 0. 0. ... 0. 1. 0.]\n",
" [0. 0. 0. ... 0. 0. 1.]]\n"
]
},
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 68,
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
},