Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

aide matlab



  1. #1
    toitoine

    aide matlab


    ------

    Bonjour à toutes, à tous et surtout aux programmeurs(ses) MATLAB,

    Je suis en train de faire mon travail de diplôme.
    Aujourd'hui, j'ai deux petits problèmes à vous sousmettre:

    1. Comment extraire une matrice sous la forme d'une liste? Existe t'-il une fonction qui le fait directement?
    2. Comment faire le calcul de l'enveloppe d'un signal?

    Merci de venir à mon aide et de bien vouloir partager votre savoir.

    Antoine, école d'ingénieurs de Genève.

    -----

  2. Publicité
  3. #2
    jepoirrier

    Post Re : aide matlab

    Citation Envoyé par toitoine
    1. Comment extraire une matrice sous la forme d'une liste? Existe t'-il une fonction qui le fait directement?
    Je ne comprends pas vraiment ce que tu veux. Tu veux dire que, si tu as une matrice de 3 lignes et 4 colonnes, tu veux en sortir un "liste" = matrice de 12 lignes et 1 colonne ? Dans ce cas (et il y a certainement moyen d'optimiser) :
    Code:
    matrice1 = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12];
    [lignes colonnes] = size(matrice1);
    i = 1;
    for j = 1:lignes
        for k = 1:colonnes
            matrice2(i, 1) = matrice1(j, k);
            i = i + 1;
        end
    end
    matrice2
    Sinon, tu peux réexpliquer ?
    Citation Envoyé par toitoine
    2. Comment faire le calcul de l'enveloppe d'un signal?
    Je ne sais pas ce qu'est l'enveloppe d'un signal mais une recherche Google donne notamment ceci. Si çà peut t'aider ...

  4. #3
    toitoine

    Re : aide matlab

    Hello,

    Pour la matrice,
    ce que tu me dis est dans le sens où je veux aller, d'ailleurs j'ai essayé un truc du genre déjà. Malheureusement, oui, il faut un code qui demande moins de boucle for (très mauvais pour matlab, comme tu dois le savoir) car j'ai en fait une matrice 3d: 480*640*300. Il faut un jour de calcul avec notre méthode pour trouver ma matrice 1d.

    Peut être vais-je utiliser un autre logiciel.
    Sais-tu si un logiciel comme visual basic le ferais? Si oui , comment... car un morceau de mon code est sous VB6.

    Je vais tester le code que tu as trouvé pour l'enveloppe, ça a l'air pas mal pour une première approche...

    Merci infiniment.

  5. #4
    jepoirrier

    Re : aide matlab

    Citation Envoyé par toitoine
    Peut être vais-je utiliser un autre logiciel.
    Sais-tu si un logiciel comme visual basic le ferais? Si oui , comment... car un morceau de mon code est sous VB6.
    Je crois que tous les langages de programmation peuvent le faire. Le tout est de savoir s'ils iront beaucoup plus vite que la routine Matlab. Je n'ai jamais programmé en Visual Basic mais il doit pouvoir le faire (le code doit ressembler fort à celui de Matlab : les instructions if, for, ... sont presque les mêmes partout). On m'a toujours dit que les programmes écrit en C sont beaucoup plus rapides que ceux en Visual Basic -> Si tu as un programmeur C sous la main, demande-lui.

  6. A voir en vidéo sur Futura
  7. #5
    azt

    Re : aide matlab

    Salut,

    On peut utiliser une matrice directement comme une liste :
    Code:
    matrice1 = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12];
    
    x=matrice1(1)+matrice1(2)+matrice1(3)+matrice1(4)+matrice1(5)
    Le petit probleme que tu peut rencontrer c'est que matlab va prendre les valeurs de la première colonne puis celles de la seconde ... (Et encore, c'est juste pour la convention )
    En tapant :
    Code:
    matrice1 = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12];
    
    matrice2 =matrice1 ' ; // Transposition de la matrice
    
    matrice2(1)
    matrice2(2)
    matrice2(3)
    matrice2(4)
    matrice2(5)
    le problème devrait être résolu.

  8. #6
    jepoirrier

    Smile Re : aide matlab

    Salut,

    Apparemment, tes 2 codes ne fonctionnement pas ...

    Citation Envoyé par azt
    Code:
    matrice1 = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12];
    x=matrice1(1)+matrice1(2)+matrice1(3)+matrice1(4)+matrice1(5)
    Cela donne simplement la somme de tous les éléments (dans ce cas : 23).

    Et ton deuxième script :
    Code:
    matrice1 = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12];
    matrice2 = matrice1'; %Transposition de la matrice
    matrice2(1)
    matrice2(2)
    matrice2(3)
    matrice2(4)
    matrice2(5)
    Cela ne donne pas l'effet voulu : c'est de nouveau une matrice mais 3 x 4, du à la transposition.

    Maintenant, j'ai découvert un nouveau truc et j'ai fait un petit test non indicatif (sur un AMD Athlon 2000+, 240 Mo RAM, Matlab et Mozilla tournent) ... pour l'inclusion de code C dans les routines Matlab ... Et çà marche super bien ...

    Voici mon code (celui qui prend du temps, téléchargeable ici) :

    Code:
    matrice1 = magic(200);
    [lignes colonnes] = size(matrice1);
    tic
    i = 1;
    for j = 1:lignes
        for k = 1:colonnes
            matrice2(i, 1) = matrice1(j, k);
            i = i + 1;
        end
    end
    toc
    Temps (donné par tic / toc) : 29.3720 secondes

    Deuxième test, grâce à un fichier .c inclus (disponible ici *), le code matlab devient (téléchargeable ici) :

    Code:
    matrice1 = magic(200);
    tic
    matrice2 = m2l(matrice1);
    toc
    Temps d'exécution (donné par tic / toc) : 0 secondes.
    Maintenant, çà doit être facilement adaptable à des matrices de 3 dimensions ...

    * La syntaxe du code C correspond à la syntaxe imposée par MatLab (voir l'aide pour plus de détails) et le code doit être compilé avec la commande "mex m2l.c" (dans MatLab ; s'il le demande, vous pouvez utiliser "Lcc C version 2.4 in C:\MATLAB6P5\sys\lcc" pour compiler). Le fichier .DLL résultant doit se trouver dans le répertoire du script Matlab qui l'utilise.

  9. Publicité
  10. #7
    azt

    Re : aide matlab

    Salut,

    Oui bien sur on obtient de nouveau une matrice, mais matlab permet d'acceder aux elements comme dans une liste en ne passant qu'une seule valeur en paramètre et non deux ou plus pour une matrice.

    J'avoue que je n'ai pas été très clair dans l'exemple.

    Donc, en reprenant mon exemple deux, pour obtenir le 12 eme element, il suffit de taper :
    Code:
    matrice2(12)
    Et de faire de même chaque fois que l'on doit appeller un élément du tableau.

    Que pour matlab cela soit toujours une matrice n'est pas génant, il suffit d'utiliser un paramètre pour la matrice pour avoir un vecteur ligne

  11. #8
    olle

    Re : aide matlab

    sinon tu peux créer une fonction à un paramètre (comme une liste) qui à partir du paramètre va déterminer la ligne et la colonne de la matrice et va piocher dedans.

    du genre

    ------------------------------------
    function[valeur] = liste(indice)

    nblignes = length(matrice(:,1));
    nbcolonnes = length(matrice(1,);

    ligne = mod(indice, nbcolonnes);
    colonne = indice-nbcolonnes*ligne;

    valeur = matrice(ligne, colonne)
    ------------------------------------

    enfin ça dépend de ce que tu veux faire.
    il faut aussi soit passer la matrice en paramètre (ptet gourmand ?), soit la définir comme variable globale.
    Dernière modification par olle ; 10/10/2004 à 10h28.

Discussions similaires

  1. Aide MatLab
    Par folky dans le forum Mathématiques du supérieur
    Réponses: 14
    Dernier message: 30/11/2008, 15h22
  2. Aide Matlab
    Par Faymany dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 18/04/2007, 22h38
  3. aide matlab
    Par nanou14 dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 15/10/2006, 21h44
  4. Aide en MATLAB
    Par hamoudasafira dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 25/05/2006, 22h14
  5. aide matlab
    Par STF dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 29/10/2004, 14h43
Découvrez nos comparatifs produits sur l'informatique et les technologies.