1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298
|
lynx -dump http://math.nist.gov/tnt/history.html > Changes
[1]TNT
[2]Template Numerical Toolkit
[3][Home] [4][Overview] [5][Examples] [6][Documentation] [7][Download]
_________________________________________________________________
Revision History
05/31/05: TNT Update (version 1.2.6)
* bug fix in subarray() primtive.
04/12/05: Jama Update (version 1.2.3)
* updated LU getPivot() routine.
02/11/05: TNT Update (version 1.2.5)
* replaced DEBUG macros in tnt_array1d.h and tnt_fortran_array1d.h
with TNT_DEBUG macros.
11/16/04: TNT Update (version 1.2.4)
* replaced "data" with "data_" in internal tnt_i_revec.h routines.
(Does not affect public interface or implementation.)
* changed all occurences of "endl" with "\n".
11/12/04: Jama Update (version 1.2.3)
* replaced bitwise OR with boolean OR in SVD routine. (Does not
affect correctness, but better programming practice.)
* removed max and min functions from tnt_math_utils.h to avoid
conflict with ANSI C++ definitions.
09/17/04: TNT Update (version 1.2.2)
* fixed bug in internal vector representation tnt_i_vecref function
is_null().
05/04: TNT Update (version 1.2.1)
* made Stopwatch constructor inline to avoid collisions when linking
multiple TNT object files on some compilers.
* fixed copy_() method in internal implementation
06/03: TNT Version 1.2 (interface update)
* New Features:
+ added Array operators +,-,*,/,+=,-=,*=,/= to all TNT arrays
+ auto conversion to T** for Array2D< T >, and T*** for
Array3D< T >, as well as const versions.
* Bug fixes, updates
+ fixed memory leak in array allocation from external (to TNT)
data.
+ updated deprecated strstream interface in tnt_vec.h and
tnt_cmath.h
+ arrays now handle 0-length dimensions properly
+ fixed operator=(scalar) in 2D and 3D Fortran arrays.
+ made copy() methods of Fortran arrays const
03/03: Linear Algebra Update (Jama v. 1.2.1)
* fixed bug in QR solver
01/03: Linear Algebra Update (Jama v. 1.2) (interface update)
* added LU solver
* fixed bug in SVD solver
* added special-case solvers for 1-d vectors
08/02: TNT Version 1.1
* 08/31/02 (v. 1.1.1): fixed matmult bug in tnt_array2d_utils.h
06/02: TNT Version 1.0 (interface update)
* Distinguishes between TNT interface and implemetations. There can
be several implementations that incorporate the TNT interface.
This site provides a reference implementation which is portable
and usable, but developers are encouraged to create others which
take advantage of specific features and optimziation strategies,
such as the BLAS, or expression templates.
* New multidimensional arrays: Array1D, Array2D, Array3D,
Fortran_Array1D, Fortran_Array2D, Fortran_Array3D
+ Arrays are pass-by-reference, employ shallow-assignment, and
utilize reference-counting to manage memory storage. This
allows one to return arrays from functions without relying on
advanced compiler optimizations to avoid excess copying.
o Fortran Arrays utilize A(i,j) indexing with A(1,1) as
the first element, and employ "column-major" ordering.
The internal storage is contiguous.
o Arrays utilize A[i][j] indexing with A[0][0] as the
first element, and employ "row-major" ordering. The
internal storage is contiguous, so rows cannot be
aliased.
+ Arrays will eventually replace the Vector, Matrix objects
from previous versions. (These are maintained in the current
release for bakcward compatibility, but will be deprecated in
future verions.)
+ Arrays do not overlap memory storage (i.e. Regions are not
supported). This simplifies the interface and allows
algorithms using TNT arrays to employ aliasing optimizations
that were not possible before.
* New QR, Cholesky, SVD algorithms. The SVD and QR factorizations
work with non-square matrices with m >= n.
* New eigenvalue/eigenvector solver for real general (symmetric and
non-symmetric) matrices.
* New documentation, generated with Doxygen.
* file names are in the form "tnt_array2d.h", rather than
"tnt/array2d.h". This avoids having to put TNT header files in
their own directory.
* Stopwatch timing object has slightly different semantics. The
start() operation resets the clock to 0.00. See documentation for
details.
* Deprecated features: (to be removed in future versions)
+ TNT:Vector and TNT::Matrix classes: these were pass-by-value
classes, which unfortunately many compiler still cannot
optimize adequately. In particular, on many platforms it was
still expensive to return a TNT::Vector or TNT::Matrix from a
function, although the copying could be avoided. To address
this issue, the new Array classes utilize shallow assignment
(like C strings) to minimize the overhead.
+ TNT::Region classes: these are rarely needed by users and
complicate the interface and implementation, but most
importantly they allow for overlapping of memory locations
among separate objects, which limits important compiler
optimizations.
08/00: Version 0.9.4
* TNT include files are in their own subdirectory (e.g. tnt/vec.h,
tnt/cmat.h).
* NIST disclaimer attached to each TNT file.
* some default initalizers were changed from T(0) to T().
09/99: Version 0.9.3
* fixed operator)) in vec.h.
* fixed example in lu.cc, qr.cc, tlapack.cc,
* fixed comment in cmatreg.cc.
* upated template Matrix argument in qr.h.
Version 0.9 of the Template Numerical Toolkit represents a significant
update achieving ANSI C++ compatibility. Numerous users are now using
or are in the process of upgrading to new ANSI compliant C++ compilers
and this release reflects that change. This version of TNT was
developed and tested with Microsoft Visual C++ 5.0 but should compile
with any ANSI C++ compiler (see [8]compilation notes below) .
In particular, the compiler must support templates, namespaces, the
typename modifier, and portions of the Standard Template Library
(STL). Some examples make use of the standard valarray<> class. Most
of the ANSI changes to TNT consist of typename modifiers, filename
updates (e.g. < strstream.h > became < sstream >), replacement of the
former TNT DComplex class with the standard complex < double >, and
the renaming of template arguments. The majority of these changes to
TNT were postponed until ratification of the C++ standard by the ANSI
committee and the availability of real compilers supporting these new
features.
Note that the scope of these changes implies that earlier compilers
(e.g. gcc 2.7, Watcom 10.0) will NOT work with the new version of TNT.
(If your compiler is not ANSI compatible, contact your compiler
vendor.)
NOTE: Neither g++ 2.8.1 or egcs 1.0.2 support ANSI C++ namespaces,
hence will NOT be able to compile TNT 0.9.
New Features:
1. ANSI C++ compatibility: should work with most updated C++
compilers, including Microsoft VC++ 5.0 (see notes.)
2. TNT namespace: all TNT classes and functions use their own
namespace, to avoid naming collision with other packages. (New
names are given below.) Some examples use the TNT:: prefix, while
most use using namespace TNT; near the begining of the program to
allow shorter names.
3. TNT container adaptors now work with ANSI valarray<> class : Our
Vector_adaptor<> class (formerly known as TNT_Vector<>) transforms
an STL-like vector class into something more suitable for
numerics. In particular, it adds features such as
+ optional bounds check (via compile-time TNT_BOUNDS_CHECK
macro)
+ Fortran-like 1-based offsets (using "(i)" rather than "[i]")
+ regions, e.g. A(Index(1,10)) = ...
+ initialization from strings
+ simple I/O for streams
In this way, one could change the internal class for memory
managment (say, utilizing a special memory allocator for imbedded
systems) yet still retain TNT's features for matrix/vector
computing. TNT's original scheme used begin()/end() methods,
patterned after the STL container methods. Since then, however,
several vector-like classes (including ANSI's own valarray<>
class) have evolved away from these methods. The new version of
TNT::Vector_adaptor<> does not rely on begin()/end(). (See
[9]tntvec3.cc example.)
4. TNT documentation now includes the output files from the examples.
(See [10]below.)
Changes:
1. New class names: Using a separate namespace allows us to simplify
some of the naming schemes, so we took the opportunity to clean up
the rest of the TNT classes and functions to give them a more
consistent look. In particular, the old C_matrix<> class that
provided C-like array access (0-offset, [i][j] indexing) is now
simply called Matrix<>.
Old name
(Ver. 0.8)
New name
(Ver. 0.9)
Subscript TNT::Subscript
Vector<> TNT::Vector<>
C_matrix<> TNT::Matrix<>
Fortran_matrix<> TNT::Fortran_Matrix<>
TNT_Vector<> TNT::Vector_Adaptor<>
Fortran_sparse_vector<> TNT::Fortran_Sparse_Vector<>
Fortran_compressed_col_matrix<> TNT::Fortran_Sparse_Col_Matrix<>
Region1D TNT::Region1D
Region2D TNT::Region2D
Stopwatch TNT::Stopwatch
seconds( ) TNT::seconds( )
DComplex complex< double >
2. DComplex no longer supported: During the period that complex
number support was inconsistent among C++ compilers, we included
an intermediate datatype, DComplex, to cloak the underlying
double-precision complex class name, so that TNT code would look
somewhat uniform. With new compilers supporting the ANSI complex<>
standard, there is no longer a need for this, and it has therefore
been dropped.
3. Fortran 77 interfaces no longer supported: There is still no
standard methodology for intergrating C/C++ and Fortran on similar
platforms. Each compiler relies on various tweaks with underscores
and argument massaging. Character string arguments often do not
work and often there is confusion at link time about which system
libraries to use. On Windows95/NT systems the situation is even
worse, due to several incompatible argument-passing schemes (e.g.
STDCALL, FORTRAN, PASCAL, CDECL, etc.). There are some
[11]examples of f77 calls to the BLAS and LAPACK, but these are
included only for demonstration and are not part of TNT. Such
interfaces are not difficult to develop for your own platform, but
we just do not have the time to provide this support for every
system.
Other fixes and updates:
1. Several of the templated functions used "Matrix" and "Vector"
dummy arguments that caused some confusion with the native classes
of TNT. These these dummy arguments have been replaced with
"MaTRix" and "VecToR".
2. "Subscript Nmod4 = N & 4" was changed to "N % 4" in vec.h, cmat.h,
and fmat.h.
3. Several of the TNT examples, use the setf() stream modifier to
produce formatted output.
4. Version macros in "version.h" file are now characters. Added
TNT_VERSION_STRING macro (e.g. "0.9.0") for easy identification,
5. Removed _NEEDS_ABS_MIN_ macro from tntmath.h. All of these
functions are now in the TNT namespace.
6. Added "X(const &X)" constructor to fcscmat.h
Compilation Notes
NOTE: Neither g++ 2.8.1 or egcs 1.0.2 support ANSI C++ namespaces,
hence will NOT be able to compile TNT 0.9.
This version of TNT has been tested using Microsoft Visual C++ v. 5.0,
for which you will need to use the following flags:
* -GX, since exceptions are not called (will supress warnings)
* -TP, since C++ filename sources have .cc extensions
Also, be aware that examples using the ANSI C++ valarray class (e.g.
[12]tntvec3.cc) may generate spurious warnings.
We would appreciate feedback on using/compiling TNT for other ANSI C++
compatible platforms.
_________________________________________________________________
[13]TNT Home Page
[14]Roldan Pozo
References
1. http://math.nist.gov/tnt
2. http://math.nist.gov/tnt
3. http://math.nist.gov/tnt/index.html
4. http://math.nist.gov/tnt/overview.html
5. http://math.nist.gov/tnt/examples.html
6. http://math.nist.gov/tnt/documentation.html
7. http://math.nist.gov/tnt/download.html
8. http://math.nist.gov/tnt/history.html#compilation_notes
9. http://math.nist.gov/tnt/src/tntvec3.cc
10. http://math.nist.gov/tnt/history.html#examples
11. http://math.nist.gov/tnt/examples.html#lapack
12. http://math.nist.gov/tnt/src/tntvec3.cc
13. http://math.nist.gov/tnt/index.html
14. http://math.nist.gov/pozo
|