Changeset 6f2edc in git for Singular/LIB/matrix.lib
- Timestamp:
- Apr 28, 1997, 9:27:25 PM (27 years ago)
- Branches:
- (u'spielwiese', 'd1b01e9d51ade4b46b745d3bada5c5f3696be3a8')
- Children:
- 8c5a578cc8481c8a133a58030c4c4c8227d82bb1
- Parents:
- 6d09c564c80f079b501f7187cf6984d040603849
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/matrix.lib
r6d09c56 r6f2edc 1 // $Id: matrix.lib,v 1. 1.1.1 1997-04-25 15:13:26obachman Exp $2 // (GMG+BM)1 // $Id: matrix.lib,v 1.2 1997-04-28 19:27:22 obachman Exp $ 2 // (GMG/BM, last modified 22.06.96) 3 3 /////////////////////////////////////////////////////////////////////////////// 4 LIBRARY: matrix.lib PROCEDURES FOR MATRIX OPERATIONS 4 LIBRARY: matrix.lib PROCEDURES FOR MATRIX OPERATIONS 5 5 6 6 compress(A); matrix, zero columns from A deleted … … 9 9 dsum(A1,A2,..); matrix, direct sum of matrices A1,A2,... 10 10 flatten(A); ideal, generated by entries of matrix A 11 genericmat(n,m[,id]); generic nxm matrix [entries from id] 11 12 is_complex(c); 1 if list c is a complex, 0 if not 12 13 outer(A,B); matrix, outer product of matrices A and B 13 14 skewmat(n[,id]); generic skew-symmetric nxn matrix [entries from id] 14 submat(A,r,c); submatrix of A with rows/cols specified by intvec r/c 15 submat(A,r,c); submatrix of A with rows/cols specified by intvec r/c 15 16 symmat(n[,id]); generic symmetric nxn matrix [entries from id] 16 17 tensor(A,B); matrix, tensor product of matrices A nd B … … 32 33 33 34 proc compress (A) 34 USAGE: compress(A); A matrix/intmat/ideal/module 35 RETURN: matrix/intmat/ideal/module, zero columns/generators from A deleted 35 USAGE: compress(A); A matrix/ideal/module/intmat/intvec 36 RETURN: same type, zero columns/generators from A deleted 37 (in an intvec zero elements are deleted) 36 38 EXAMPLE: example compress; shows an example 37 39 { 38 if( typeof(A)=="matrix" ) { return(matrix(simplify(A,2))); } 39 if( typeof(A)=="intmat" )40 if( typeof(A)=="matrix" ) { return(matrix(simplify(A,2))); } 41 if( typeof(A)=="intmat" or typeof(A)=="intvec" ) 40 42 { 41 43 ring r=0,x,lp; 42 module m=module(matrix(A));43 int c= size(m);44 intmat B[nrows(A)][ c];44 if( typeof(A)=="intvec" ) { intmat C=transpose(A); kill A; intmat A=C; } 45 module m = matrix(A); 46 intmat B[nrows(A)][size(m)]; 45 47 int i,j; 46 for( i=1; i<=ncols(A); i ++ )47 { 48 if( m[i]!=[0] ) 49 { 48 for( i=1; i<=ncols(A); i=i+1 ) 49 { 50 if( m[i]!=[0] ) 51 { 50 52 j=j+1; 51 53 B[1..nrows(A),j]=A[1..nrows(A),i]; 52 54 } 53 55 } 56 if( defined(C) ) { return(intvec(B)); } 54 57 return(B); 55 58 } … … 66 69 intmat B[3][4]=1,0,3,0,4,0,5,0,6,0,7,0; 67 70 compress(B); 71 intvec C=0,0,1,2,0,3; 72 compress(C); 68 73 } 69 74 //////////////////////////////////////////////////////////////////////////////// 70 75 proc concat (list #) 71 USAGE: concat(A1,A2,..); A1,A2,... matrices 72 RETURN: matrix, concatenation of A1,A2,... . Number of rows of result matrix is 76 USAGE: concat(A1,A2,..); A1,A2,... matrices 77 RETURN: matrix, concatenation of A1,A2,... . Number of rows of result matrix is 73 78 max(nrows(A1),nrows(A2),...) 74 79 EXAMPLE: example concat; shows an example … … 76 81 int i; 77 82 module B=module(#[1]); 78 for( i=2; i<=size(#); i ++) { B=B,module(#[i]); }83 for( i=2; i<=size(#); i=i+1 ) { B=B,module(#[i]); } 79 84 return(matrix(B)); 80 85 } … … 92 97 93 98 proc diag (list #) 94 USAGE: diag(p,n); p poly, n integer 99 USAGE: diag(p,n); p poly, n integer 95 100 diag(A); A matrix 96 101 RETURN: diag(p,n): diagonal matrix, p times unitmatrix of size n 97 diag(A) : n*mxn*m diagonal matrix with entries all the entries of 102 diag(A) : n*mxn*m diagonal matrix with entries all the entries of the 98 103 nxm matrix A, taken from the 1st row, 2nd row etc of A 99 104 EXAMPLE: example diag; shows an example … … 104 109 int i; ideal id=#[1]; 105 110 int n=ncols(id); matrix A[n][n]; 106 for( i=1; i<=n; i ++) { A[i,i]=id[i]; }111 for( i=1; i<=n; i=i+1 ) { A[i,i]=id[i]; } 107 112 } 108 113 return(A); … … 118 123 //////////////////////////////////////////////////////////////////////////////// 119 124 120 proc flatten (matrix A)121 USAGE: flatten(A); A matrix122 RETURN: ideal, generated by all entries from A123 EXAMPLE: example flatten; shows an example124 {125 return(ideal(A));126 }127 example128 { "EXAMPLE:"; echo = 2;129 ring r=0,(x,y,z),ds;130 matrix A[3][3]=1,2,3,x,y,z,7,8,9;131 print(A);132 flatten(A);133 }134 ////////////////////////////////////////////////////////////////////////////////135 136 125 proc dsum (list #) 137 USAGE: dsum(A1,A2,..); A1,A2,... matrices 126 USAGE: dsum(A1,A2,..); A1,A2,... matrices 138 127 RETURN: matrix, direct sum of A1,A2,... 139 128 EXAMPLE: example dsum; shows an example … … 141 130 int i,N,a; 142 131 list L; 143 for( i=1; i<=size(#); i ++) { N=N+nrows(#[i]); }144 for( i=1; i<=size(#); i ++ )145 { 146 matrix B[N][ncols(#[i])]; 132 for( i=1; i<=size(#); i=i+1 ) { N=N+nrows(#[i]); } 133 for( i=1; i<=size(#); i=i+1 ) 134 { 135 matrix B[N][ncols(#[i])]; 147 136 B[a+1..a+nrows(#[i]),1..ncols(#[i])]=#[i]; 148 137 a=a+nrows(#[i]); … … 162 151 print(dsum(A,B,C)); 163 152 } 153 //////////////////////////////////////////////////////////////////////////////// 154 155 proc flatten (matrix A) 156 USAGE: flatten(A); A matrix 157 RETURN: ideal, generated by all entries from A 158 EXAMPLE: example flatten; shows an example 159 { 160 return(ideal(A)); 161 } 162 example 163 { "EXAMPLE:"; echo = 2; 164 ring r=0,(x,y,z),ds; 165 matrix A[3][3]=1,2,3,x,y,z,7,8,9; 166 print(A); 167 flatten(A); 168 } 169 //////////////////////////////////////////////////////////////////////////////// 170 171 proc genericmat (int n,int m,list #) 172 USAGE: genericmat(n,m[,id]); n,m=integers, id=ideal 173 RETURN: nxm matrix, with entries from id (default: id=maxideal(1)) 174 NOTE: if id has less than nxm elements, the matrix is filled with 0's, 175 genericmat(n,m); creates the generic nxm matrix 176 EXAMPLE: example genericmat; shows an example 177 { 178 if( size(#)==0 ) { ideal id=maxideal(1); } 179 if( size(#)==1 ) { ideal id=#[1]; } 180 if( size(#)>=2 ) { "// give 3 arguments, 3-rd argument must be an ideal"; } 181 matrix B[n][m]=id; 182 return(B); 183 } 184 example 185 { "EXAMPLE:"; echo = 2; 186 ring R=0,x(1..16),lp; 187 print(genericmat(4,4)); // the generic 4x4 matrix 188 changevar("R1",A_Z("a",4),R); 189 matrix A=genericmat(4,5,maxideal(1)^3); 190 print(A); 191 int n,m=4,3; 192 ideal i = ideal(randommat(1,n*m,maxideal(1),9)); 193 print(genericmat(n,m,i)); // matrix of generic linear forms 194 kill R1; 195 } 164 196 /////////////////////////////////////////////////////////////////////////////// 165 197 166 198 proc is_complex (list c) 167 199 USAGE: is_complex(c); c = list of size-compatible modules or matrices 168 RETURN: 1 if c[i]*c[i+1]=0 for all i, 0 if not. 200 RETURN: 1 if c[i]*c[i+1]=0 for all i, 0 if not. 169 201 NOTE: Ideals are treated internally as 1-line matrices 170 202 EXAMPLE: example is_complex; shows an example … … 186 218 } 187 219 example 188 { "EXAMPLE:"; echo = 2; 189 ring r=32003,(x,y,z),ds; 190 ideal i=x4+y5+z6,xyz,yx2+xz2+zy7; 220 { "EXAMPLE:"; echo = 2; 221 ring r=32003,(x,y,z),ds; 222 ideal i=x4+y5+z6,xyz,yx2+xz2+zy7; 191 223 list L=res(i,0); 192 224 is_complex(L); … … 202 234 { 203 235 int i,j; list L; 204 int N=nrows(A)*nrows(B); 205 matrix C[N][ncols(B)]; 206 for( i=1; i<=ncols(A); i++ ) 207 { 208 for( j=1; j<=nrows(A); j++ ) 209 { 210 C[(j-1)*nrows(B)+1..j*nrows(B),1..ncols(B)]=A[j,i]*B; 211 } 212 L[i]=C; 213 } 214 return(concat(L)); 236 int triv = nrows(B)*ncols(B); 237 if( triv==1 ) 238 { 239 return(B[1,1]*A); 240 } 241 else 242 { 243 int N = nrows(A)*nrows(B); 244 matrix C[N][ncols(B)]; 245 for( i=1; i<=ncols(A); i=i+1 ) 246 { 247 for( j=1; j<=nrows(A); j=j+1 ) 248 { 249 C[(j-1)*nrows(B)+1..j*nrows(B),1..ncols(B)]=A[j,i]*B; 250 } 251 L[i]=C; 252 } 253 return(concat(L)); 254 } 215 255 } 216 256 example … … 227 267 proc skewmat (int n, list #) 228 268 USAGE: skewmat(n[,id]); n integer, id ideal 229 RETURN: skew-symmetric nxn matrix, with entries from id 269 RETURN: skew-symmetric nxn matrix, with entries from id 230 270 (default: id=maxideal(1)) 231 271 NOTE: if id has less than n*(n-1)/2 elements, the matrix is filled with 0's, … … 238 278 id = id,B[1..n,1..n]; 239 279 int i,j; 240 for( i=0; i<=n-2; i ++)241 { 242 B[i+1,i+2..n]=id[j+1..j+n-i-1]; 243 j=j+n-i-1; 280 for( i=0; i<=n-2; i=i+1 ) 281 { 282 B[i+1,i+2..n]=id[j+1..j+n-i-1]; 283 j=j+n-i-1; 244 284 } 245 285 matrix A=transpose(B); … … 263 303 proc submat (matrix A, intvec r, intvec c) 264 304 USAGE: submat(A,r,c); A=matrix, r,c=intvec 265 RETURN: matrix, submatrix of A with rows specified by intvec r and columns 305 RETURN: matrix, submatrix of A with rows specified by intvec r and columns 266 306 specified by intvec c 267 307 EXAMPLE: example submat; shows an example … … 293 333 id = id,B[1..n,1..n]; 294 334 int i,j; 295 for( i=0; i<=n-1; i ++)296 { 297 B[i+1,i+1..n]=id[j+1..j+n-i]; 298 j=j+n-i; 335 for( i=0; i<=n-1; i=i+1 ) 336 { 337 B[i+1,i+1..n]=id[j+1..j+n-i]; 338 j=j+n-i; 299 339 } 300 340 matrix A=transpose(B); 301 for( i=1; i<=n; i ++) { A[i,i]=0; }341 for( i=1; i<=n; i=i+1 ) { A[i,i]=0; } 302 342 B=A+B; 303 343 return(B); … … 306 346 { "EXAMPLE:"; echo = 2; 307 347 ring R=0,x(1..10),lp; 308 print(symmat(4)); // the generic symmetric matrix 348 print(symmat(4)); // the generic symmetric matrix 309 349 changevar("R1",A_Z("a",5),R); 310 350 matrix A=symmat(5,maxideal(1)^2); … … 324 364 int i,j; 325 365 matrix C=B; 326 for( i=2; i<=nrows(A); i ++) { C=dsum(C,B); }366 for( i=2; i<=nrows(A); i=i+1 ) { C=dsum(C,B); } 327 367 matrix D[nrows(C)][ncols(A)*nrows(B)]; 328 for( j=1; j<=nrows(B); j ++)329 { 330 for( i=1; i<=nrows(A); i ++)368 for( j=1; j<=nrows(B); j=j+1 ) 369 { 370 for( i=1; i<=nrows(A); i=i+1 ) 331 371 { 332 372 D[(i-1)*nrows(B)+j,(j-1)*ncols(A)+1..j*ncols(A)]=A[i,1..ncols(A)]; … … 362 402 /////////////////////////////////////////////////////////////////////////////// 363 403 364 proc gauss_col (matrix m)404 proc gauss_col (matrix A) 365 405 USAGE: gauss_col(A); A=matrix with constant coefficients 366 RETURN: matrix = col-reduced normal form of A 406 RETURN: matrix = col-reduced lower-triagonal normal form of A 407 NOTE: the procedure sets the global option-command: option(noredSB); 367 408 EXAMPLE: example gauss_col; shows an example 368 409 { 369 410 def R=basering; 370 changeord("@R","ds,c",R); 411 changeord("@R","ds,c",R); 371 412 option(redSB); option(nointStrategy); 372 matrix m = imap(R,m);373 m = matrix(std(m),nrows(m),ncols(m));374 setring R; 375 m=imap(@R,m);413 matrix A = imap(R,A); 414 A = matrix(std(A),nrows(A),ncols(A)); 415 setring R; 416 A=imap(@R,A); 376 417 option(noredSB); 377 418 kill @R; 378 return(m); 379 } 380 example 381 { "EXAMPLE:"; echo = 2; 382 ring S; 383 matrix M[3][4] = 1,3,2,4,2,6,4,8,1,3,4,4; 384 print(M); 385 print(gauss_col(M)); 419 return(A); 420 } 421 example 422 { "EXAMPLE:"; echo = 2; 423 ring S=0,x,dp; 424 matrix A[5][4] = 3, 1,1,-1, 425 13, 8,6,-7, 426 14,10,6,-7, 427 7, 4,3,-3, 428 2, 1,0, 3; 429 print(gauss_col(A)); 386 430 } 387 431 /////////////////////////////////////////////////////////////////////////////// 388 432 389 proc gauss_row (matrix m)433 proc gauss_row (matrix A) 390 434 USAGE: gauss_row(A); A=matrix with constant coefficients 391 RETURN: matrix = row-reduced normal form of A 435 RETURN: matrix = row-reduced upper-triangular normal form of A 436 NOTE: may be used to solve a system of linear equations 437 see proc 'linearsolve' from 'solve.lib' for a different method 438 the procedure sets the global option-command: option(noredSB); 392 439 EXAMPLE: example gauss_row; shows an example 393 440 { 394 m = gauss_col(transpose(m)); 395 return(transpose(m)); 396 } 397 example 398 { "EXAMPLE:"; echo = 2; 399 ring S; 400 matrix M[3][4] = 1,3,2,4,2,6,4,8,1,3,4,4; 401 print(M); 402 print(gauss_row(M)); 441 A = gauss_col(transpose(A)); 442 return(transpose(A)); 443 } 444 example 445 { "EXAMPLE:"; echo = 2; 446 ring S=0,x,dp; 447 matrix A[4][5] = 3, 1,1,-1,2, 448 13, 8,6,-7,1, 449 14,10,6,-7,1, 450 7, 4,3,-3,3; 451 print(gauss_row(A)); 403 452 } 404 453 ////////////////////////////////////////////////////////////////////////////////
Note: See TracChangeset
for help on using the changeset viewer.