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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    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
    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 actif
    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
    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 actif
    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
    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);

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