Changeset 287cc8 in git for ntl/src/mat_GF2E.c


Ignore:
Timestamp:
Jan 5, 2010, 5:51:13 PM (14 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
3c38b3810fd61108b01f123f5a91e13ccff52b20
Parents:
1d43d184dd871d77c1ba8e095d768f22a0fbe92f
Message:
ntl 5.5.2

git-svn-id: file:///usr/local/Singular/svn/trunk@12402 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • ntl/src/mat_GF2E.c

    r1d43d18 r287cc8  
    1212
    1313
    14  
    15 void add(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B) 
    16 { 
    17    long n = A.NumRows(); 
    18    long m = A.NumCols(); 
    19  
    20    if (B.NumRows() != n || B.NumCols() != m)   
    21       Error("matrix add: dimension mismatch"); 
    22  
    23    X.SetDims(n, m); 
    24  
    25    long i, j; 
    26    for (i = 1; i <= n; i++)   
    27       for (j = 1; j <= m; j++) 
    28          add(X(i,j), A(i,j), B(i,j)); 
    29 } 
    30  
    31 void mul_aux(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B) 
    32 { 
    33    long n = A.NumRows(); 
    34    long l = A.NumCols(); 
    35    long m = B.NumCols(); 
    36  
    37    if (l != B.NumRows()) 
    38       Error("matrix mul: dimension mismatch"); 
    39  
    40    X.SetDims(n, m); 
    41  
    42    long i, j, k; 
    43    GF2X acc, tmp; 
    44  
    45    for (i = 1; i <= n; i++) { 
    46       for (j = 1; j <= m; j++) { 
    47          clear(acc); 
    48          for(k = 1; k <= l; k++) { 
    49             mul(tmp, rep(A(i,k)), rep(B(k,j))); 
    50             add(acc, acc, tmp); 
    51          } 
    52          conv(X(i,j), acc); 
    53       } 
    54    } 
    55 } 
    56  
    57  
    58 void mul(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B) 
    59 { 
    60    if (&X == &A || &X == &B) { 
    61       mat_GF2E tmp; 
    62       mul_aux(tmp, A, B); 
    63       X = tmp; 
    64    } 
    65    else 
    66       mul_aux(X, A, B); 
    67 } 
    68  
    69  
     14
     15void add(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B)
     16{
     17   long n = A.NumRows();
     18   long m = A.NumCols();
     19
     20   if (B.NumRows() != n || B.NumCols() != m)
     21      Error("matrix add: dimension mismatch");
     22
     23   X.SetDims(n, m);
     24
     25   long i, j;
     26   for (i = 1; i <= n; i++)
     27      for (j = 1; j <= m; j++)
     28         add(X(i,j), A(i,j), B(i,j));
     29}
     30
     31void mul_aux(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B)
     32{
     33   long n = A.NumRows();
     34   long l = A.NumCols();
     35   long m = B.NumCols();
     36
     37   if (l != B.NumRows())
     38      Error("matrix mul: dimension mismatch");
     39
     40   X.SetDims(n, m);
     41
     42   long i, j, k;
     43   GF2X acc, tmp;
     44
     45   for (i = 1; i <= n; i++) {
     46      for (j = 1; j <= m; j++) {
     47         clear(acc);
     48         for(k = 1; k <= l; k++) {
     49            mul(tmp, rep(A(i,k)), rep(B(k,j)));
     50            add(acc, acc, tmp);
     51         }
     52         conv(X(i,j), acc);
     53      }
     54   }
     55}
     56
     57
     58void mul(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B)
     59{
     60   if (&X == &A || &X == &B) {
     61      mat_GF2E tmp;
     62      mul_aux(tmp, A, B);
     63      X = tmp;
     64   }
     65   else
     66      mul_aux(X, A, B);
     67}
     68
     69
    7070static
    71 void mul_aux(vec_GF2E& x, const mat_GF2E& A, const vec_GF2E& b) 
    72 { 
    73    long n = A.NumRows(); 
    74    long l = A.NumCols(); 
    75  
    76    if (l != b.length()) 
    77       Error("matrix mul: dimension mismatch"); 
    78  
    79    x.SetLength(n); 
    80  
    81    long i, k; 
    82    GF2X acc, tmp; 
    83  
    84    for (i = 1; i <= n; i++) { 
    85       clear(acc); 
    86       for (k = 1; k <= l; k++) { 
    87          mul(tmp, rep(A(i,k)), rep(b(k))); 
    88          add(acc, acc, tmp); 
    89       } 
    90       conv(x(i), acc); 
    91    } 
    92 } 
    93  
    94  
    95 void mul(vec_GF2E& x, const mat_GF2E& A, const vec_GF2E& b) 
    96 { 
     71void mul_aux(vec_GF2E& x, const mat_GF2E& A, const vec_GF2E& b)
     72{
     73   long n = A.NumRows();
     74   long l = A.NumCols();
     75
     76   if (l != b.length())
     77      Error("matrix mul: dimension mismatch");
     78
     79   x.SetLength(n);
     80
     81   long i, k;
     82   GF2X acc, tmp;
     83
     84   for (i = 1; i <= n; i++) {
     85      clear(acc);
     86      for (k = 1; k <= l; k++) {
     87         mul(tmp, rep(A(i,k)), rep(b(k)));
     88         add(acc, acc, tmp);
     89      }
     90      conv(x(i), acc);
     91   }
     92}
     93
     94
     95void mul(vec_GF2E& x, const mat_GF2E& A, const vec_GF2E& b)
     96{
    9797   if (&b == &x || A.position1(x) != -1) {
    9898      vec_GF2E tmp;
     
    102102   else
    103103      mul_aux(x, A, b);
    104 } 
     104}
    105105
    106106static
    107 void mul_aux(vec_GF2E& x, const vec_GF2E& a, const mat_GF2E& B) 
    108 { 
    109    long n = B.NumRows(); 
    110    long l = B.NumCols(); 
    111  
    112    if (n != a.length()) 
    113       Error("matrix mul: dimension mismatch"); 
    114  
    115    x.SetLength(l); 
    116  
    117    long i, k; 
    118    GF2X acc, tmp; 
    119  
    120    for (i = 1; i <= l; i++) { 
    121       clear(acc); 
    122       for (k = 1; k <= n; k++) { 
     107void mul_aux(vec_GF2E& x, const vec_GF2E& a, const mat_GF2E& B)
     108{
     109   long n = B.NumRows();
     110   long l = B.NumCols();
     111
     112   if (n != a.length())
     113      Error("matrix mul: dimension mismatch");
     114
     115   x.SetLength(l);
     116
     117   long i, k;
     118   GF2X acc, tmp;
     119
     120   for (i = 1; i <= l; i++) {
     121      clear(acc);
     122      for (k = 1; k <= n; k++) {
    123123         mul(tmp, rep(a(k)), rep(B(k,i)));
    124          add(acc, acc, tmp); 
    125       } 
    126       conv(x(i), acc); 
    127    } 
    128 } 
     124         add(acc, acc, tmp);
     125      }
     126      conv(x(i), acc);
     127   }
     128}
    129129
    130130void mul(vec_GF2E& x, const vec_GF2E& a, const mat_GF2E& B)
     
    139139}
    140140
    141      
    142  
    143 void ident(mat_GF2E& X, long n) 
    144 { 
    145    X.SetDims(n, n); 
    146    long i, j; 
    147  
    148    for (i = 1; i <= n; i++) 
    149       for (j = 1; j <= n; j++) 
    150          if (i == j) 
    151             set(X(i, j)); 
    152          else 
    153             clear(X(i, j)); 
    154 } 
     141
     142
     143void ident(mat_GF2E& X, long n)
     144{
     145   X.SetDims(n, n);
     146   long i, j;
     147
     148   for (i = 1; i <= n; i++)
     149      for (j = 1; j <= n; j++)
     150         if (i == j)
     151            set(X(i, j));
     152         else
     153            clear(X(i, j));
     154}
    155155
    156156
     
    254254   return 1;
    255255}
    256            
     256
    257257
    258258void transpose(mat_GF2E& X, const mat_GF2E& A)
     
    285285   }
    286286}
    287    
    288 
    289 void solve(GF2E& d, vec_GF2E& X, 
     287
     288
     289void solve(GF2E& d, vec_GF2E& X,
    290290           const mat_GF2E& A, const vec_GF2E& b)
    291291
     
    316316   for (i = 0; i < n; i++) {
    317317      M[i].SetSize(n+1, 2*GF2E::WordLength());
    318       for (j = 0; j < n; j++) 
     318      for (j = 0; j < n; j++)
    319319         M[i][j] = rep(A[j][i]);
    320320      M[i][n] = rep(b[i]);
     
    553553      }
    554554   }
    555    
     555
    556556   for (i = 0; i < n; i++)
    557557      for (j = 0; j < m; j++)
     
    607607
    608608      D[j] = i;
    609       inv(inverses[j], M[i][j]); 
     609      inv(inverses[j], M[i][j]);
    610610   }
    611611
     
    638638   }
    639639}
    640    
     640
    641641void mul(mat_GF2E& X, const mat_GF2E& A, const GF2E& b_in)
    642642{
     
    660660}
    661661
    662 void diag(mat_GF2E& X, long n, const GF2E& d_in) 
    663 { 
     662void diag(mat_GF2E& X, long n, const GF2E& d_in)
     663{
    664664   GF2E d = d_in;
    665    X.SetDims(n, n); 
    666    long i, j; 
    667  
    668    for (i = 1; i <= n; i++) 
    669       for (j = 1; j <= n; j++) 
    670          if (i == j) 
    671             X(i, j) = d; 
    672          else 
    673             clear(X(i, j)); 
    674 } 
     665   X.SetDims(n, n);
     666   long i, j;
     667
     668   for (i = 1; i <= n; i++)
     669      for (j = 1; j <= n; j++)
     670         if (i == j)
     671            X(i, j) = d;
     672         else
     673            clear(X(i, j));
     674}
    675675
    676676long IsDiag(const mat_GF2E& A, long n, const GF2E& d)
Note: See TracChangeset for help on using the changeset viewer.