Transformer un vecteur en Matrice de Toeplitz

cs_majdiom Messages postés 4 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 13 février 2010 - 10 févr. 2010 à 20:02
dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015 - 15 févr. 2010 à 10:42
comment transformer un vecteur en une matrice de toeplitz

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

====>

M=(
1234000
0123400
0012340
0001234)

4 réponses

dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015
12 févr. 2010 à 10:23
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...
0
cs_majdiom Messages postés 4 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 13 février 2010
12 févr. 2010 à 23:26
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?
0
cs_majdiom Messages postés 4 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 13 février 2010
13 févr. 2010 à 22:31
???????????????aidez moi
0
dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015
15 févr. 2010 à 10:42
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...
0