SCM

SCM Repository

[matrix] Diff of /pkg/TODO
ViewVC logotype

Diff of /pkg/TODO

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2072, Wed Sep 26 16:16:13 2007 UTC revision 2175, Wed Apr 23 11:23:50 2008 UTC
# Line 1  Line 1 
1  Check for DimNames propagation in coercion and other operations.  - Check for DimNames propagation in coercion and other operations.
2  ------  
3  - Report the problem in the Linux ldexp manual page.  The second and  - Report the problem in the Linux ldexp manual page.  The second and
4    third calls in the Synopsis should be to ldexpf and ldexpl.    third calls in the Synopsis should be to ldexpf and ldexpl.
5    
 - [,] indexing: for sparse "works", but not yet for negative indices!  
   
 - consider moving alloc3Darray from ./src/Mutils.c to  
   $(RSRC)/src/base/array.c  
 ------  
6  - provide methods for "dspMatrix" and "dppMatrix"!  - provide methods for "dspMatrix" and "dppMatrix"!
7    
8  - implement (more) methods for supporting "packed" (symmetric / triangular)  - implement (more) methods for supporting "packed" (symmetric / triangular)
# Line 16  Line 11 
11    
12    (have some dtr* <-> dtp*)    (have some dtr* <-> dtp*)
13    
 -----  
   
14  - combine the C functions for multiplication by special forms and  - combine the C functions for multiplication by special forms and
15    solution wrt special forms by using a 'right' argument and a    solution wrt special forms by using a 'right' argument and a
16    'classed' argument.    'classed' argument.
17     [done with dgeMatrix_matrix_mm();  not yet for other classes;     [done with dgeMatrix_matrix_mm();  not yet for other classes;
18      and for _crossprod()]      and for _crossprod()]
19    
 - add more comprehensive examples / tests for Schur decomposition  
   
 - arithmetic for sparse matrices:  
              <sparseMatrix>  o  <same-dim-sparseMatrix>  
   should return a sparse matrix  for at least "+" and "*" , also %%,  
   and "/" and "%/%" at least when the RHS is non-zero a scalar.  
   Challenge: nice implementation (``common non-0''; but Tsparse* is not uniq).  
   
20  -----  -----
21    
22  - "Math2" , "Math", "Arith":  - "Math2" , "Math", "Arith":
23     keep triangular and symmetric Matrices when appropriate:     keep triangular and symmetric Matrices when appropriate:
24     particularly desirable for  "Math2": round(), signif()     particularly desirable for  "Math2": round(), signif()
25    
26      For triangular matrices, more specifically make sure the four rules of
27      "triangular matrix algebra" (Golub+Van Loan 1996, 3.1.8, p.93) are
28      fulfilled; now(2008-03-06) ok for Csparse; not yet for <dtr> %*% <dtr>
29    
30  - "d" <-> "l" coercion for all "[TCR]" sparse matrices is really trivial:  - "d" <-> "l" coercion for all "[TCR]" sparse matrices is really trivial:
31    "d" -> "l" : drops the 'x' slot    "d" -> "l" : drops the 'x' slot
32    "l" -> "d" : construct an 'x' slot of all '1'    "l" -> "d" : construct an 'x' slot of all '1'
# Line 72  Line 61 
61    str(H6 <- as(h6, "dspMatrix"))       # has lost factor    str(H6 <- as(h6, "dspMatrix"))       # has lost factor
62    ## and the same in a similar situation involving  "dpo", "dpp"    ## and the same in a similar situation involving  "dpo", "dpp"
63    
 - Things like  M[upper.tri(M)] are not really most useful for  sparse  
   matrices.  --> provide generic functions  
   upperTriMatrix(), lowerTriMatrix()  both with argument  'diag = TRUE'  
   (which can be set to FALSE of course) which are used to extract a  
   triangle from an arbitrary sparse matrix and  return a  "dtCMatrix".  
   
64  - Factorizations: LU done; also Schur()  for  *sparse*  Matrices.  - Factorizations: LU done; also Schur()  for  *sparse*  Matrices.
65    
 - band(), triu(), tril() for *all* including "matrix", not just sparse matrices  
   
