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 :

Changement boucle for en meshgrid


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2014
    Messages : 67
    Par défaut Changement boucle for en meshgrid
    Bonjour,
    Je travail actuellement en double boucle for pour l’évolution du signal dans l'espace 2D,et vu que les calculs dans matlab sont à base des matrices, je voudrais remplacer mes deux boucles for (espace)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %---
        for i=1:Ymax
            for j=1:Xmax
    ...........
    ......... 
            end 
        end
    ----%
    en meshgrid
    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
      X0=15;
    Y0=30;
    sigma=2.5;
    c=3e8;
    A0=5;
    t0=30e-9;
    Xmax=50;
    Ymax=50;
     
    tinc=0.5e-9;
      kmax=length(0:tinc:tmax);
      S_recep(1:kmax)=0;
     
                 k=0; 
    for t=0:tinc:tmax;
     k=k+1;
        for i=1:Ymax
            for j=1:Xmax
     
                r=sqrt((i-X0)^2+(j-Y0)^2);
                %Coefficient d'attenuation emetteur-->reflecteur
                Ad=1/r;
     
     
     
                Sr(i,j)= A0*Ad*exp(-(r-c*(t-t0))^2/(2*sigma)^2);
     
            end
        end
     
        figure(1)
         caxis auto
        subplot(2,2,2)
        surf(Sr);      
         view(2)
         colormap
        % caxis auto
    end
    Avez vous une idée ?
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Comme ceci :

    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
    [j,i] = meshgrid(1:Xmax, 1:Ymax);
    % ou
    % [i,j] = ndgrid(1:Xmax, 1:Ymax);
     
    r = sqrt((i-X0).^2+(j-Y0).^2);
     
    Ad = 1./r;
     
    figure(2)
    subplot(2,2,2)
    s = surf(zeros(size(i)));
    axis tight equal
    view(2)
     
    for t = 0:tinc:tmax;
     
        Sr = A0*Ad.*exp(-(r-c*(t-t0)).^2/(2*sigma)^2);
     
        set(s, 'CData', Sr)
        drawnow
     
    end

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2014
    Messages : 67
    Par défaut
    J'ai essayé ainsi mais je sais pas pourquoi ca ne marche pas
    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
      X0=15;
    Y0=30;
    sigma=2.5;
    c=3e8;
    A0=5;
    t0=30e-9;
    Xmax=50;
    Ymax=50;
     
     
    [j,i] = meshgrid(1:Xmax, 1:Ymax);
     
    r = sqrt((i-X0).^2+(j-Y0).^2);
     
    Ad = 1./r;
     
    figure(2)
    subplot(2,2,2)
    s = surf(zeros(size(i)));
    axis tight equal
    view(2)
     
    for t = 0:tinc:tmax;
     
        Sr = A0*Ad.*exp(-(r-c*(t-t0)).^2/(2*sigma)^2);
     
        set(s, 'CData', Sr)
        drawnow
     
    end

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2014
    Messages : 67
    Par défaut
    bravoo, je vous remercie,j'ai trouvé l'erreur
    ca marche trés bien

  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 317
    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 317
    Par défaut
    Par contre, tu sembles avoir inversé des indices , non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i=1:Ymax
            for j=1:Xmax
    
                r=sqrt((i-X0)^2+(j-Y0)^2);

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2014
    Messages : 67
    Par défaut
    yes,j'avais pas fait attention,je viens de les rectifier
    Merci

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Quelle équivalence as-tu utilisée ?

    Montre nous ton code corrigé

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2014
    Messages : 67
    Par défaut
    j'ai procéder ainsi:
    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
    X0=15;
    Y0=30;
    sigma=2.5;
    c=3e8;
    A0=5;
    t0=30e-9;
     tmax=1.6e-6;
    Xmax=50;
    Ymax=50;
    [i,j] = meshgrid(1:Xmax, 1:Ymax);
     
     
                    r=sqrt((i-X0).^2+(j-Y0).^2);
                %Coefficient d'attenuation emetteur-->reflecteur
                Ad=1./r;
     
    figure(1)
    subplot(2,2,2)
    s = surf(zeros(size(i)));
    colormap
    axis tight equal
    view(2)
     
       tinc=1e-9;
        kmax=length(0:tinc:tmax);
      S_recep(1:kmax)=0;
      k=0;
    for t = 0:tinc:tmax;
        k=k+1;
        Sr = A0*Ad.*exp(-(r-c*(t-t0)).^2/(2*sigma)^2);%
     
        set(s, 'CData', Sr)
        drawnow
        shading interp
           S_recep(k)=(Sr(X0, Y0));
     
       subplot(2,2,4)
       plot(S_recep);
     
       xlim([0 tmax/tinc])
      xlabel(' Temps en indice')
     
     ylabel('Amplitude')
         title(['\fontsize{12}Temps = ',num2str(t/1e-9),'\fontsize{12}(ns)'])
     
    end

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    La ligne suivante ne sert à rien :


  10. #10
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2014
    Messages : 67
    Par défaut
    Merci pour votre vérification,
    lorsque j'ai voulu placé deux autres positions qui joue le rôle des réflecteurs, ça ne marche pas, erreur au niveau de % rk=sqrt((i-Xr).^2+(j-Yr).^2);%
    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
     
    X0=15;
    Y0=30;
    sigma=2.5;
    c=3e8;
    A0=5;
    t0=30e-9;
     tmax=1.6e-6;
    Xmax=50;
    Ymax=50;
    [i,j] = meshgrid(1:Xmax, 1:Ymax);
    %------Reflecteur1-----%
    Xr(1)=40;
     Yr(1)=30;
     Thau(1)=150e-9;
     A(1)=1;
     %------reflecteur2-----%
      Xr(2)=40;
     Yr(2)=22;
     Thau(2)=89e-9;
     A(2)=-1;
     
                    r=sqrt((i-X0).^2+(j-Y0).^2);
                %Coefficient d'attenuation emetteur-->reflecteur
                Ad=1./r;
                rk=sqrt((i-Xr).^2+(j-Yr).^2);
                %Coefficient d'attenuation reflecteur--> recepteur
                Ark=1./rk;
                Ddr=sqrt((Xr-X0).^2+(Yr-Y0).^2);
                 tdr=Ddr./c;
                Adr=1./Ddr;
    figure(1)
    subplot(2,2,2)
    s = surf(zeros(size(i)));
    axis tight equal
    view(2)
     
       tinc=1e-9;
        kmax=length(0:tinc:tmax);
      S_recep(1:kmax)=0;
      k=0;
    for t = 0:tinc:tmax;
        k=k+1;
        Sr = A0*Ad.*exp(-(r-c*(t-t0)).^2/(2*sigma)^2)+sum((A0*A.*Adr.*Ark).*exp(-(rk-c*(t-t0-tdr-Thau)).^2/(2*sigma)^2));%
     
        set(s, 'CData', Sr)
        drawnow
        shading interp
           S_recep(k)=(Sr(X0, Y0));
     
       subplot(2,2,4)
       plot(S_recep);
     
       xlim([0 tmax/tinc])
      xlabel(' Temps en indice')
     
     ylabel('Amplitude')
         title(['\fontsize{12}Temps = ',num2str(t/1e-9),'\fontsize{12}(ns)'])
     
    end
    pouvez-vous voir d’où vient cette erreur?
    Merci

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Pense à mettre le message d'erreur complet :

    Error using  - 
    Matrix dimensions must agree.
    
    Error in test (line 25)
    rk=sqrt((i-Xr).^2+(j-Yr).^2);
    Dans ce cas, on consulte la FAQ : Matrix dimensions must agree.

    Dans ton cas :

    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
    >> size(i)
     
    ans =
     
        50    50
     
    >> size(Xr)
     
    ans =
     
         1     2
     
    >> i-Xr;
    Error using  - 
    Matrix dimensions must agree.
    C'est donc tout à fait normal.

    Tu dois faire deux soustractions séparément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >> i-Xr(1);
    >> i-Xr(2);

  12. #12
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2014
    Messages : 67
    Par défaut
    je ne vois pas comment faire.j'ai fait quelques tests mais toujours cet erreur

  13. #13
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2014
    Messages : 67
    Par défaut
    lorsque j'utilisai les deux boucles, ca marchait bien mais dans le nouveau code je sais pas pourquoi ca ne marche pas

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

Discussions similaires

  1. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 17h07
  2. Réponses: 3
    Dernier message: 06/07/2004, 11h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 20h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 23h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 12h54

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