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 :

[Syntaxe] Supprimer les itérations


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Points : 751
    Points
    751
    Par défaut [Syntaxe] Supprimer les itérations
    Bonjour,
    Je suis relativement débutant en Matlab,et j'ai des habitudes de programmeur non vectoriel... Je voulais juste avoir votre avis sur ce code, et notamment s'il y a la possibilité de gérer les deux boucles vectoriellement, plutôt qu'iterativement.
    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
     
    function [distance_matrix] = BS_user_distance(antenna_positions, user_positions)
    % This function computes distances in between users and all the base
    % stations in the BS_positions vector. It uses the standard module
    % definition of distance. The result is a cell tab representing the
    % distance between all users and all base stations. Each cell has a nested
    % vector representing the distance in between a user and all BSs. For
    % example, distance_matrix{2,2} will be a vector of antenna_positions length
    % containing distances detween user number 2 affiliated to cell2 and all
    % base stations.
     
    [line_dim, col_dim] = size(antenna_positions)
    % Is the antenna_positions a vector ?
    if ((line_dim ~= 1) && (col_dim ~= 1))
        error('BS_user_distance:argChk', 'The antenna positions must be a 1D vector')
    end
    % Is the user_positions a 2D array? We can't have more than 2D.
    if (ndims(user_positions) ~= 2)
        error('BS_user_distance:argChk', 'The user positions must be a 2D array')
    end
    % Put the vector in vertical shape if horizontal
    if (line_dim == 1)
        antenna_positions = antenna_positions.';
    end
     
    [line_dim, col_dim] = size(user_positions);
     
    % foreach user in te user_positions matrix, compute the distance between
    % him and all BSs and store in the cell array of line index user and column
    % index affiliated station.
    for (user_line_index = 1:1:line_dim)
        for (user_col_index = 1:1:col_dim)
            % compute euclidian distance
            distance_matrix{user_line_index,user_col_index} = abs( ...
                antenna_positions - user_positions(user_line_index,user_col_index));
        end
    end
    Pour indication, les deux tableaux d'entrée sont complexes.
    J'essaie de prendre de bonnes habitudes dès le départ.
    Merci.

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    user_line_index = (1:1:line_dim);
    user_col_index = (1:1:col_dim);
            % compute euclidian distance
    distance_matrix{user_line_index,user_col_index} = abs( ...
    antenna_positions - user_positions(user_line_index,user_col_index));

  3. #3
    Membre éclairé
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Points : 751
    Points
    751
    Par défaut
    (Re)Salut,
    J'avais pensé à ça, mais du coup ma soustraction matricielle ne marche pas, car je n'ai pas les même dimensions (En gros antenna_positions est un vecteur).
    Merci quand même.

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    là tu me poses une colle
    pourtant j'avais testé

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 948
    Points
    52 948

  6. #6
    Membre éclairé
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Points : 751
    Points
    751
    Par défaut
    Voilà ma solution vectorisée, grâce à l'aide de http3.0 et Dut. Le petit topic passé en lien était intéressant, j'ai pris la solution me paraissant la plus lisible, pas forcément la plus rapide...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    user_line_index = (1:1:line_dim);
    user_col_index = (1:1:col_dim);
            % compute euclidian distance
    distance_matrix{user_line_index,user_col_index} = abs( ...
    repmat(antenna_positions, size(user_positions,1), 1)...
     - user_positions(user_line_index,user_col_index));
    Merci à vous deux en tout cas...

    PS : J'ai remplacé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((line_dim ~= 1) && (col_dim ~= 1))
    par ça (plus lisible) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isvector(antenna_positions))

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment supprimer les doublons
    Par djelloulc dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/09/2013, 14h30
  2. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  3. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 16h10
  4. [String] Comment supprimer les accents
    Par iuz dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/03/2004, 02h58
  5. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53

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