Version 3 of mathemaTcl

Updated 2017-02-19 11:47:26 by arjen

Arjen Markus (10 february 2017) MathemaTcl is the name I chose for a collection of mathematical libraries (mostly from Netlib) that can be accessed from Tcl.

You can find the code here: [L1 ].

To build it (or parts of it) you need a C and possibly a Fortran compiler that can build extensions for your version of Tcl.

Currently the following extensions are available:

  • CEPHES - a library for evaluating special mathematical function, such as the various Bessel functions and exponential integral functions.
  • FFTPACK - a one-dimensional FFT package (derived from the SLATEC library)
  • GLOBAL - a package to find the global minimum of a function of one or several variables
  • QUADPACK - a package for the automatic integration of functions over finite or infinite intervals
  • SPECFUNC - a collection of routines to evaluate special mathematical functions, such as Bessel functions of the first and second kind, exponential integrals and the like.
  • WAVELIB - a library for wavelet transforms

Warning: This is work in progress at the moment. For most packages documentation is now available, but they should be tested more extensively.

(updated: 19 february 2017)


Demo

# demo_fftpack.tcl --
#     Demonstration of the FFTPACK wrapper
#
#     Note: the transform is not normalised, hence the factor "size"
#
package require tcl_fftpack

set size 101

set transform [::fftpack::createTransform1D $size]

set PI [expr {acos(-1.0)}]

for {set i 0} {$i < $size} {incr i} {
    lappend values [expr {0.4+cos(2.0*$PI*$i/100.0)+sin(4.0*$PI*$i/100.0)}]
}

set oldvalues $values

set transformed [$transform forward $values]

puts "Transform:"
for {set i 0} {$i < $size/2+1} {incr i} {
    puts [format "%12.4f %12.4f" [lindex $transformed $i 0] [lindex $transformed $i 1]]
}

set reconstructed [$transform backward $transformed]

puts "Reconstructed and old values (unnormalised):"
for {set i 0} {$i < $size} {incr i} {
    puts [format "%12.4f %12.4f" [lindex $reconstructed $i] [expr {$size*[lindex $oldvalues $i]}]]
}