#include #include #include #include #include "matrice.h" void matrice_somme(matrice *r, matrice a, matrice b) { int i, j; int n = a.n; int m = a.m; assert(b.n == n && r->n == n && b.m == m && r->m == m); for (i = 0; i < n; i++) for (j = 0; j < m; j++) r->valeurs[i * m + j] = a.valeurs[i * m + j] + b.valeurs[i * m + j]; } void matrice_produit(matrice *r, matrice a, matrice b) { int i, j, k; int n = a.n; int m = b.m; int p = a.m; assert(b.n == p && r->n == n && r->m == m); for (i = 0; i < n; i++) for (j = 0; j < m; j++) { r->valeurs[i * p + j] = 0.; for (k = 0; k < p; k++) r->valeurs[i * m + j] += a.valeurs[i * p + k] * b.valeurs[k * m + j]; } } void matrice_identite(matrice *m_id) { int i, j; int n = m_id->n; assert(m_id->m == n); for (i = 0; i < n; i++) for (j = 0; j < n; j++) m_id->valeurs[i * n + j] = (i == j)? 1. : 0.; } void matrice_nulle(matrice *m_nulle) { int i, j; int n = m_nulle->n; int m = m_nulle->m; for (i = 0; i < n; i++) for (j = 0; j < m; j++) m_nulle->valeurs[i * m + j] = 0.; } void matrice_modifier(matrice *m, int i, int j, double nouvelle_valeur) { m->valeurs[i * m->m + j] = nouvelle_valeur; } double matrice_maximum(matrice m, int * pi, int * pj) { int i, j; int imax = 0; int jmax = 0; for (i = 0; i < m.n; i++) for (j = 0; j < m.m; j++) if (m.valeurs[i * m.m + j] > m.valeurs[imax * m.m + jmax]) { imax = i; jmax = j; } if (pi != NULL) *pi = imax; if (pj != NULL) *pj = jmax; return m.valeurs[imax * m.m + jmax]; } void matrice_afficher(matrice m) { int i, j; for (i = 0; i < m.n; i++) { printf("("); for (j = 0; j < m.m - 1; j++) printf("%8.3f \t", m.valeurs[i * m.m + j]); printf("%8.3f)\n", m.valeurs[i * m.m + m.m - 1]); } }