IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Faire de l'objet avec matlab [Trucs & Astuces]


Sujet :

MATLAB

  1. #1
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut Faire de l'objet avec matlab
    Il suffit de manipuler des structures de pointeurs sur fonctions !

    voila un exemple, avec une petite classe implémentant une table de hashage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    function h = myhashtable()
     
    this = struct('keys', {{}}, 'values', {{}});
     
    h = struct('get',@get_, ...
        'getKey',@getKey, ...
        'add',@add , ...
        'remove',@remove, ...
        'isKey',@iskey, ...
        'isValue',@isvalue, ...
        'isEmpty',@isempty_);
     
     
        function idx = add(key, value)
            if isempty(this.keys)
                this.keys{end+1}   = key;
                this.values{end+1} = value;
                idx = length(this.keys);
                return
            end
            [v, idx] = get_(key);
            if isempty(idx)
                this.keys{end+1}   = key;
                this.values{end+1} = value;
                idx = length(this.keys);
            else
                this.values{idx} = value;
            end
        end
     
        function [value, idx] = get_(key)
            if nargin == 0
                value = {this.keys,this.values};
                return
            end
            value = [];
            idx = strmatch(key,this.keys);
            if ~isempty(idx)
                value = this.values(idx);
            end
        end
     
        function [key, idx] = getKey(value)
            if nargin == 0
                idx = this.values;
                key = this. keys;
                return
            end
            key = [];
            idx = strmatch(value,this.values);
            if ~isempty(idx)
                key = this.keys(idx);
            end
        end
     
        function idx = remove(key)
            [v,idx] = get_(key);
            if ~isempty(idx)
                this.keys{idx} = [];
                this.values{idx} = [];
            end
        end
     
        function out = iskey(key)
            if nargin == 0
                out = 0; 
                return;
            end
            out = strmatch(key,this.keys);
        end
     
        function out = isvalue(val)
            if nargin == 0
                out = 0; return;
            end
            out = strmatch(val,this.values);
        end
     
        function out = isempty_()
            if isempty(h.values) && isempty(h.keys)
                out = 1;
            else
                out = 0;
            end
        end
     
     
    end
    Exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    myhash = myhashtable
    myhash.add('a',1);
    myhash.add('b',2);
    [v,k] = myhash.get()

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Cette méthode est environ 100 fois plus lente que si l'on utilise les vrais objets matlab... Donc déconseillée !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Correction :

    Sur les "gros" algos les objets sont plus rapides
    Sur les "petits" algos les structs sont plus rapides



    En fait il semblerait que le code d'un objet soit + lent à accéder que celui d'une structure, mais que une fois à l'intérieur du code, celui-ci tourne beaucoup + rapidement pour les objets (à code identique !!).

    Par exemple, les getters sont bcp + rapides pour les structures, en revanche les constructeurs sont + rapides pour les objets.
    J'ai testé sur une classe 'quaternion' et il s'avère que pour les calculs simples du style addition, multiplication... les structs sont + rapides. En revanche pour un calcul comme l'élévation à la puissance n, les objets sont + rapides (et d'autant + que n est grand).

    La seule explication que je vois serait que le code pour les objets est peut-être stocké dans la cache alors que le code d'une structure est stockée dans la mémoire classique (????).

Discussions similaires

  1. Programmation orienté objet avec MATLAB R2007b
    Par Luigicube dans le forum MATLAB
    Réponses: 0
    Dernier message: 18/06/2010, 17h16
  2. faire varier des valeur avec Matlab
    Par Enthalpy dans le forum Simulink
    Réponses: 1
    Dernier message: 20/03/2010, 13h40
  3. Faire une diapo avec matlab
    Par pilipi dans le forum MATLAB
    Réponses: 5
    Dernier message: 02/03/2009, 19h23
  4. Réponses: 11
    Dernier message: 29/09/2008, 10h57
  5. Faire un PING avec Matlab
    Par cococococococo dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/07/2007, 07h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo