[Users-fr] multiplication matricielle

Samuel Gougeon sgougeon at free.fr
Lun 20 Juin 16:53:26 CEST 2016


Bonjour,

Le 20/06/2016 16:29, Pascal Boulet a écrit :
> Bonjour,
>
> 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:
>
> for  i=1:nat
>          pos(:)=x(i,:)
>          frac=M*pos'
>          mfprintf(fd,'%3s %10.5f %10.5f %10.5f\n',lab(i),frac(1),frac(2),frac(3))
>      end
> 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.
>
> 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.
.
Oui, il suffit de transposer votre matrice x avant de multiplier M par elle:
newX = M*x.'  // où x(:,i) désignent les coordonnées initiales de 
l'atome n°i, et newX(:,i) ses coordonnées finales.

rotate3d() utilise cette méthode pour donner les coordonnées après une 
rotation en 3D :
https://fileexchange.scilab.org/toolboxes/369000

Bonne continuation
Samuel

-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <https://lists.scilab.org/pipermail/users-fr/attachments/20160620/495621bb/attachment.htm>


Plus d'informations sur la liste de diffusion users-fr