Transformation matrice vecteur (octave)
Salut à tous
Dans le cadre d'un tp d'analyse matricielle, je dois créer une fonction sur Octave qui permet, à partir d'une matrice [de] $M_{ m\times p}(\R)$ de transformer celle-ci en un vecteur de taille $m\times p$. Autrement dit, la première ligne de cette matrice deviendra le premier bloc du vecteur et ainsi de suite..
Voici mon code, je ne sais pas quoi mettre dans le V() (ligne 5)
Quelqu'un aurait une idée ?
Merci d'avance.
Dans le cadre d'un tp d'analyse matricielle, je dois créer une fonction sur Octave qui permet, à partir d'une matrice [de] $M_{ m\times p}(\R)$ de transformer celle-ci en un vecteur de taille $m\times p$. Autrement dit, la première ligne de cette matrice deviendra le premier bloc du vecteur et ainsi de suite..
Voici mon code, je ne sais pas quoi mettre dans le V() (ligne 5)
Quelqu'un aurait une idée ?
Merci d'avance.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'utilise une transposée (symbole ') car la commande "reshape" prend les éléments ligne par ligne. Du coup, en transposant, la première ligne devient la première colonne. En appliquant "reshape", cette première colonne devient le premier bloc du vecteur. Pour finir, si tu avais une matrice à élément complexe, il vaut mieux utiliser la commande .' d'Octave car la commande ' donnera la matrice transposée conjuguée.
Vous avez bien compris ma question mais j'ai manqué de clarté.
En effet ici, la boucle me permet de numéroter ces blocs. Je m'en sers ensuite pour résoudre une équation de type $Ax=b$, par la méthode de relaxation par blocs (en algèbre).
Auriez-vous une idée avec une boucle ?
J'ai fais le code pour trouver les différents blocs $\textbf{v}_i$ sous forme d'une fonction:
Pas besoin de boucle pour la numérotation. Tu utilises juste le nombre de colonne de $M$. Dernière chose, tu parles de relaxation par bloc dans ton dernier message. Es-tu en train de faire la méthode de Gauss-Seidel ou Jacobi? Si oui, j'ai déjà écris un code Octave sur ces 2 méthodes. Tu peux les retrouver dans les archives du forum.
Comment ferais-tu pour une fonction réciproque, c'est dire à partir d'un certain vecteur, le transformer en matrice de taille $m\times p$...? Je sais qu'il est important de vérifier que $m$ est divisible par $p$.
Merci pour ton aide ! ;-)
Pour ta question sur la fonction réciproque, tu utilises encore la commande "reshape".
J'ai un peu de mal avec les indices... J'ai commencé par une boucle for, dans laquelle j'ai ajouté des boucles if...
Aurais tu une idée ?
Merci.
X et B de taille $p$ mais je dois les transformer en matrice $M_{m\times p}(\R)$ par la fonction que tu m'as proposé si dessus.
$w$ et $gamma$ sont en paramètre.
Comme hypothèse pour les dimensions de $B$ et $X_{\text{ini}}$, j'ai utilisé mon message précédent en espérant que j'ai bien compris ton problème. De plus, je n'ai pas utilisé les fonctions données dans les précédents messages. Il est inutile d'avoir ces fonctions qui correspondent juste à un "reshape". Voici le code:
Je ne saisis pas trop ce qu'est ici X_b..
J'ai peur que ton script soit un peu trop complexe, serais tu capable de le simplifier ?
A présent par rapport au code que j'ai écris dans mon précédent message. Dans ton code, je vois que tu n'as pas mis les sauvegardes que j'ai fais. Pourtant tu en as besoin car dans le calcul des résidus, tu utilises l'itération précédente pour une colonne fixée. De plus, la variable X_b me permet de choisir entre le vecteur d'initialisation pour la première itération et le vecteur mémoire correspondant à l'itération précédente, ici la variable X_b3.
Pour finir, voici le code complet en utilisant le format donné dans ton tp. J'ai gardé le même nom de fonction que toi "relax_bloc". Je joins également un fichier test correspondant à la partie $4$ de ton tp. Il te permettra d'essayer pour différentes initialisations.
Fichier test correspondant à la partie $4$ du tp:
Edit: Par rapport au message d'origine: modification de la formule de l'erreur par celle donnée dans la partie validation de ton tp. Simplification du code avec suppression d'une variable inutile.
Magnifique ! Copié/collé tel quel dans Matlab 2021, ça marche !
Dommage que le TP exclut la validation, ça aurait été intéressant.
Loly, si tu as d'autres sujets de TP dans cette matière, ça m'intéresse.
Qu'est ce qu'il y a d'autre dans ce cours ?
Cordialement,
Rescassol
je me permets de te solliciter à nouveau si cela ne te dérange pas...
Je dois implémenter la factorisation QR, pour le coup tout marche, sauf que R et Q sont échangées (i.e Q est triangulaire sup alors que c'est R qui doit l'être....) quand j'effectue un test.
Voila ce que j'ai fait, j'ai déjà optimisé l'algorithme.
Voici le code de la fonction calculant la décomposition QR : Fichier test pour la décomposition QR :
Autre question, je souhaite ensuite résoudre le problème des moindres carrés, avec les équations normales j'ai réussi, mais avec la factorisation QR, je dois poser R1, qui prends R et qui lui retire les 0 de la partie inférieure, afin qu'elle soit carrée et que je puisse l'inverser si $\det(A)\neq0$.
Sais tu comment définir cette matrice R1?
Le fichier test: