Transformer un vecteur en Matrice de Toeplitz

Signaler
Messages postés
4
Date d'inscription
samedi 23 février 2008
Statut
Membre
Dernière intervention
13 février 2010
-
Messages postés
92
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
23 septembre 2015
-
comment transformer un vecteur en une matrice de toeplitz

Exemple :
V=( 1, 2, 3 ,4)

====>

M=(
1234000
0123400
0012340
0001234)
A voir également:

4 réponses

Messages postés
92
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
23 septembre 2015

Déjà, tu ne peux pas le faire sans déterminer les dimensions de la matrice que tu veux, ainsi que l'élément qui sera sur la diagonale après ce n'est plus qu'une question de rangement :
Pour un vecteur de taille S, on prend une matrice NxM, ou N = S / 2 on coupe donc le vecteur en 2 : la première partie pour la première ligne de la matrice, la 2ème partie pour compléter les autres lignes à l'envers.
ça nous donne donc pour chaque ligne :
n = v_size / 2;
m = v_size / 2; // pour une matrice carrée
v1 = //v de 0 à n-1
v2 = //v de n à v_size
for (int i = 0 ; i < m ; i++)
{
for (count = 0 ; count < i ; count++)
{
line.push_back( v2[i - count - 1]);
}
for (int j = 0 ; j < n - count ; j++)
{
line.push_back( v1[j]);
}
l_matrix.push_back( line);
}


Avec ça tu devrais pouvoir te débrouiller, notamment pour permettre à l'utilisateur de choisir la taille finale de la matrice voulue...
Messages postés
4
Date d'inscription
samedi 23 février 2008
Statut
Membre
Dernière intervention
13 février 2010

j'ai pas compris
exemple:

#include <stdio.h>
#include <stdlib.h>
#define TAILLE 4

int main(void)
{
int v1[TAILLE] = {1,2,3,4} ;
int i;
for (i=0;i<TAILLE;i++){
printf("%d, ",v1[i]);
}
}

comment on calcule la matrice de toeplitz du vexteur v1?
Messages postés
4
Date d'inscription
samedi 23 février 2008
Statut
Membre
Dernière intervention
13 février 2010

???????????????aidez moi
Messages postés
92
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
23 septembre 2015

int v[] = {1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int v_size = sizeof( v) / sizeof( int);
int n = v_size / 2;
int m = v_size / 2; // pour une matrice carrée
int * v1 = new int[n]; // les valeurs qui seront affichées dans l'ordre
int * v2 = new int[n]; // les valeurs qui seront affichées en inversé
for (int i  = 0 ; i < n ; i++)
{// on remplit nos 2 sous tableaux
v1[i] = v[i];
v2[i] = v[i+n];
}
int ** matrix = new int*[m]; // la matrice finale MxN
int count;
int index;
for (int i = 0 ; i < m ; i++)
{
matrix[i] = new int[n];
index = 0;
for (count = 0 ; count < i ; count++)
{
matrix[i][index++] = v2[i - count - 1]; // on ajoute les valeurs en inverse
}
for (int j = 0 ; j < n - count ; j++)
{
matrix[i][index++] = v1[j]; // on ajoute les valeurs dans l'ordre
}
}
// on affiche maintenant le résultat
for (size_t i = 0 ; i < m ; i++)
{
for (size_t j = 0 ; j < n ; j++)
{
std::cout << matrix[i][j] << " " << (matrix[i][j] < 10 ? " " : "");
}
delete [] matrix[i]; // on commence à supprimer les pointeurs
std::cout << std::endl;
}
// on supprime nos pointeurs
delete [] matrix;
delete [] v2;
delete [] v1;


Ca fait à peu près le résultat que tu veux, mais pour une matrice carrée, à toi de le modifier pour qu'il fasse ce que tu veux...