12static void moins_l(Value *a,
int i,
int n,
int p) {
19 for (k = 1; k <= p; k++) {
31static void moins_c(Value *a,
int i,
int n,
int p) {
38 for (k = 1; k <=
n; k++) {
50static void echange_l(Value *a,
int i,
int j,
int n,
int p) {
60 for (k = 1; k <= p; k++) {
76static void echange_c(Value *a,
int i,
int j,
int n,
int p) {
86 for (k = 1; k <=
n; k++) {
104static void ligne(Value *a,
int i,
int j, Value x,
int n,
int p) {
109 c1 = a + (i - 1) * p;
110 c2 = a + (j - 1) * p;
112 for (k = 1; k <= p; k++) {
129static void colonne(Value *a,
int i,
int j, Value x,
int n,
int p) {
137 for (k = 1; k <=
n; k++) {
158 int numero = 0, k, tousnuls;
164 c = a + (q - 1) * p + (p - 1);
166 for (k = p; k > q; k--) {
211 int numero = 0, k, tousnuls;
217 c = a + q - 1 + p * (
n - 1);
219 for (k =
n; k > q; k--) {
263 for (i = 1; i <=
n; i++) {
264 for (j = 1; j <= p; j++) {
290 b = a + (q - 1) + (q - 1) *
n;
292 for (i = q + 1; i <=
n; i++) {
314static int encore(Value *a,
int n,
int p,
int q, Value val) {
320 if ((q >=
n) || (q >= p))
368static void smith(Value *a, Value *b, Value *c, Value *b_inverse,
369 Value *c_inverse,
int n,
int p,
int q) {
372 Value x, pivot, tmp, x_inv;
380 if ((q <=
n) && (q <= p)) {
391 f = a + (q - 1) + (q - 1) * p;
399 for (k = q + 1; k <=
n; k++) {
407 ligne(a, k, q, x_inv,
n, p);
423 f = a + (q - 1) + (q - 1) * p;
431 for (k = q + 1; k <= p; k++) {
441 ligne(c_inverse, q, k, x, p, p);
461 ligne(c_inverse, i, q, x_inv, p, p);
462 smith(a, b, c, b_inverse, c_inverse,
n, p, q);
464 smith(a, b, c, b_inverse, c_inverse,
n, p, q + 1);
482static void hermite(Value *a, Value *b, Value *d,
int n,
int p,
int q) {
485 Value x, pivot, x_inv, tmp;
493 if ((q <= p) && (q <=
n)) {
502 c1 = a + (q - 1) + (q - 1) * p;
510 for (k = q + 1; k <=
n; k++) {
518 ligne(a, k, q, x_inv,
n, p);
534 for (k = 1; k < q; k++) {
541 ligne(a, k, q, x_inv,
n, p);
583 for (i = 0; i < A->
NbRows; i++)
605 for (i = 0; i < NbRows; i++)
606 for (j = 0; j < NbCols; j++)
667 Value *darte_matA, *darte_identite, *darte_id_inv;
707 free(darte_identite);
Matrix * Identity(unsigned size)
Matrix * Transpose(Matrix *A)
Matrix * Matrix_Copy(Matrix const *Src)
#define value_oppose(ref, val)
#define value_notzero_p(val)
#define value_absolute(ref, val)
#define value_decrement(ref, val)
#define value_zero_p(val)
#define value_assign(v1, v2)
#define value_set_si(val, i)
#define value_addmul(ref, val1, val2)
#define value_division(ref, val1, val2)
#define value_modulus(ref, val1, val2)
Matrix * Matrix_Alloc(unsigned NbRows, unsigned NbColumns)
void Matrix_Free(Matrix *Mat)