<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Bonjour,<br>
      <br>
      Le 20/06/2016 16:29, Pascal Boulet a écrit :<br>
    </div>
    <blockquote
      cite="mid:0DADA45A-1E93-4D36-B587-55D9D627A9DC@univ-amu.fr"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      Bonjour,
      <div><br>
      </div>
      <div>Je travaille avec des atomes (dans une molécule) auxquels je
        veux appliquer une matrice de transformation 3x3. Les atomes
        sont repérés par des coordonnées x, y et z. En fait j’ai une
        liste de ’nat' atomes. Actuellement, pour appliquer la matrice à
        chacun des atomes je fais une boucle sur les atomes, tel que:</div>
      <div><br>
      </div>
      <div>
        <pre style="font-family: Monospaced; font-size: 12px;"><span style="color:rgb(160,32,240);">for</span> i<span style="color:rgb(92,92,92);">=</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span>nat
        pos<span style="color:rgb(74,85,219);">(</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(92,92,92);">=</span>x<span style="color:rgb(74,85,219);">(</span>i,<span style="color:rgb(255,170,0);">:</span><span style="color:rgb(74,85,219);">)</span>
        frac<span style="color:rgb(92,92,92);">=</span>M<span style="color:rgb(92,92,92);">*</span>pos<span style="color:rgb(92,92,92);">'</span>
        mfprintf<span style="color:rgb(74,85,219);">(</span>fd,<span style="color:rgb(188,143,143);">'</span><span style="color:rgb(188,143,143);">%3s %10.5f %10.5f %10.5f\n</span><span style="color:rgb(188,143,143);">'</span>,lab<span style="color:rgb(74,85,219);">(</span>i<span style="color:rgb(74,85,219);">)</span>,frac<span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(74,85,219);">)</span>,frac<span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">2</span><span style="color:rgb(74,85,219);">)</span>,frac<span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">3</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span>
    <span style="color:rgb(160,32,240);">end</span></pre>
        <div>Les positions de tous les atomes sont contenues dans la
          matrice x(1:nat,1:3). Dans la boucle chaque position est
          stockée dans pos(1:3) puis multipliée par la matrice de
          transformation M. Ensuite j’écris le résultat dans un fichier.</div>
      </div>
      <div><br>
      </div>
      <div>Je voudrais simplement savoir s’il y a une méthode plus
        efficace qui permettrait de s’affranchir de la boucle sur le
        nombre d’atomes et pour bénéficier de la vectorisation de
        Scilab.</div>
    </blockquote>
    .<br>
    Oui, il suffit de transposer votre matrice x avant de multiplier M
    par elle:<br>
    newX = M*x.'  // où x(:,i) désignent les coordonnées initiales de
    l'atome n°i, et newX(:,i) ses coordonnées finales.<br>
    <br>
    rotate3d() utilise cette méthode pour donner les coordonnées après
    une rotation en 3D :<br>
    <a class="moz-txt-link-freetext" href="https://fileexchange.scilab.org/toolboxes/369000">https://fileexchange.scilab.org/toolboxes/369000</a><br>
    <br>
    Bonne continuation<br>
    Samuel<br>
    <br>
  </body>
</html>