[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