ateliers num eriques - reseau femtoreseau-femto.cnrs.fr/img/pdf/houches_ آ  2016-03-29آ ...

Download Ateliers num eriques - RESEAU FEMTOreseau-femto.cnrs.fr/IMG/pdf/Houches_ آ  2016-03-29آ  Ateliers num

Post on 14-Mar-2020

0 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Ateliers numériques

    L’objet de ces séances de travaux pratiques numériques est de réaliser un certain nombre de simulations numériques à l’aide du langage Scilab afin de se familiariser avec les notions introduites en cours.

    1 Scilab : kit de survie

    Le tableau ci-dessous regroupe quelques commandes utiles. On pourra naturellement consulter l’aide du logiciel ainsi que les liens http://www.scilab.org/product/man/, http://www.scilab. org/publications/index_publications.php?page=freebooks et http://wiki.scilab.org/. Sig- nalons un piège classique à éviter : pour une multiplication terme à terme de deux vecteur ou de deux matrices m1 et m2, utiliser m1 .* m2 car m1 * m2 correspond à une multiplication matricielle.

    Commande Objet Exemple scf Création d’une figure de numéro spécifié,

    ou définition de la figure spécifiée comme figure courante

    scf(1)

    clf Efface la figure courante (à utiliser avant tout nouveau dessin sur une figure exis- tante car par défaut les courbes succes- sives sont superposées)

    clf()

    plot Représentation graphique plot(y) ou plot(x,y) ou plot(x,y,’r’) xlabel Légende de l’axe des abscisses xlabel(’Axe des x’) ylabel Légende de l’axe des ordonnées ylabel(’Axe des y’) xtitle Titre du graphe xtitle(’Titre du graphe’) legend Affichage d’une légende legend([’y=sin(x)’ ’y=cos(x)’]) grayplot Représentation d’un tableau 2D en fausses

    couleurs. Utiliser Sgrayplot pour un af- fichage plus joli (mais plus lent)

    grayplot(x,y,z)

    drawlater Suspend la mise à jour immédiate du graphe (utile pour éviter le clignotement)

    drawlater()

    drawnow Mise à jour du graphe (à utiliser après drawlater)

    drawnow()

    %pi π %pi %i

    √ −1 %i

    zeros Création d’une matrice n × m constituées de 0

    zeros(n,m) ou zeros(mat)

    ones Création d’une matrice n × m constituées de 1

    ones(n,m) ou ones(mat)

    length Nombre d’éléments contenus dans un vecteur ou une matrice

    length(x)

    : Permet d’accéder à une ligne ou une colonne d’une matrice

    mat(:,1) = ones(n,1)

    regress Régression linéaire. Retourne un tableau coefs = [a b] où a et b sont les coefficients du fit linéaire a+b*x des données fournies

    coefs = regress(x,y)

    1

    http://www.scilab.org/product/man/ http://www.scilab.org/publications/index_publications.php?page=freebooks http://www.scilab.org/publications/index_publications.php?page=freebooks http://wiki.scilab.org/

  • 2 Bibliothèque de quelques fonctions utiles (femto.sci)

    La bibliothèque femto.sci regroupe quelques fonctions utiles, avec notamment quelques fonctions comme xlim qui existent sous Matlab mais pas (encore) sous Scilab.

    Commande Objet Exemple angle Calcul de l’argument d’un nombre com-

    plexe angle(z)

    unwrap Suppression par continuité des sauts de 2 π dans un tableau de phases

    unwrap(phi)

    sqr Prend le carré d’une grandeur sqr(x) heaviside Fonction de Heaviside heaviside(x) inverse Calcul de l’inverse d’un vecteur. Fonction

    utile car 1./x a l’inconvénient de trans- poser le vecteur, ce qui n’est pas le cas avec Matlab (probablement un bug de Scilab)

    inverse(x)

    xlim Fixe les limites de l’axe des abscisses dans un graphe

    xlim([0 10])

    ylim Fixe les limites de l’axe des ordonnées dans un graphe

    ylim([-1 1])

    setColorMap Choix de l’échelle de fausse couleur utilisée, selon l’indice spécifié. 0 corre- spond à des niveaux de gris, 1 à une échelle variant du bleu au rouge.

    setColorMap(1)

    ft Calcul de la transformée de Fourier d’un tableau, avec recentrage (fftshift) dans les deux espaces conjugués par transformée de Fourier

    y = ft(x)

    ift Calcul de la transformée de Fourier in- verse d’un tableau, avec recentrage (fft- shift) dans les deux espaces conjugués par transformée de Fourier

    x = ift(y)

    ftAxis Création de deux tableaux (fréquence et temps) calibrés l’un par rapport à l’autre pour une utilisation avec la transformée de Fourier

    [nu, t] = ftAxis(nPoints,nuMax)

    indice Calcul de l’indice de réfraction d’un matériau isotrope ou uniaxe en fonction de la longueur d’onde exprimée en microns

    [no, ne] = indice(’BBO’,lambda)

    csvread Lecture d’un fichier ascii au format csv (comma separated values)

    data = csvread(’CaF2.txt’)

    // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ // B i b l i o t h è q u e sommaire pour l a manipulat ion d ’ impuls ions femtosecondes

    // ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗

    clear ( ) ; // Pas i n d i s p e n s a b l e met permet d ’ é v i t e r l e message :

    // Warning : r e d e f i n i n g f u n c t i o n

    // à chaque f o i s que l ’ on recharge l e programme .

    2

  • // Modi f i ca t ion des l i m i t e s de l ’ axe des a b s c i s s e s d ’ un graphe

    // Doit ê t r e appe l é j u s t e apr ès p l o t

    // Directement d i s p o n i b l e dans Matlab

    function xlim ( x )

    ax = gca ( ) ;

    ax . data bounds (1 , 1 ) = x ( 1 ) ;

    ax . data bounds (2 , 1 ) = x ( 2 ) ;

    endfunction ;

    // Modi f i ca t ion des l i m i t e s de l ’ axe des ordonnées d ’ un graphe

    // Doit ê t r e appe l é j u s t e apr ès p l o t

    // Directement d i s p o n i b l e dans Matlab

    function ylim ( y )

    ax = gca ( ) ;

    ax . data bounds (1 , 2 ) = y ( 1 ) ;

    ax . data bounds (2 , 2 ) = y ( 2 ) ;

    endfunction ;

    // Phase ( en radians ) d ’ un nombre complexe

    // Directement d i s p o n i b l e dans Matlab

    function r e s u l t = ang le ( z )

    z = z + bool2s ( z==0); // Pour a j o u t e r 1 e t é v i t e r une erreur pour z =0.

    r e s u l t = atan ( imag( z ) , real ( z ) )

    endfunction ;

    // Supprime par c o n t i n u i t é l e s s a u t s de 2 p i dans un t a b l e a u de phases

    // Directement d i s p o n i b l e dans Matlab

    function r e s u l t = unwrap ( phi )

    r e s u l t = phi − [ 0 2∗%pi∗cumsum( f loor (.5+ d i f f ( phi )/2/%pi ) ) ] ; endfunction ;

    // Prend l ’ i n v e r s e d ’ un v e c te u r

    // Dans Sc i lab , s i x e s t une matrice n x 1 , 1./ x donne une matrice 1 x n

    // Cela ressemble b ien à un bug . Ce n ’ e s t pas l e cas dans Matlab

    // I l e s t donc recommandé de f a i r e i n v e r s e ( x ) p l u t ô t que 1./ x .

    function r e s u l t = i n v e r s e ( x )

    r e s u l t = ones ( x ) . / x ;

    endfunction ;

    // Prend l e carr é d ’ une grandeur ( p l u s rap ide que .ˆ2)

    function r e s u l t = sqr ( x )

    r e s u l t = x .∗ x ; endfunction ;

    // Fonction de Heavis ide

    function r e s u l t = h e a v i s i d e ( x )

    // ( x>0) e s t un t a b l e a u de boolean , transformé en 0 ou 1 à l ’ a ide de b o o l 2 s

    r e s u l t = bool2s (x>0);

    endfunction ;

    // Ecart quadra t i que d ’ une grandeur x pondér ée par l ’ ampl i tude de p r o b a b i l i t é f i e l d

    function r e s u l t = ecartQuad (x , f i e l d )

    n2 = sum( sqr (abs ( f i e l d ) ) ) ;

    xMoy = sum( x .∗ sqr (abs ( f i e l d ) ) ) / n2 ; x2Moy = sum( x .∗ x .∗ sqr (abs ( f i e l d ) ) ) / n2 ; r e s u l t = sqrt (x2Moy−sqr (xMoy ) ) ;

    endfunction ;

    // Choix de l ’ é c h e l l e de cou leur u t i l i s é e pour l e s r e p r é s e n t a t i o n s en f a u s s e s c o u l e u r s

    // 0 pour niveaux de g r i s , 1 pour je tco lormap

    3

  • function setColorMap ( i )

    hc f = gcf ( ) ;

    select i

    case 0 then

    hc f . color map = graycolormap ( 2 5 6 ) ;

    case 1 then

    hc f . color map = jetco lormap ( 2 5 6 ) ;

    end ;

    endfunction ;

    // Lecture d ’ un f i c h i e r a s c i i au format csv (comma separated v a l u e s )

    function r e s u l t = csvread ( f i leName )

    fd = mopen( f i leName ) ;

    s t r = mgetl ( fd ) ;

    [ n dummy] = s ize ( s t r ) ; // n e s t l e nombre de l i g n e s

    [m dummy] = s ize ( tokens ( s t r ( 1 ) , ” , ” ) ) ; // m e s t l e nombre de co lonnes

    for i =1:n

    l i n e = tokens ( s t r ( i ) , ” , ” ) ;

    for j =1:m

    r e s u l t ( i , j ) = sscanf ( l i n e ( j ) , ”%e” ) ;

    end ;

    end ;

    mclose ( fd ) ;

    endfunction ;

    // Transformée de Fourier avec r o t a t i o n pour c e n t r e r l a f r é quence n u l l e

    function r e s u l t = f t ( data )

    r e s u l t = f f t sh i f t ( f f t ( f f t sh i f t ( data ) ) ) ;

    endfunction ;

    // Transformée de Fourier i n v e r s e avec r o t a t i o n pour c e n t r e r l a f r é quence n u l l e

    function r e s u l t = i f t ( data )

    r e s u l t = f f t sh i f t ( i f f t ( f f t sh i f t ( data ) ) ) ;

    endfunction ;

    // f t A x i s

    // Création de deux t a b l e a u x ( f r é quence e t temps