diff options
Diffstat (limited to 'src/algebra/matstor.spad.pamphlet')
-rw-r--r-- | src/algebra/matstor.spad.pamphlet | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/src/algebra/matstor.spad.pamphlet b/src/algebra/matstor.spad.pamphlet index 5a77c5be..f88db8c8 100644 --- a/src/algebra/matstor.spad.pamphlet +++ b/src/algebra/matstor.spad.pamphlet @@ -36,36 +36,36 @@ StorageEfficientMatrixOperations(R): Exports == Implementation where REP ==> PrimitiveArray PrimitiveArray R Exports ==> with - copy_! : (M,M) -> M + copy! : (M,M) -> M ++ \spad{copy!(c,a)} copies the matrix \spad{a} into the matrix c. ++ Error: if \spad{a} and c do not have the same ++ dimensions. - plus_! : (M,M,M) -> M + plus! : (M,M,M) -> M ++ \spad{plus!(c,a,b)} computes the matrix sum \spad{a + b} and stores the ++ result in the matrix c. ++ Error: if \spad{a}, b, and c do not have the same dimensions. - minus_! : (M,M) -> M + minus! : (M,M) -> M ++ \spad{minus!(c,a)} computes \spad{-a} and stores the result in the ++ matrix c. ++ Error: if a and c do not have the same dimensions. - minus_! : (M,M,M) -> M + minus! : (M,M,M) -> M ++ \spad{!minus!(c,a,b)} computes the matrix difference \spad{a - b} ++ and stores the result in the matrix c. ++ Error: if \spad{a}, b, and c do not have the same dimensions. - leftScalarTimes_! : (M,R,M) -> M + leftScalarTimes! : (M,R,M) -> M ++ \spad{leftScalarTimes!(c,r,a)} computes the scalar product ++ \spad{r * a} and stores the result in the matrix c. ++ Error: if \spad{a} and c do not have the same dimensions. - rightScalarTimes_! : (M,M,R) -> M + rightScalarTimes! : (M,M,R) -> M ++ \spad{rightScalarTimes!(c,a,r)} computes the scalar product ++ \spad{a * r} and stores the result in the matrix c. ++ Error: if \spad{a} and c do not have the same dimensions. - times_! : (M,M,M) -> M + times! : (M,M,M) -> M ++ \spad{times!(c,a,b)} computes the matrix product \spad{a * b} ++ and stores the result in the matrix c. ++ Error: if \spad{a}, b, and c do not have ++ compatible dimensions. - power_! : (M,M,M,M,NNI) -> M + power! : (M,M,M,M,NNI) -> M ++ \spad{power!(a,b,c,m,n)} computes m ** n and stores the result in ++ \spad{a}. The matrices b and c are used to store intermediate results. ++ Error: if \spad{a}, b, c, and m are not square @@ -79,7 +79,7 @@ StorageEfficientMatrixOperations(R): Exports == Implementation where rep : M -> REP rep m == m pretend REP - copy_!(c,a) == + copy!(c,a) == m := nrows a; n := ncols a not((nrows c) = m and (ncols c) = n) => error "copy!: matrices of incompatible dimensions" @@ -87,10 +87,10 @@ StorageEfficientMatrixOperations(R): Exports == Implementation where for i in 0..(m-1) repeat aRow := qelt(aa,i); cRow := qelt(cc,i) for j in 0..(n-1) repeat - qsetelt_!(cRow,j,qelt(aRow,j)) + qsetelt!(cRow,j,qelt(aRow,j)) c - plus_!(c,a,b) == + plus!(c,a,b) == m := nrows a; n := ncols a not((nrows b) = m and (ncols b) = n) => error "plus!: matrices of incompatible dimensions" @@ -100,10 +100,10 @@ StorageEfficientMatrixOperations(R): Exports == Implementation where for i in 0..(m-1) repeat aRow := qelt(aa,i); bRow := qelt(bb,i); cRow := qelt(cc,i) for j in 0..(n-1) repeat - qsetelt_!(cRow,j,qelt(aRow,j) + qelt(bRow,j)) + qsetelt!(cRow,j,qelt(aRow,j) + qelt(bRow,j)) c - minus_!(c,a) == + minus!(c,a) == m := nrows a; n := ncols a not((nrows c) = m and (ncols c) = n) => error "minus!: matrices of incompatible dimensions" @@ -111,10 +111,10 @@ StorageEfficientMatrixOperations(R): Exports == Implementation where for i in 0..(m-1) repeat aRow := qelt(aa,i); cRow := qelt(cc,i) for j in 0..(n-1) repeat - qsetelt_!(cRow,j,-qelt(aRow,j)) + qsetelt!(cRow,j,-qelt(aRow,j)) c - minus_!(c,a,b) == + minus!(c,a,b) == m := nrows a; n := ncols a not((nrows b) = m and (ncols b) = n) => error "minus!: matrices of incompatible dimensions" @@ -124,10 +124,10 @@ StorageEfficientMatrixOperations(R): Exports == Implementation where for i in 0..(m-1) repeat aRow := qelt(aa,i); bRow := qelt(bb,i); cRow := qelt(cc,i) for j in 0..(n-1) repeat - qsetelt_!(cRow,j,qelt(aRow,j) - qelt(bRow,j)) + qsetelt!(cRow,j,qelt(aRow,j) - qelt(bRow,j)) c - leftScalarTimes_!(c,r,a) == + leftScalarTimes!(c,r,a) == m := nrows a; n := ncols a not((nrows c) = m and (ncols c) = n) => error "leftScalarTimes!: matrices of incompatible dimensions" @@ -135,10 +135,10 @@ StorageEfficientMatrixOperations(R): Exports == Implementation where for i in 0..(m-1) repeat aRow := qelt(aa,i); cRow := qelt(cc,i) for j in 0..(n-1) repeat - qsetelt_!(cRow,j,r * qelt(aRow,j)) + qsetelt!(cRow,j,r * qelt(aRow,j)) c - rightScalarTimes_!(c,a,r) == + rightScalarTimes!(c,a,r) == m := nrows a; n := ncols a not((nrows c) = m and (ncols c) = n) => error "rightScalarTimes!: matrices of incompatible dimensions" @@ -146,14 +146,14 @@ StorageEfficientMatrixOperations(R): Exports == Implementation where for i in 0..(m-1) repeat aRow := qelt(aa,i); cRow := qelt(cc,i) for j in 0..(n-1) repeat - qsetelt_!(cRow,j,qelt(aRow,j) * r) + qsetelt!(cRow,j,qelt(aRow,j) * r) c - copyCol_!: (ARR,REP,Integer,Integer) -> ARR - copyCol_!(bCol,bb,j,n1) == - for i in 0..n1 repeat qsetelt_!(bCol,i,qelt(qelt(bb,i),j)) + copyCol!: (ARR,REP,Integer,Integer) -> ARR + copyCol!(bCol,bb,j,n1) == + for i in 0..n1 repeat qsetelt!(bCol,i,qelt(qelt(bb,i),j)) - times_!(c,a,b) == + times!(c,a,b) == m := nrows a; n := ncols a; p := ncols b not((nrows b) = n and (nrows c) = m and (ncols c) = p) => error "times!: matrices of incompatible dimensions" @@ -161,16 +161,16 @@ StorageEfficientMatrixOperations(R): Exports == Implementation where bCol : ARR := new(n,0) m1 := (m :: Integer) - 1; n1 := (n :: Integer) - 1 for j in 0..(p-1) repeat - copyCol_!(bCol,bb,j,n1) + copyCol!(bCol,bb,j,n1) for i in 0..m1 repeat aRow := qelt(aa,i); cRow := qelt(cc,i) sum : R := 0 for k in 0..n1 repeat sum := sum + qelt(aRow,k) * qelt(bCol,k) - qsetelt_!(cRow,j,sum) + qsetelt!(cRow,j,sum) c - power_!(a,b,c,m,p) == + power!(a,b,c,m,p) == mm := nrows a; nn := ncols a not(mm = nn) => error "power!: matrix must be square" @@ -181,23 +181,23 @@ StorageEfficientMatrixOperations(R): Exports == Implementation where not((nrows m) = mm and (ncols m) = nn) => error "power!: matrices of incompatible dimensions" flag := false - copy_!(b,m) + copy!(b,m) repeat if odd? p then flag => - times_!(c,b,a) - copy_!(a,c) + times!(c,b,a) + copy!(a,c) flag := true - copy_!(a,b) + copy!(a,b) one? p => return a p := p quo 2 - times_!(c,b,b) - copy_!(b,c) + times!(c,b,b) + copy!(b,c) m ** n == not square? m => error "**: matrix must be square" a := copy m; b := copy m; c := copy m - power_!(a,b,c,m,n) + power!(a,b,c,m,n) @ \section{License} |