Je suis terrible en algèbre linéaire et j'ai du mal à construire mes boucles pour multiplier deux matrices compressées sans les étendre et y compris les zéros.Multiplication de deux matrices triangulaires supérieures compressées
Par exemple,
0 1 2 3 * 10 11 12 13
0 4 5 6 0 14 15 16
0 0 7 8 0 0 17 18
0 0 0 9 0 0 0 19
est en fait juste
a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
b = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}
j'avais d'abord
for(i = 0; i < r1; ++i)
for(j = 0; j < c2; ++j)
for(k = 0; k < c1; ++k)
{
*(mult(i * cols) + j) += *(a(i * cols) + k) * (b + (k * cols) + j;
}
mais cela va évidemment hors des limites car il est construit comme si elles sont en 2D tableaux et passe à 16 lorsque la taille de chaque tableau est seulement 10 éléments. J'ai observé que les diagonales ne sont que les produits des seuls éléments sur les diagonales, par exemple c [4] = a [4] * b [4]
Je comprends aussi que pour la première rangée vous multipliez le même nombre de termes qu'il y a de colonnes, la deuxième rangée multiplie autant de termes - 1 et ainsi de suite.
Mais au-delà de cela, je suis assez perdu sur la façon de construire le code réel. Toute aide est grandement appréciée.