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 :

Simulation de la fréquence en fonction de lambda


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut Simulation de la fréquence en fonction de lambda
    bonjour à tous
    je suis entrain d'étudier la localisation de la lumière dans les cristaux photoniques périodiques et quasi périodiques 1D et 2D.
    alors, mon travail consiste à faire la simulation sur MATLAB de la réflectivité en fonction de la pulsation.(behh, c'est juste la première partie ), mais vraiment j'arrive pas à avoir des résultats
    mon problème se limite à cette partie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %%%%%% variation de omega en fonction de lambda %%%%%%%
        for e=1:length(lambda)
            omega(e)=2.*pi.*c./lambda(e)
        end
         %%%%%%%%% variation de omega/omega0 %%%%%%%
        for jj=length(lambda)
            x(jj)=(omega(jj)/omega0);
    Il y a surement quelque chose qui ne va pas !
    si quelqu'un pouvait m'aider je serais vraiment reconnaissante

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour et bienvenue sur le forum

    Quel est le problème précisément ici ?
    Obtiens-tu un message d'erreur ? Si oui lequel ?
    Un résultat inattendu ?
    ...

    À première vue je ne vois rien de choquant hormis for jj=1:length(lambda) manquant.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    :p
    t'as raison ^_^
    bon le problème c'est que j’attends plus de 10 min après le lancement du programme , il fait ses calculs, j’obtiens des résultats (comme chiffre) mais pas de graphe ! seulement une grille c'est à dire que j'obtiens rien en vérité :\
    bon voici le programme en entier :
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    clear all
    lambda0=0.5;
    c=3e8
    omega0=2.*pi.*c./lambda0;
    lambda=0.3:0.0001:1;
    %%%%%%% structure de bragg %%%%%%
    j_Iter=8;
    B1='BH'
    Bg1='H'
    for j=1:j_Iter+1
        if j==j_Iter+1
            break
        end
        eval(sprintf('Bg%d=strcat(Bg%d,B%d )',j+1,j,1));
    end
    %%%%%%%%%%%% indice de refraction du systeme multicouche%%%%%%%%%%%%%%%%%%%%%%
     
    for kk=1:length(eval(sprintf('Bg%d',j)))
     
       if (eval(sprintf('Bg%d(%d)',j,kk))=='H')
           n(kk)=2.3;
       else
           n(kk)=1.45;
       end
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    p=length(eval(sprintf('Bg%d',j)));% nombre des couches
      n(p+1)=1.5; %indice de refraction de substrat
        n0=1;%indice de refraction de l'air
        %%%%%%%%%%%%coefficient de distinction%%%%%%
        for m=1:p+1
            K(m)=0;
        end
        %%%%%%%%%%%%%indice de refraction%%%%%%
       N0=1;
    %    %%%%%%%%%%%%%%%%%variation de theta0%%%%%%%%%%%%
       theta0=0;
        for tt=1:length(theta0)
        y(tt)=theta0(tt) ;
        end
     
        %%%%%%%%%%%%%%%%%%%indices complexes %%%%%%%%%%%%%%%%%
        for m=1:p+1
            N(m)=(n(m)-i*K(m));
        end
        %%%%%%%%%%%%%%calcul des theta%%%%%%%%%%
        for m=1:p+1
            if (m==1)
                theta(m)=asin((N0/N(m))*sin(y(tt)));
            else
                 theta(m)=asin((N(m-1)/N(m))*sin(theta(m-1)));
            end
        end
        %%%%%% variation de omega en fonction de lambda %%%%%%%
        for e=1:length(lambda)
            omega(e)=2.*pi.*c./lambda(e)
        end
         %%%%%%%%% variation de omega/omega0 %%%%%%%
        for jj=length(omega)
            x(jj)=(omega(jj)/omega0);
             %%%%%%%% calcul des phi %%%%%%%%%%%
        phi0=0; 
        phi(p+1)=0;
         %%%%%% calcul de phi %%%%%%%%%
        for m=1:p
            phi(m)=0.5*pi*x(jj)*(cos(theta(m)));
        end
        %%%%%%% calcul les coefficient de Feresnel %%%%%%
     
    for m=1:p+1
        if (m==1)
            numRp(m)=(N0*cos(theta(m))-N(m)*cos(y(tt)));
            numTp(m)=2*N0*cos(y(tt));
            denomRp(m)=(N0*cos(theta(m))+N(m)*cos(y(tt)));
            denomTp(m)=(N0*cos(theta(m))+N(m)*cos(y(tt)));
        else
            numRp(m)=(N(m-1)*cos(theta(m-1))-N(m)*cos(theta(m)));
            numTp(m)=2*N(m-1)*cos(theta(m-1));
            denomRp(m)=(N(m-1)*cos(theta(m-1))+N(m)*cos(theta(m)));
            denomTp(m)=(N(m-1)*cos(theta(m-1))+N(m)*cos(theta(m)));
        end
    end
     
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
      for m=1:p+1
          rp(m)=(numRp(m)/denomRp(m));
          tp(m)=(numTp(m)/denomTp(m));
      end
     
      %%%%%%%%%%%%%%%%%coefficient de matrice%%%%%%%%%%%%%%%%%%%
     
      for m=2:p+1
          if (m==2)
              PRp=[exp(-i*phi(m-1))/tp(m-1) rp(m-1)*exp(i*phi(m-1))/tp(m-1); rp(m-1)*exp(-i*phi(m-1))/tp(m-1) exp(i*phi(m-1))/tp(m-1)];
              CRp=[exp(-i*phi(m))/tp(m) rp(m)*exp(i*phi(m))/tp(m); rp(m)*exp(-i*phi(m))/tp(m) exp(i*phi(m))/tp(m)];
              sp=PRp*CRp;
          else
              CRp=[exp(-i*phi(m))/tp(m) rp(m)*exp(i*phi(m))/tp(m); rp(m)*exp(-i*phi(m))/tp(m) exp(i*phi(m))/tp(m)];
              sp=sp*CRp;
          end
      end
     
     
    %%%%%%%%%%%%%%%Reflexion %%%%%%%%%%%%%%%%
    resR(jj,tt)=1/abs(sp(1,1)/sp(2,1))^2;
        end
    plot(x,resR)
     
    grid on
    ylabel('R','FontSize', 15,'color','Black')
    xlabel('\omega/\omega0', 'fontsize', 15, 'color','Black')
     
    xlim([0.5 1.67])
    ylim([0 1.1])
    si tu as MATLAB, tu peux l’exécuter et tu vas voir ce que j'essaye d'expliquer
    et merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    Concernant ton temps d'attente, évite d'abord d'afficher des résultats dans la Command Windows en rajoutant des ';' à la fin des lignes. Je t'invite aussi à consulter ce sujet de la FAQ.

    Concernant toutes les lignes eval( ... ) cet autre sujet de la FAQ.
    Et si tu veux aller plus loin : Vectorisation.

    Je ne vois toujours pas mon 1: manquant ligne 59

    PS : pense à bien indenter ton code : Ctrl+A, Ctrl+I sur l'éditeur de MATLAB.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    merci winjerome
    enfin ça marche
    mais j'ai une autre question :
    j'essaye de faire la visualisation 3D du code que je viens de partager!
    j'ai utilisé la commande "surf" comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x=0.5:1.67;
    y=0:1.1;
    for k =1:length(x)
        for l=1:length(y)
       resR(k,l)=1/abs(sp(1,1)/sp(2,1))^2;
        end
    end
    surf(x,y,resR);
    mais malheureusement ca marche pas !!

  6. #6
    Invité
    Invité(e)
    Par défaut
    Il te faut générer un maillage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [X Y] = meshgrid(x,y);
    surf(X,Y,resR);

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    oui je le sais déja !
    enfin pour représenter graphiquement cette surface, il s'agit au préalable de calculer une matrice z dont les éléments sont les "altitudes" z correspondant aux points de la grille. Cette matrice aura donc la dimension length (x) *length(y) (respectivement length(y) lignes, et length(x) colonnes).

    le problème ici c'est que 'resR' qui est pour moi le cote, n'est pas une matrice
    et je dois l'écrire en fonction de x et y !! pour que je puisse faire la graphe 3D!!

    excuse mon ignorance je suis débutante la-dessus !!

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par rihab houba Voir le message
    le problème ici c'est que 'resR' qui est pour moi le cote, n'est pas une matrice
    Heu ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for k =1:length(x)
        for l=1:length(y)
            resR(k,l)=1/abs(sp(1,1)/sp(2,1))^2;
        end
    end
    génèrent bien une matrice... une matrice dont toutes les valeurs sont les mêmes.
    Citation Envoyé par rihab houba Voir le message
    et je dois l'écrire en fonction de x et y !! pour que je puisse faire la graphe 3D!!
    Si tu souhaites obtenir de l'aide, il va falloir détailler un peu plus le problème...

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    le problème c que je dois obtenir le même graphe déja obtenu mais en 3D!! alors que j'obtiens un autre graphe qui n'a pas de sens!

Discussions similaires

  1. Réponses: 31
    Dernier message: 06/02/2010, 10h50
  2. simulation click / href dans un fonction JS
    Par jacek55 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 24/08/2009, 13h22
  3. Simulation de la fonction LIMIT de MySQL avec SQL Server
    Par Le Pharaon dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/11/2005, 10h43
  4. [T-SQL] COmment simuler la fonction isnumeric ?
    Par SegmentationFault dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 02/11/2005, 16h57
  5. Simuler la fonction eval
    Par topwl dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 26/08/2005, 01h44

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