[Users-fr] Tableau de matrices

classic Classic list List threaded Threaded
11 messages Options
Lesept Lesept
Reply | Threaded
Open this post in threaded view
|

[Users-fr] Tableau de matrices

Bonjour

J’aimerais faire le produit d’un certain nombre N de matrices 2x2 en cascade, toutes les matrices étant conçues selon le même modèle. Aujourd’hui, je fais une boucle : j’initialise la première matrice, puis pour i=2 à N, je calcule la matrice courante et multiplie la matrice précédente par la matrice courante.

J’aimerais optimiser ce produit pour diminuer le temps de calcul, en n’utilisant pas de boucle. Peut-on utiliser une fonction comme « prod », en construisant toutes les matrices au début ? Dans ce cas, comment les organiser ? En tableau de matrices ?

 

Merci

 

Fabrice Auzanneau

 


_______________________________________________
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
|

Re: Tableau de matrices

Bonjour,
S'agit-il de produits matriciels (*), ou de produits élément par élément (.*) ?
Samuel

Le 13/04/2015 16:51, AUZANNEAU Fabrice 125436 a écrit :

Bonjour

J’aimerais faire le produit d’un certain nombre N de matrices 2x2 en cascade, toutes les matrices étant conçues selon le même modèle. Aujourd’hui, je fais une boucle : j’initialise la première matrice, puis pour i=2 à N, je calcule la matrice courante et multiplie la matrice précédente par la matrice courante.

J’aimerais optimiser ce produit pour diminuer le temps de calcul, en n’utilisant pas de boucle. Peut-on utiliser une fonction comme « prod », en construisant toutes les matrices au début ? Dans ce cas, comment les



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

Re: Tableau de matrices

Bonjour,

Ne sachant pas comment sont vos matrices, je vous conseil d'essayer de voir si vous ne pouvez pas les diagonaliser ou les triangulariser. Cela réduirait le calculs, cependant l'étude doit se faire sur la forme général de vos matrices pour que vous puissez programmer avec les matrices diagonales ou triangulaires. De plus utilisez les matrices creuses pour ne pas avoir d'opérations inutiles tel que le produit de zéros.

Bien à vous

Axel

Le 13 avril 2015 18:07, Samuel Gougeon <[hidden email]> a écrit :
Bonjour,
S'agit-il de produits matriciels (*), ou de produits élément par élément (.*) ?
Samuel

Le 13/04/2015 16:51, AUZANNEAU Fabrice 125436 a écrit :

Bonjour

J’aimerais faire le produit d’un certain nombre N de matrices 2x2 en cascade, toutes les matrices étant conçues selon le même modèle. Aujourd’hui, je fais une boucle : j’initialise la première matrice, puis pour i=2 à N, je calcule la matrice courante et multiplie la matrice précédente par la matrice courante.

J’aimerais optimiser ce produit pour diminuer le temps de calcul, en n’utilisant pas de boucle. Peut-on utiliser une fonction comme « prod », en construisant toutes les matrices au début ? Dans ce cas, comment les



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



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

Re: Tableau de matrices

In reply to this post by Samuel GOUGEON

Il s’agit bien de produits matriciels

Fabrice

 

 

De : users-fr [mailto:[hidden email]] De la part de Samuel Gougeon
Envoyé : lundi 13 avril 2015 18:07
À : French users mailing list for Scilab.
Objet : Re: [Users-fr] Tableau de matrices

 

Bonjour,
S'agit-il de produits matriciels (*), ou de produits élément par élément (.*) ?
Samuel


 


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

Re: Tableau de matrices

In reply to this post by AxelMaths

Ce sont de simples matrices 2x2, leur produit ne doit pas être très compliqué et je pense que les diagonaliser serait plus cher en termes de calculs

Les matrices sont de la forme suivante :

 

(  C   Z*S )

( S/Z   C   )

 

Elles sont donc construites à partir de 3 nombres complexes : C, S et Z

 

Fabrice

 

De : users-fr [mailto:[hidden email]] De la part de Axel Mercier
Envoyé : mardi 14 avril 2015 08:44
À : French users mailing list for Scilab.
Objet : Re: [Users-fr] Tableau de matrices

 

Bonjour,

Ne sachant pas comment sont vos matrices, je vous conseil d'essayer de voir si vous ne pouvez pas les diagonaliser ou les triangulariser. Cela réduirait le calculs, cependant l'étude doit se faire sur la forme général de vos matrices pour que vous puissez programmer avec les matrices diagonales ou triangulaires. De plus utilisez les matrices creuses pour ne pas avoir d'opérations inutiles tel que le produit de zéros.