66  - is.na() method for all our matrices [ ==> which(*, arr.ind=TRUE) might work ]  - is.na() method for all our matrices [ ==> which(*, arr.ind=TRUE) might work ]
67    
68  - use  .Call(Csparse_drop, M, tol) in more places,  - use  .Call(Csparse_drop, M, tol) in more places,
# Line 99  Line 80 
80  - make sure *all* group methods have (maybe "bail-out") setMethod for "Matrix".  - make sure *all* group methods have (maybe "bail-out") setMethod for "Matrix".
81    e.g. zapsmall(<pMatrix>) fails "badly"    e.g. zapsmall(<pMatrix>) fails "badly"
82    
 - speedup: pass class definition to non0ind() [check all calls ..]  
   
83  - sum(): implement methods which work for *all* our matrices.  - sum(): implement methods which work for *all* our matrices.
84    
85  - Implement  expand(.) for the Cholesky() results  - Implement  expand(.) for the Cholesky() results
86    "dCHMsimpl" and  "dCHMsuper"  -- currently have no *decent* way to get at    "dCHMsimpl" and  "dCHMsuper"  -- currently have no *decent* way to get at
87    the matrix factors of the corresponding matrix factorization !!    the matrix factors of the corresponding matrix factorization !!
88    
89  - rbind(<sparse>, <dense>) does not work  (e.g. <dgC>, <dge>)  - rbind2(<sparse>, <dense>) does not work  (e.g. <dgC>, <dge>)
   
 - ensure that  M[0], M[FALSE], M[1:2]  works as for traditional Matrices  
   
 - make sure  M[FALSE, FALSE]  works for all Matrices  
   {e.g. fails for M <- Diagonal(4)}  
90    
91  - <sparse> %*% <dense>  {also in crossprod/tcrossprod}  currently always  - <sparse> %*% <dense>  {also in crossprod/tcrossprod}  currently always
92    returns <dense>, since --> Csparse_dense_prod --> cholmod_sdmult    returns <dense>, since --> Csparse_dense_prod --> cholmod_sdmult
# Line 127  Line 101 
101    
102  - Diagonal(n) %*% A ---  too slow!! --> ~/R/MM/Pkg-ex/Matrix/diag-Tamas-ex.R  - Diagonal(n) %*% A ---  too slow!! --> ~/R/MM/Pkg-ex/Matrix/diag-Tamas-ex.R
103    
 - For a square sparse matrix 'b' {typically dgCMatrix or dgTMatrix},  
   we'd want a function  "Mat_plus_t_Mat" <- function(b) {....}  
   which computes the symmetric sparse matrix   b + t(b)  
   in way that never works with size-doubled vectors from  b@i etc..  
   
104  - ! <symmetricMatrix>  loses symmetry, both for dense and sparse matrices.  - ! <symmetricMatrix>  loses symmetry, both for dense and sparse matrices.
105    !M  where M is "sparseMatrix", currently always gives dense. This only    !M  where M is "sparseMatrix", currently always gives dense. This only
106    makes sense when M is ``really sparse''.    makes sense when M is ``really sparse''.
# Line 147  Line 116 
116    present factorization and rather uses one with more '0' in x slot.    present factorization and rather uses one with more '0' in x slot.
117    
118  - diag(m) <- val    currently automatically works via  m[cbind(i,i)] <- val  - diag(m) <- val    currently automatically works via  m[cbind(i,i)] <- val
119    However,    This (`[<-` method) is now "smart" for diagonalMatrix, but needs also to
120    we need methods for 'diag<-' at least for diagonalMatrix,    be for triangularMatrix, and probably also "dense*general*Matrix" since the
   triangularMatrix, and probably also "dense*general*Matrix" since the  
121    above currently goes via "matrix" and back instead of using the 'x' slot    above currently goes via "matrix" and back instead of using the 'x' slot
122    directly.    directly; in particular, the triangular* "class property" is lost!
   
 - image(M, ..): Think about an optional smart option which keeps  
    "0 |-> transparent" and allows colors to differentiate negative and  
    positive entries.  
