[Users-fr] multiplication matricielle

classic Classic list List threaded Threaded
4 messages Options
Pascal Boulet Pascal Boulet
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[Users-fr] multiplication matricielle

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.

Merci de votre réponse.
Cordialement,
Pascal


-
Pascal Boulet - MCF HDR, Resp. L1 MPCI - DEPARTEMENT CHIMIE
Aix-Marseille Université - ST JEROME - Avenue Escadrille Normandie Niemen - 13013 Marseille
Tél: +33(0)4 13 55 18 10 - Fax : +33(0)4 13 55 18 50
Email : [hidden email]



_______________________________________________
users-fr mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users-fr
Samuel GOUGEON Samuel GOUGEON
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: multiplication matricielle

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


_______________________________________________
users-fr mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users-fr
Samuel GOUGEON Samuel GOUGEON
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: multiplication matricielle

In reply to this post by Pascal Boulet
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
.
Pour être concret :
frac = M*x.';
// pour tester la sortie formatée dans la console, sans boucle :
frac = frac.';
mprintf('%3s %10.5f %10.5f %10.5f\n', lab(:), frac(:,1), frac(:,2), frac(:,3))

SG


_______________________________________________
users-fr mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users-fr
Pascal Boulet Pascal Boulet
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: multiplication matricielle

Super! merci!
Pascal

Le 20 juin 2016 à 17:09, [hidden email] a écrit :

> Envoyez vos messages pour la liste users-fr à
> [hidden email]
>
> Pour vous (dés)abonner par le web, consultez
> http://lists.scilab.org/mailman/listinfo/users-fr
>
> ou, par email, envoyez un message avec 'help' dans le corps ou dans le
> sujet à
> [hidden email]
>
> Vous pouvez contacter l'administrateur de la liste à l'adresse
> [hidden email]
>
> Si vous répondez, n'oubliez pas de changer l'objet du message afin
> qu'il soit plus spécifique que "Re: Contenu du digest de users-fr..."
>
>
> Thèmes du jour :
>
>   1. multiplication matricielle (Pascal Boulet)
>   2. Re: multiplication matricielle (Samuel Gougeon)
>   3. Re: multiplication matricielle (Samuel Gougeon)
>   4. Sortie de Scilab 6.0.0 beta 2 (Scilab Team)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Mon, 20 Jun 2016 16:29:58 +0200
> From: Pascal Boulet <[hidden email]>
> To: [hidden email]
> Subject: [Users-fr] multiplication matricielle
> Message-ID: <[hidden email]>
> Content-Type: text/plain; charset="windows-1252"
>
> 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.
>
> Merci de votre réponse.
> Cordialement,
> Pascal
>
>
> -
> Pascal Boulet - MCF HDR, Resp. L1 MPCI - DEPARTEMENT CHIMIE
> Aix-Marseille Université - ST JEROME - Avenue Escadrille Normandie Niemen - 13013 Marseille
> Tél: +33(0)4 13 55 18 10 - Fax : +33(0)4 13 55 18 50
> Email : [hidden email]
>
>
> -------------- section suivante --------------
> Une pièce jointe HTML a été nettoyée...
> URL: <http://lists.scilab.org/pipermail/users-fr/attachments/20160620/07774b07/attachment-0001.html>
>
> ------------------------------
>
> Message: 2
> Date: Mon, 20 Jun 2016 16:53:26 +0200
> From: Samuel Gougeon <[hidden email]>
> To: French users mailing list for Scilab <[hidden email]>
> Subject: Re: [Users-fr] multiplication matricielle
> Message-ID: <[hidden email]>
> Content-Type: text/plain; charset="windows-1252"; Format="flowed"
>
> 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: <http://lists.scilab.org/pipermail/users-fr/attachments/20160620/495621bb/attachment-0001.html>
>
> ------------------------------
>
> Message: 3
> Date: Mon, 20 Jun 2016 17:07:23 +0200
> From: Samuel Gougeon <[hidden email]>
> To: French users mailing list for Scilab <[hidden email]>
> Subject: Re: [Users-fr] multiplication matricielle
> Message-ID: <[hidden email]>
> Content-Type: text/plain; charset="windows-1252"; Format="flowed"
>
> 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
> .
> Pour être concret :
>
> frac = M*x.'; // pour tester la sortie formatée dans la console, sans
> boucle : frac = frac.'; mprintf('%3s %10.5f %10.5f %10.5f\n', lab(:),
> frac(:,1), frac(:,2), frac(:,3))
>
>
> SG
>
> -------------- section suivante --------------
> Une pièce jointe HTML a été nettoyée...
> URL: <http://lists.scilab.org/pipermail/users-fr/attachments/20160620/bb1312c8/attachment-0001.html>
>
> ------------------------------
>
> Message: 4
> Date: Mon, 20 Jun 2016 17:09:09 +0200
> From: Scilab Team <[hidden email]>
> To: [hidden email]
> Subject: [Users-fr] Sortie de Scilab 6.0.0 beta 2
> Message-ID: <[hidden email]>
> Content-Type: text/plain; charset="utf-8"; Format="flowed"
>
> Cher utilisateur de Scilab,
>
> Nous avons publié la beta-2 de Scilab 6.0.0, la version revisitée de
> notre plateforme open-source pour la modélisation, la simulation et
> l'analyse de données scientifiques.
>
> Cette beta-2 est une candidate à la version finale pour tous les
> utilisateurs, commerciaux ou de la communauté.
>
> Télécharger Scilab 6.0.0 beta-2
> <http://www.scilab.org/download/6.0.0-beta-2>
>
> *Spécifique à cette version :
>
> *--> Xcos - l'outil pour le design & simulation de systèmes dynamiques -
> utilise le nouveau moteur de Scilab et se lance en natif, ce qui doit
> fournir de bien meilleures performances et supporter de bien plus grands
> modèles. Xcos peut charger et simuler des diagrammes créés avec
> d'anciennes versions de Scilab,
>
> --> Stabilité pour la migration de toolbox - le logiciel est désormais
> suffisamment stable pour que vous portiez votre code vers Scilab 6 !
> Postez votre nouvelle version sur ATOMS <https://atoms.scilab.org/add/>.
>
> *Nouveau dans Scilab 6 :*
>
> --> Nouveau coeur de calcul permettant l'utilisation de larges sets de
> données,
>
> --> Outils de productivité pour le développement
> <http://scilab.io/products/scilab/algo-dev/> : debugger, profiler et
> coverage.
>
> Merci de nous communiquer vos retours.
> Nous poursuivons nos efforts pour améliorer Scilab pour tout le monde.
> Nous espérons que vous apprécierez cette version.
>
> --
> The Scilab Team
>
> -------------- section suivante --------------
> Une pièce jointe HTML a été nettoyée...
> URL: <http://lists.scilab.org/pipermail/users-fr/attachments/20160620/c7abad44/attachment.html>
>
> ------------------------------
>
> Subject: Pied de page des remises groupées
>
> _______________________________________________
> users-fr mailing list
> [hidden email]
> http://lists.scilab.org/mailman/listinfo/users-fr
>
>
> ------------------------------
>
> Fin de Lot users-fr, Vol 44, Parution 1
> ***************************************

_______________________________________________
users-fr mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users-fr
Loading...