Bien à vous

Axel

 

Le 13 avril 2015 18:07, Samuel Gougeon <[hidden email]> a écrit :

Bonjour,
S'agit-il de produits matriciels (*), ou de produits élément par élément (.*) ?
Samuel

Le 13/04/2015 16:51, AUZANNEAU Fabrice 125436 a écrit :

Bonjour

J’aimerais faire le produit d’un certain nombre N de matrices 2x2 en cascade, toutes les matrices étant conçues selon le même modèle. Aujourd’hui, je fais une boucle : j’initialise la première matrice, puis pour i=2 à N, je calcule la matrice courante et multiplie la matrice précédente par la matrice courante.

J’aimerais optimiser ce produit pour diminuer le temps de calcul, en n’utilisant pas de boucle. Peut-on utiliser une fonction comme « prod », en construisant toutes les matrices au début ? Dans ce cas, comment les

 


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

 


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

Re: Tableau de matrices

Effectivement diagonaliser ne servirait à rien mais comment construisez vous la matrice courante à partir du produit obtenu?


Le 14 avril 2015 10:26, AUZANNEAU Fabrice 125436 <[hidden email]> a écrit :

Ce sont de simples matrices 2x2, leur produit ne doit pas être très compliqué et je pense que les diagonaliser serait plus cher en termes de calculs

Les matrices sont de la forme suivante :

 

(  C   Z*S )

( S/Z   C   )

 

Elles sont donc construites à partir de 3 nombres complexes : C, S et Z

 

Fabrice

 

De : users-fr [mailto:[hidden email]] De la part de Axel Mercier
Envoyé : mardi 14 avril 2015 08:44
À : French users mailing list for Scilab.
Objet : Re: [Users-fr] Tableau de matrices

 

Bonjour,

Ne sachant pas comment sont vos matrices, je vous conseil d'essayer de voir si vous ne pouvez pas les diagonaliser ou les triangulariser. Cela réduirait le calculs, cependant l'étude doit se faire sur la forme général de vos matrices pour que vous puissez programmer avec les matrices diagonales ou triangulaires. De plus utilisez les matrices creuses pour ne pas avoir d'opérations inutiles tel que le produit de zéros.

Bien à vous

Axel

 

Le 13 avril 2015 18:07, Samuel Gougeon <[hidden email]> a écrit :

Bonjour,
S'agit-il de produits matriciels (*), ou de produits élément par élément (.*) ?
Samuel

Le 13/04/2015 16:51, AUZANNEAU Fabrice 125436 a écrit :

Bonjour

J’aimerais faire le produit d’un certain nombre N de matrices 2x2 en cascade, toutes les matrices étant conçues selon le même modèle. Aujourd’hui, je fais une boucle : j’initialise la première matrice, puis pour i=2 à N, je calcule la matrice courante et multiplie la matrice précédente par la matrice courante.

J’aimerais optimiser ce produit pour diminuer le temps de calcul, en n’utilisant pas de boucle. Peut-on utiliser une fonction comme « prod », en construisant toutes les matrices au début ? Dans ce cas, comment les

 


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

 


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



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

Re: Tableau de matrices

J’ai N matrice 2x2 construites sur le schéma expliqué, je prends la première que je multiplie par la deuxième, le résultat est multiplié par la troisième, etc. jusqu’à la fin.

Avec une boucle ça donne un truc comme ça :

 

P=M(1)

For i=2 :N, P=P*M(i), end

 

 

De : users-fr [mailto:[hidden email]] De la part de Axel Mercier
Envoyé : mardi 14 avril 2015 10:54
À : French users mailing list for Scilab.
Objet : Re: [Users-fr] Tableau de matrices

 

Effectivement diagonaliser ne servirait à rien mais comment construisez vous la matrice courante à partir du produit obtenu?

 

Le 14 avril 2015 10:26, AUZANNEAU Fabrice 125436 <[hidden email]> a écrit :

Ce sont de simples matrices 2x2, leur produit ne doit pas être très compliqué et je pense que les diagonaliser serait plus cher en termes de calculs

Les matrices sont de la forme suivante :

 

(  C   Z*S )

( S/Z   C   )

 

Elles sont donc construites à partir de 3 nombres complexes : C, S et Z

 

Fabrice

 