123    
124  - examples for solve( Cholesky(.), b, system = c("A", "LDLt"....))  - examples for solve( Cholesky(.), b, system = c("A", "LDLt"....))
125    probably rather in man/CHMfactor-class.Rd than man/Cholesky.Rd    probably rather in man/CHMfactor-class.Rd than man/Cholesky.Rd
126    
127  - (A + tr(A))/2  := the symmetric part of A, is needed in several  - LDL(<CHMsimpl>) looks relatively easy; via  "tCsparse_diag()"
128    circumstances; unfortunately it's not "smart" (preserving symmetry, ...)     {diagonal entries of *triangular* Csparse}
129    --> define a generic and methods for it!    --> see comment in determinant(<dsC>) in R/dsCMatrix.R, will give
130    Names:  symPart(A) or  symMat(A) or symmetrize(A) or ... ?    faster determinant
   Googling around I found that Nick Higham as a GPL contributed Matlab  
   toolbox where he uses  symmpart(A) := (A + A') /. 2  
   {and  skewpart(A) := (A - A') /. 2}  
131    
132  - tr(A %*% B) {and even  tr(A %*% B %*% C) ...} are also needed  - tr(A %*% B) {and even  tr(A %*% B %*% C) ...} are also needed
133    frequently in some computations {conditional normal distr. ...}.    frequently in some computations {conditional normal distr. ...}.
# Line 177  Line 138 
138    and even more so for, e.g.  <sparse> %*% <dense>    and even more so for, e.g.  <sparse> %*% <dense>
139    {used in Soeren's 'gR' computations},    {used in Soeren's 'gR' computations},
140    we should also provide a generic and methods.    we should also provide a generic and methods.
141    
142    - qr.R(qr(x)) may differ for the "same" matrix, depending on it being
143      sparse or dense:
144        "qr.R(<sparse>) may differ from qr.R(<dense>) because of permutations"
145    
146      This is not really acceptable and currently influences  rcond() as well.
147    
148    - eigen() should become generic, and get a method at least for diagonal,
149      but also for symmetric -> dsyMatrix  [LAPACK dsyev() uses UPLO !],
150      but also simply for dgeMatrix (without going via tradition matrices).
151      What about Sparse?  There's fill-in, but it may still be sensible, e.g.
152      mlist <- list(1, 2:3, diag(x=5:3), 27, cbind(1,3:6), 100:101)
153      ee <- eigen(tcrossprod(bdiag(lapply(mlist, as.matrix))))
154      Matrix( signif(ee$vectors, 3) )
155    
156    - facmul() has no single method defined;  it looks like a good idea though
157      (instead of the infamous qr.qy, qr.qty,.... functions)
158    
159    - symmpart() and skewpart()  for *sparse* matrices still use (x +/- t(x))/2
160      and could be made more efficient.
161      Consider going via  asTuniq() or something very close to
162      .Arith.Csparse() in R/Ops.R
163    
164    - many setAs(*, "[dl]..Matrix") are still needed, as long as e.g.
165      replCmat() uses as_CspClass() and drop0(.) which itself call
166      as_CspClass() quite a bit.  --> try to replace these by
167      as(*, "CsparseMatrix"); forceSymmetric, etc.
168    
169    - implement fast diag(<triangularCsparse>) via calling new
170      src/Csparse.c's diag_tC_ptr()
171    
172    - add examples (and tests!) for update(<CHMfactor>, ..) and
173      Cholesky(......, Imult), also tests for hidden {hence no examples}
174      ldetL2up() { R/CHMfactor.R }
175    
176    - chol(<nsCMatrix>)  gives "temporarily disabled"
177      but should give the *symbolic* factorization;
178      similarly Cholesky(.) is not enabled
179    
180    - writeMM(obj, file=stdout()) creates file "1" since file is silently
181      assumed to be a string, i.e. cannot be a connection.
182      An R (instead of C) version should be pretty simple, and would work with
183      connections automatically ["lsparse" become either "real" or
184      "pattern", "depending if they have NAs or not].

Legend:
Removed from v.2072  
changed lines
  Added in v.2175

root@r-forge.r-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business Powered By FusionForge