Le produit matriciel dans Excel
Supposons que vous désiriez obtenir une matrice C = A * B, c’est-à-dire qui soit le produit de deux autres matrices A et B. Dans l’exemple ci-dessous, nous voyons un exemple de ce produit matriciel.
La formule saisie de façon matricielle – donc avec la combinaison [Ctrl]-[Maj]-[Entrée] – dans les cellules A9:C11 est- la formule =produitmat(A3:B5;D3:F4).
Si l’on en croit les informations proposées par Microsoft OnLine (à l'adresse http://office.microsoft.com/fr-fr/excel/HP052091811036.aspx), « PRODUITMAT renvoie l'erreur #VALEUR! » quand soit « Le nombre de colonnes de matrice1 est différent du nombre de lignes de matrice2 », soit « La taille de la matrice résultante est égale ou supérieure à un total de 5 461 cellules ».
Nous avons testé le premier cas en entrant la formule pour la matrice C dans A9:E13 au lieu de A9:C11 et constaté que les cellules excédentaires affichaient alors l'erreur « #N/A! » au lieu de l'erreur « #VALEUR! ».
Pour les 5.461 cellules, nous n’avons pas bien compris la raison de cette limite puisque cela ne tombe ni sur un carré exact (le carré le plus proche est 5.476, le carré de 74), ni près d’une puissance de 2. Ceci dit, nous avons constaté que le produit de deux matrices 73*73 se passait bien et que l’on obtenait bien l'erreur « #VALEUR! avec le produit de deux matrices 74*74.
Le seul rapport entre la limite acceptable de 5.460 cellules, un carré parfait, et une puissance de 2 est que 5.460 = 74^2 – 16 soit 74^2 – 2^2^2… Mais alors pourquoi le 74 ?
Si quelqu’un peut nous expliquer la raison de cette limite de 5.460, je suis preneur :)
La formule saisie de façon matricielle – donc avec la combinaison [Ctrl]-[Maj]-[Entrée] – dans les cellules A9:C11 est- la formule =produitmat(A3:B5;D3:F4).
Si l’on en croit les informations proposées par Microsoft OnLine (à l'adresse http://office.microsoft.com/fr-fr/excel/HP052091811036.aspx), « PRODUITMAT renvoie l'erreur #VALEUR! » quand soit « Le nombre de colonnes de matrice1 est différent du nombre de lignes de matrice2 », soit « La taille de la matrice résultante est égale ou supérieure à un total de 5 461 cellules ».
Nous avons testé le premier cas en entrant la formule pour la matrice C dans A9:E13 au lieu de A9:C11 et constaté que les cellules excédentaires affichaient alors l'erreur « #N/A! » au lieu de l'erreur « #VALEUR! ».
Pour les 5.461 cellules, nous n’avons pas bien compris la raison de cette limite puisque cela ne tombe ni sur un carré exact (le carré le plus proche est 5.476, le carré de 74), ni près d’une puissance de 2. Ceci dit, nous avons constaté que le produit de deux matrices 73*73 se passait bien et que l’on obtenait bien l'erreur « #VALEUR! avec le produit de deux matrices 74*74.
Le seul rapport entre la limite acceptable de 5.460 cellules, un carré parfait, et une puissance de 2 est que 5.460 = 74^2 – 16 soit 74^2 – 2^2^2… Mais alors pourquoi le 74 ?
Si quelqu’un peut nous expliquer la raison de cette limite de 5.460, je suis preneur :)
3 Commentaire(s):
Pourquoi chercher un rapport avec un carré parfait ?
By Joseluis, sur 5:06 PM
Tout simplement car il s'agit de matrices et que les matrices carrées sont des matrices typiques...
By Hervé Thiriez, sur 8:19 AM
Agaçantes ces limitations bizarres...
Ci-joint une fonction équivalente à PRODUITMAT mais sans limitation :
Function produitmatVB(M1 As Range, M2 As Range) As Variant
Dim intl As Integer
Dim intc As Integer
Dim inte As Integer
Dim intNbe As Integer
Dim R() As Double
Dim T1
Dim T2
ReDim R(M1.Rows.Count, M2.Columns.Count)
T1 = M1
T2 = M2
intNbe = UBound(T1, 2)
For intl = 1 To UBound(T1, 1)
For intc = 1 To UBound(T2, 2)
R(intl, intc) = 0#
For inte = 1 To intNbe
R(intl, intc) = R(intl, intc) + T1(intl, inte) * T2(inte, intc)
Next inte
Next intc
Next intl
produitmatVB = R
End Function
-------------------------
(*) nécessite Option Base 1
(**) Environ 12s pour multiplier 2 matrices carrées 256x256 sur un PC sans processeur particulièrement rapide.
By cduigou, sur 4:37 PM
Enregistrer un commentaire
<< Accueil