De : users-fr [mailto:[hidden email]] De la part de Axel Mercier
Envoyé : mardi 14 avril 2015 08:44
À : French users mailing list for Scilab.
Objet : Re: [Users-fr] Tableau de matrices

 

Bonjour,

Ne sachant pas comment sont vos matrices, je vous conseil d'essayer de voir si vous ne pouvez pas les diagonaliser ou les triangulariser. Cela réduirait le calculs, cependant l'étude doit se faire sur la forme général de vos matrices pour que vous puissez programmer avec les matrices diagonales ou triangulaires. De plus utilisez les matrices creuses pour ne pas avoir d'opérations inutiles tel que le produit de zéros.

Bien à vous

Axel

 

Le 13 avril 2015 18:07, Samuel Gougeon <[hidden email]> a écrit :

Bonjour,
S'agit-il de produits matriciels (*), ou de produits élément par élément (.*) ?
Samuel

Le 13/04/2015 16:51, AUZANNEAU Fabrice 125436 a écrit :

Bonjour

J’aimerais faire le produit d’un certain nombre N de matrices 2x2 en cascade, toutes les matrices étant conçues selon le même modèle. Aujourd’hui, je fais une boucle : j’initialise la première matrice, puis pour i=2 à N, je calcule la matrice courante et multiplie la matrice précédente par la matrice courante.

J’aimerais optimiser ce produit pour diminuer le temps de calcul, en n’utilisant pas de boucle. Peut-on utiliser une fonction comme « prod », en construisant toutes les matrices au début ? Dans ce cas, comment les

 


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

 


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

 


_______________________________________________
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
|

Re: Tableau de matrices

Bonjour,

>J’ai N matrice 2x2 construites sur le schéma expliqué, je prends la première que je multiplie par la deuxième, le résultat est multiplié par la troisième, etc. jusqu’à la fin.
>
>Avec une boucle ça donne un truc comme ça :
>
>P=M(1)
>For i=2 :N, P=P*M(i), end

A moins que les valeurs C, S, Z soient les mêmes pour toutes les matrices ou aient des relations particulières entre elles menant à une définition récurrente simple, je crains que vous ne puissiez éviter la boucle.

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

Re: Tableau de matrices

En effet après quelques tests, malheureusement il semble impossible d'améliorer le produit.

Bien à vous

Le 14 avril 2015 13:56, <[hidden email]> a écrit :
Bonjour,

>J’ai N matrice 2x2 construites sur le schéma expliqué, je prends la première que je multiplie par la deuxième, le résultat est multiplié par la troisième, etc. jusqu’à la fin.
>
>Avec une boucle ça donne un truc comme ça :
>
>P=M(1)
>For i=2 :N, P=P*M(i), end

A moins que les valeurs C, S, Z soient les mêmes pour toutes les matrices ou aient des relations particulières entre elles menant à une définition récurrente simple, je crains que vous ne puissiez éviter la boucle.

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


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

Re: Tableau de matrices

Bonsoir,

quelle est la valeur typique de N ? Il est éventuellement possible de "dérouler" la boucle du produit dans une expression symbolique du type
"[c1 z1*s1;s1/z1 c1]*[c2 z2*s2;s2/z2 c2]*...*[cN zN*sN;sN/zN cN]" mais il faudra de toutes façons écrire une boucle pour fabriquer cette expression...

S.

Le 14/04/2015 19:23, Axel Mercier a écrit :
En effet après quelques tests, malheureusement il semble impossible d'améliorer le produit.

Bien à vous

Le 14 avril 2015 13:56, <[hidden email]> a écrit :
Bonjour,

>J’ai N matrice 2x2 construites sur le schéma expliqué, je prends la première que je multiplie par la deuxième, le résultat est multiplié par la troisième, etc. jusqu’à la fin.
>
>Avec une boucle ça donne un truc comme ça :
>
>P=M(1)
>For i=2 :N, P=P*M(i), end

A moins que les valeurs C, S, Z soient les mêmes pour toutes les matrices ou aient des relations particulières entre elles menant à une définition récurrente simple, je crains que vous ne puissiez éviter la boucle.

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



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


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

Re: Tableau de matrices

Merci

N vaut typiquement 30, mais peut augmenter.

 

J’ai cherché sur Internet et trouvé des infos sur des cas similaires sous Matlab qui montrent que la boucle peut difficilement être améliorée : http://stackoverflow.com/questions/6580656/matlab-how-to-vector-multiply-two-arrays-of-matrices

 

Merci de vos réponses

Fabrice


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