comparison PROJECTS @ 6627:37dcb57b80f6

[project @ 2007-05-16 15:02:13 by jwe]
author jwe
date Wed, 16 May 2007 15:02:13 +0000
parents 3ef490336b4d
children d88d66f8cab6
comparison
equal deleted inserted replaced
6626:af16354ea09c 6627:37dcb57b80f6
29 29
30 * Handle complex values in fread and fwrite. 30 * Handle complex values in fread and fwrite.
31 31
32 * Support for lp_solve for linear programming problems. 32 * Support for lp_solve for linear programming problems.
33 33
34 * Free QP solver.
35
36 * Free NLP solver. 34 * Free NLP solver.
37 35
38 * Fix CollocWt to handle Laguerre polynomials. Make it easy to 36 * Fix CollocWt to handle Laguerre polynomials. Make it easy to
39 extend it to other polynomial types. 37 extend it to other polynomial types.
40
41 * Make filter faster (perhaps by calling BLAS functions).
42 38
43 * Add optional arguments to colloc so that it's not restricted to 39 * Add optional arguments to colloc so that it's not restricted to
44 Legendre polynomials. 40 Legendre polynomials.
45 41
46 * Fix eig to also be able to solve the generalized eigenvalue 42 * Fix eig to also be able to solve the generalized eigenvalue
50 * Move rand, eye, xpow, xdiv, etc., functions to the matrix classes. 46 * Move rand, eye, xpow, xdiv, etc., functions to the matrix classes.
51 47
52 * Use octave_allocator for memory management in Array classes once 48 * Use octave_allocator for memory management in Array classes once
53 g++ supports static member templates. 49 g++ supports static member templates.
54 50
55 * Implement the following functions:
56 -- ppval -- cross -- dot
57
58 * When constructing NLConst (and other) objects, make sure that 51 * When constructing NLConst (and other) objects, make sure that
59 there are sufficient checks to ensure that the dimensions all 52 there are sufficient checks to ensure that the dimensions all
60 conform. 53 conform.
61
62 * Allow parameters to be passed through the call to fsolve() to the
63 user-supplied function for Matlab compatibility. Don't place an
64 upper limit on the number of arguments.
65
66 * Check matrix classes for proper handling of empty matrices.
67
68 * Make operations with empty matrices produce empty matrices, for
69 compatibility with Matlab (but only if Matlab 5 still does things
70 this way). For example: [1, 2] * [] ==> [].
71 54
72 * Improve design of ODE, DAE, classes. 55 * Improve design of ODE, DAE, classes.
73 56
74 * Extend meaning of .* to include v .* M or M .* v (where v is a 57 * Extend meaning of .* to include v .* M or M .* v (where v is a
75 column vector with the same number of rows as M) to scale rows of 58 column vector with the same number of rows as M) to scale rows of
76 M by elements of v. Similarly, if w is a row vector with as many 59 M by elements of v. Similarly, if w is a row vector with as many
77 columns as M, then either w .* M or M .* w scales the columns of 60 columns as M, then either w .* M or M .* w scales the columns of
78 M. 61 M.
79 62
80 * Given two vectors x and y of length m and n, implement a function
81 outer (x, y, f) that returns an m-by-n matrix with entries
82 f (x(i), y(j)). If f is omitted, multiplication is the default.
83 Should probably work for any vectors, not just if x is a column
84 vector and y is a row vector.
85
86 * Make it possible to solve b = L \ x efficiently, either by
87 providing an explicit function call, or by automatically
88 determining that L is triangular. If it is done automatically,
89 provide some means for determining whether Octave has actually
90 detected that the matrix is triangular.
91
92 * The polyfit function uses the economy QR factorization, but even
93 that can take a lot of time for large datasets. Consider an
94 option to compute the result with inv (A' * A) * A' * y or some
95 other faster method.d Possibly just switch to this method if the
96 dataset is larger than some value.
97
98 * Make QR more memory efficient for large matrices when not all the 63 * Make QR more memory efficient for large matrices when not all the
99 columns of Q are required (apparently this is not handled by the 64 columns of Q are required (apparently this is not handled by the
100 lapack code yet). 65 lapack code yet).
101 66
102 * Consider making the behavior of the / and \ operators for 67 * Consider making the behavior of the / and \ operators for
113 * Implement fourth argument to the sprand and sprandn, and addition 78 * Implement fourth argument to the sprand and sprandn, and addition
114 arguments to sprandsym that the leading brand implements. 79 arguments to sprandsym that the leading brand implements.
115 80
116 * Sparse logical indexing in idx_vector class so that something like 81 * Sparse logical indexing in idx_vector class so that something like
117 "a=sprandn(1e6,1e6,1e-6); a(a<1) = 0" won't cause a memory overflow. 82 "a=sprandn(1e6,1e6,1e-6); a(a<1) = 0" won't cause a memory overflow.
118
119 * Write the rest of the sparse docs
120
121 * The algo in TOMS 582 is perfect for symrcm function. However, this is
122 under the ACM license and can't be used in a GPL program.
123
124 An alternative is that PETSC is GPL compatiable and has a symrcm
125 implemented from the original SPARSPAK. Its not clear that this is
126 legal to me as I have found no clarification of the original license
127 of SPARSPAK. As PETSC has had this code for over 10 years without
128 problem, we can perhaps assume that there are no issues. Maybe need
129 to contact PETSC people or the SPARSPAK people at uni of waterloo
130 to check issues.
131 83
132 * Make spalloc(r,c,n) actually create an empty sparse with n non-zero 84 * Make spalloc(r,c,n) actually create an empty sparse with n non-zero
133 elements? This allows something like 85 elements? This allows something like
134 86
135 sm = spalloc (r,c,n) 87 sm = spalloc (r,c,n)
156 - symmmd Superseded by symamd 108 - symmmd Superseded by symamd
157 - colmmd Superseded by colamd 109 - colmmd Superseded by colamd
158 - treelayout 110 - treelayout
159 - cholinc 111 - cholinc
160 - condest 112 - condest
161 - bicg 113 - bicg Can this be taken from octave-forge?
162 - bicgstab 114 - bicgstab
163 - cgs 115 - cgs
164 - gmres 116 - gmres
165 - lsqr 117 - lsqr
166 - minres 118 - minres
167 - pcg Can this be taken from o-forge? Is it compatiable
168 - pcr Can and should this be taken from o-forge?
169 - qmr 119 - qmr
170 - symmlq 120 - symmlq
171 - spaugment 121 - spaugment
172 122
173 -------- 123 --------
174 Graphics: 124 Graphics:
175 -------- 125 --------
176 126
177 * Make plotting with plplot work. 127 * Make plotting with plplot work.
178 128
179 * Fix interface with gnuplot to wait for gnuplot to output any text
180 before octave returns a prompt. Possible by implementing two
181 way communication between gnuplot and Octave.
182
183 * Handle gnuplot ranges correctly for parametric modes (accept 3
184 ranges for 2d plots and 5 ranges for 3d plots).
185
186 * Make gsave (and possibly gload) work. Implement gsave by having it
187 also alter the plot command to not use temporary files (perhaps
188 with some user-specified template for naming them) and then
189 sending a `save' command to gnuplot.
190
191 * It would be nice to be able to check that a plot is currently
192 being displayed.
193
194 * Implement clf, gcf, get, set, orient, print, close, etc. in
195 Matlab-compatible ways.
196
197 * Make it possible to check the current graphics terminal type. 129 * Make it possible to check the current graphics terminal type.
198
199 * If possible, pass data to gnuplot without using temporary files.
200
201 * If possible, pass binary data to gnuplot to speed things up.
202 130
203 * If using gnuplot, consider setting a smaller default for the 131 * If using gnuplot, consider setting a smaller default for the
204 `zero' value (e.g., set zero sqrt (realmin) or something). 132 `zero' value (e.g., set zero sqrt (realmin) or something).
205 133
206 ------- 134 -------
208 ------- 136 -------
209 137
210 * Improve performance of string functions, particularly for 138 * Improve performance of string functions, particularly for
211 searching and replacing. 139 searching and replacing.
212 140
213 * Provide some regex matching functions.
214
215 * Convert string functions to work on string arrays. 141 * Convert string functions to work on string arrays.
216 142
217 * Make find work for strings. 143 * Make find work for strings.
218 144
219 * Consider making octave_print_internal() print some sort of text 145 * Consider making octave_print_internal() print some sort of text
220 representation for unprintable characters instead of sending them 146 representation for unprintable characters instead of sending them
221 directly to the terminal. (But don't do this for fprintf!) 147 directly to the terminal. (But don't do this for fprintf!)
222 148
223 * Consider changing the default value of `string_fill_char' from SPC 149 * Consider changing the default value of `string_fill_char' from SPC
224 to NUL. 150 to NUL.
225
226 * Consider making ["test", []] ==> "test", for compatibility with
227 Matlab, at least when some set of preferences are set.
228 151
229 ---------------- 152 ----------------
230 Other Data Types: 153 Other Data Types:
231 ---------------- 154 ----------------
232 155
249 * Make fread and fwrite work for complex data. Iostreams based 172 * Make fread and fwrite work for complex data. Iostreams based
250 versions of these functions would also be nice, and if you are 173 versions of these functions would also be nice, and if you are
251 working on them, it would be good to support other size 174 working on them, it would be good to support other size
252 specifications (integer*2, etc.). 175 specifications (integer*2, etc.).
253 176
254 * Make fread and fopen look in LOADPATH for files. 177 * Make fread and fopen look in the load path for files.
255
256 * Make load and save look for <file>.mat if only given <file>.
257
258 Potential sticky points:
259
260 - For load, if both foo and foo.mat exist, should it prefer foo
261 or foo.mat? Should the preference depend on the arguments to
262 load? I think it should only prefer .mat files if the
263 -mat-binary option is supplied, or if the file foo.mat exists
264 but the file foo does not.
265
266 - For save, should it prefer to create foo or foo.mat? Should
267 the preference depend on the arguments to save? Should the
268 default_save_format imply a default preference? I think it
269 should only create .mat files if it is writing Matlab
270 compatible files.
271 178
272 * Move some pr-output stuff to liboctave. 179 * Move some pr-output stuff to liboctave.
273 180
274 * Make the cutoff point for changing to packed storage a 181 * Make the cutoff point for changing to packed storage a
275 user-preference variable with default value 8192. 182 user-preference variable with default value 8192.
307 is parsed as IF expr STRING END. 214 is parsed as IF expr STRING END.
308 215
309 * Consider grouping all preference variables in a structure instead 216 * Consider grouping all preference variables in a structure instead
310 of further polluting the namespace. Maybe `Octave_options.xxx'? 217 of further polluting the namespace. Maybe `Octave_options.xxx'?
311 218
312 * Rewrite functions in input.cc to do the right thing in all cases
313 of using readline, forced interactive behavior, echoing of input,
314 etc.
315
316 * Consider making linspace() and logspace() return the value
317 corresponding to the first argument if the number of requested
318 points is 1.
319
320 * Consider allowing an arbitrary property list to be attached to any 219 * Consider allowing an arbitrary property list to be attached to any
321 variable. This could be a more general way to handle the help 220 variable. This could be a more general way to handle the help
322 string that can currently be added with `document'. 221 string that can currently be added with `document'.
323 222
324 * Allow more command line options to be accessible as built-in 223 * Allow more command line options to be accessible as built-in
325 variables (--echo-commands, etc.). 224 variables (--echo-commands, etc.).
326 225
327 * Allow `octave -c STRING' to execute commands from STRING then
328 exit.
329
330 * Make the interpreter run faster. 226 * Make the interpreter run faster.
331
332 * Make it possible to disable or enable all warnings on an
333 individual basis from the command line or via some built-in
334 structure variable.
335
336 * Warn about complex comparisons? Could just use double_value() or
337 matrix_value() instead of explicit conversions to real types. For
338 this to really be useful, some additional information must be
339 available to point to the location of the code that triggers the
340 warning.
341 227
342 * Allow arbitrary lower bounds for array indexing. 228 * Allow arbitrary lower bounds for array indexing.
343 229
344 * Improve performance of recursive function calls. 230 * Improve performance of recursive function calls.
345 231
347 selecting by individual directories or functions. 233 selecting by individual directories or functions.
348 234
349 * Add a command-line option to tell Octave to just do syntax 235 * Add a command-line option to tell Octave to just do syntax
350 checking and not execute statements. 236 checking and not execute statements.
351 237
352 * Is it necessary for do_binary_op and do_unary_op to be friends of
353 the tree_constant class.
354
355 * Clean up symtab and variable stuff. 238 * Clean up symtab and variable stuff.
356 239
357 * Input stream class for parser files -- must manage buffers for 240 * Input stream class for parser files -- must manage buffers for
358 flex and context for global variable settings. 241 flex and context for global variable settings.
359 242
367 250
368 alias fun function_with_a_very_long_name 251 alias fun function_with_a_very_long_name
369 252
370 so that `function_with_a_very_long_name' could be invoked as 253 so that `function_with_a_very_long_name' could be invoked as
371 `fun'. 254 `fun'.
372
373 * What should is_global() return when called for built-in variables?
374 255
375 * Allow local changes to variables to be written more compactly than 256 * Allow local changes to variables to be written more compactly than
376 is currently possible with unwind_protect. For example, 257 is currently possible with unwind_protect. For example,
377 258
378 function f () 259 function f ()
393 endfunction 274 endfunction
394 275
395 * Fix all function files to check for bogus inputs (wrong number or 276 * Fix all function files to check for bogus inputs (wrong number or
396 types of input arguments, wrong number of output arguments). 277 types of input arguments, wrong number of output arguments).
397 278
398 * Reduce the memory and time required to parse very large matrix
399 lists.
400
401 * Handle options for built-in functions more consistently. 279 * Handle options for built-in functions more consistently.
402 280
403 * Too much time is spent allocating and freeing memory. What can be 281 * Too much time is spent allocating and freeing memory. What can be
404 done to improve performance? 282 done to improve performance?
405 283
408 286
409 * It would be nice if output from the Fortran routines could be 287 * It would be nice if output from the Fortran routines could be
410 passed through the pager. 288 passed through the pager.
411 289
412 * Attempt to recognize common subexpressions in the parser. 290 * Attempt to recognize common subexpressions in the parser.
413
414 * Handle arrays with more than two dimensions.
415 291
416 * Consider making it possible to specify an empty matrix with a 292 * Consider making it possible to specify an empty matrix with a
417 syntax like [](e1, e2). Of course at least one of the expressions 293 syntax like [](e1, e2). Of course at least one of the expressions
418 must be zero... 294 must be zero...
419 295
420 * Is Matrix::fortran_vec() really necessary? 296 * Is Matrix::fortran_vec() really necessary?
421 297
422 * print_usage() should set error_state in most cases?
423
424 * Add a command that works like bash's `builtin' command. 298 * Add a command that works like bash's `builtin' command.
425 299
426 * Handle end-of-line comments correctly in parse trees for use with
427 the type command.
428
429 * Clean up eye, eval, feval, keyboard, input, ones, zeros.
430
431 * It would be nice to have an interactive debugger. 300 * It would be nice to have an interactive debugger.
432
433 * Make whos report total memory used by variables (and functions?).
434 301
435 * Rewrite whos and the symbol_record_info class. Write a built-in 302 * Rewrite whos and the symbol_record_info class. Write a built-in
436 function that gives all the basic information, then write who and 303 function that gives all the basic information, then write who and
437 whos as M-files. 304 whos as M-files.
438 305
439 * Make whos work for structure elements:
440
441 prot type rows cols name
442 ==== ==== ==== ==== ====
443 wd matrix m n struct.field
444
445 * Allow who to return information as a list of strings.
446
447 * On systems that support matherr(), make it possible for users to 306 * On systems that support matherr(), make it possible for users to
448 enable the printing of warning messages. 307 enable the printing of warning messages.
449 308
450 * Make it possible to mark variables and functions as read-only. 309 * Make it possible to mark variables and functions as read-only.
451
452 * Provide a built-in function for applying a scalar function to an
453 array. Be sure to note in the manual that this is not the
454 preferred way to write a function that can handle vector/matrix
455 arguments because there is a significant overhead for function
456 calls. If you are really looking to make a function work for
457 vector/matrix arguments and you want it to run fast, you should
458 write it in terms of the existing vector/matrix operators as much
459 as possible.
460 310
461 * Make it possible to write a function that gets a reference to a 311 * Make it possible to write a function that gets a reference to a
462 matrix in memory and change one or more elements without 312 matrix in memory and change one or more elements without
463 generating a second copy of the data. 313 generating a second copy of the data.
464 314
472 * Add an option to allow saving input from script files in the 322 * Add an option to allow saving input from script files in the
473 history list. 323 history list.
474 324
475 * The history command should accept two numeric arguments to 325 * The history command should accept two numeric arguments to
476 indicate a range of history entries to display, save or read. 326 indicate a range of history entries to display, save or read.
477
478 * Add an option to include information about the Octave session in
479 the history list. Possibly a time/date stamp and the current
480 Octave line number, appended as a comment (users should probably
481 be able to control the format).
482 327
483 * Avoid writing the history file if the history list has not 328 * Avoid writing the history file if the history list has not
484 changed. 329 changed.
485 330
486 * Avoid permission errors if the history file cannot be opened for 331 * Avoid permission errors if the history file cannot be opened for
522 * The docs should mention something about efficiency and that using 367 * The docs should mention something about efficiency and that using
523 array operations is almost always a good idea for speed. 368 array operations is almost always a good idea for speed.
524 369
525 * Texinfo documentation for the C++ classes. 370 * Texinfo documentation for the C++ classes.
526 371
527 * Support multiple info files, perhaps allowing one or more in each
528 directory in the LOADPATH, so that local collections of M-files
529 could be documented with Info.
530
531 * Improve help messages for operators and keywords in help.cc.
532
533 * Make index entries more consistent to improve behavior of `help -i'. 372 * Make index entries more consistent to improve behavior of `help -i'.
534 373
535 * Make `help -i' try to find a whole word match first. 374 * Make `help -i' try to find a whole word match first.
536
537 * Allow help for local additions to be accessible with help -i.
538 375
539 * Clean up help stuff. 376 * Clean up help stuff.
540 377
541 * Demo files. 378 * Demo files.
542 379
546 It would be best to generate information for each function directly 383 It would be best to generate information for each function directly
547 from the M-files, so that the information doesn't have to be 384 from the M-files, so that the information doesn't have to be
548 duplicated, and will remain current if the M-files change. It 385 duplicated, and will remain current if the M-files change. It
549 would also be best to do as much of this as possible in an M-file, 386 would also be best to do as much of this as possible in an M-file,
550 though I wouldn't mind adding some basic support for listing the 387 though I wouldn't mind adding some basic support for listing the
551 names of all the directories in the LOADPATH, and the names of all 388 names of all the directories in the load path, and the names of all
552 the M-files in a given directory if that is needed. 389 the M-files in a given directory if that is needed.
553 390
554 Also make it possible to recursively search for Contents files: 391 Also make it possible to recursively search for Contents files:
555 392
556 help dir -- Contents from dir 393 help dir -- Contents from dir
557 help dir// -- Contents from dir and all its subdirectories 394 help dir// -- Contents from dir and all its subdirectories
558 help dir1/dir2 -- Contents from dir2 which is under dir1 395 help dir1/dir2 -- Contents from dir2 which is under dir1
559
560 * Some sort of blurb (2-3 pages) describing Octave in a reasonably
561 coherent way, where to get it etc., perhaps formatted pretty,
562 i.e. not just text. Maybe start with the latest Announce file.
563 396
564 ----- 397 -----
565 Tests: 398 Tests:
566 ----- 399 -----
567 400
610 * GNU coding standards: 443 * GNU coding standards:
611 444
612 -- Add a `Makefile' target to the Makefiles. 445 -- Add a `Makefile' target to the Makefiles.
613 -- Comments on #else and #endif preprocessor commands. 446 -- Comments on #else and #endif preprocessor commands.
614 -- Change error message format to match standards everywhere. 447 -- Change error message format to match standards everywhere.
615
616 * Use STL stuff instead of libg++ lists, maps, and stacks.
617 448
618 * Eliminate more global variables. 449 * Eliminate more global variables.
619 450
620 * Move procstream to liboctave. 451 * Move procstream to liboctave.
621 452