Début fonctionlocalisation boyls -> Calcul de X

This commit is contained in:
Yann Damour 2020-04-24 00:04:21 +02:00
parent 4e9ea680d7
commit 0651a70259
2 changed files with 112 additions and 2 deletions

View File

@ -201,7 +201,115 @@
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
"source": [
"#require \"lacaml.top\";;\n",
"#require \"alcotest\";;\n",
"#require \"str\";;\n",
"#require \"bigarray\";;\n",
"#require \"zarith\";;\n",
"#require \"getopt\";;\n",
"open Lacaml.D"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(*\n",
"NB: il faut que je change les noms des matrices car ce n'est pas toujours clair\n",
"*)\n",
"\n",
"(* Construction de la matrice X n par n *)\n",
"let n =3 \n",
"let ran=Mat.random ~range:1. ~from:0. n n;; (* Construction d'une matrice random n*n *)\n",
"\n",
"(* Antisymétrisation de la matrice et 0 sur la diagonale *)\n",
"let antisym = Mat.init_cols n n (fun i j -> if i>j then -. ran.{i,j} else ran.{j,i});;\n",
"\n",
"(* 0 sur la diagonale -> X *)\n",
"let m = Mat.init_cols n n (fun i j -> if i=j then 0. else antisym.{i,j});; \n",
"\n",
"(* Fonction 2 en un *)\n",
"(*\n",
"let x = Mat.init_cols n n (fun i j -> if i=j then 0.\n",
" else if i>j then -. ran.{i,j} else ran.{j,i});;\n",
" *)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(* Mise au carré de la matrice : X -> X² *)\n",
"let mm = gemm m m;;\n",
"\n",
"(* Copie de mm qui va être écrasée : X *)\n",
"let copie_mm = lacpy mm;;\n",
"\n",
"(* Diagonalisation de X² *)\n",
"let diag = syev mm;;\n",
"\n",
"copie_mm;; (* Copie de la matrice avant diagonalisation *)\n",
"mm;; (* Matrice avec les eigenvectors -> W *)\n",
"diag;; (* Vecteur contenant les eigenvalues *)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(* Passage de -tau² à tau² *)\n",
"let square_tau= Vec.abs diag;;\n",
"\n",
"(* Passage de tau² à tau *)\n",
"let tau = Vec.sqrt square_tau;;\n",
"\n",
"(* Passage du vecteur tau à la matrice avec les valeurs propres sur la diagonale *)\n",
"let m_tau = Mat.init_cols n n (fun i j -> if i=j then tau.{i} else 0.)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(* Calcul de cos tau *)\n",
"let cos_tau = Mat.cos m_tau;;\n",
"\n",
"(* Calcul de sin tau *)\n",
"let sin_tau = Mat.sin m_tau;; (* NB: Si on applique sin au vecteur tau il faut ensuité créer une matrice avec\n",
"des 1 en éléments extra diagonaux, c'est peut être mieux de faire comme ça *)\n",
"\n",
"(* Calcul de la transposée de W (mm) *)\n",
"let transpose_mm = Mat.transpose_copy mm;; \n",
"mm;;(* Vérification *) (*OK*)\n",
"\n",
"(* Calcul de tau^-1 *)\n",
"(*\n",
"let tau_1 = (* Je suis en train de chercher comment le calculer *)\n",
"*)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(* Calcul de R *)\n",
"(*\n",
"let r = gemm mm (gemm cos_tau transpose_mm) + gemm( mm gemm(tau_1 gemm( sin_tau (gemm transpose_mm m))))\n",
"*)\n",
"(* Ne peut pas fonctionner -> + (je n'ai pas trouvé de fonction ?) et il manque des calculs\n",
"Il faut surement découper ce calcul aussi ? *)"
]
}
],
"metadata": {

View File

@ -598,7 +598,9 @@
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
"source": [
"let local;;\n"
]
}
],
"metadata": {