GiNaC is really fantastic for problems where you have symbolic models that are generated from large data sets, especially iterating between solvers and symbolic forms.
For example, high-dimensional Cox proportional hazards models have semi-parametric forms that require a mixture of symbolic and numeric computation. In this case, our study run-time was over 3 days, over a few thousand cores. Without compiling the numerics to native code, taking advantage of symbolic simplifications, and calculating Hessians symbolically then evaluating millions of times numerically, the same study would have required years of runtime.
In a computer vision application, I used GiNaC::compile_ex for a similar advantage, solving stochastic functional equations, and selecting optimal model parameters, while accounting for noise. In a way, the massive boost in symbolic + numeric speed made this practically interactive, since previous models could be cached in a compiled form, meaning that instead of plodding along, looking at a few stills here and there to see if the algorithms were producing good results, I could use live video feeds and interactively get a sense of whether the noise and stochastic model were functioning as intended.
One of the most fun programs I ever wrote is a program that generates symbolic forms for stochastic models, runs them against live camera feeds, which in turn generates optimal copulas and so on, that get reduced to C code, that ultimately produces optimized VHDL. Every step involves iterations of symbolic calculation, numeric calculation, and generating the code that will perform the next step. The code is a mixture of C++ (model computations, camera IO, optimal pipelining for VHDL), Octave (graphical views), R (statistical routines), C (mostly generated code), Perl (code transformations), and VHDL (mostly generated code). The only part that wasn't so fun was actually invoking the windows-based Altera VHDL compiler, which could take an hour or more to do the synthesis.
Also, GNU Octave also has a nice package ("symbolic") for using GiNaC interactively.
http://www.ginac.de/
GiNaC is really fantastic for problems where you have symbolic models that are generated from large data sets, especially iterating between solvers and symbolic forms.
For example, high-dimensional Cox proportional hazards models have semi-parametric forms that require a mixture of symbolic and numeric computation. In this case, our study run-time was over 3 days, over a few thousand cores. Without compiling the numerics to native code, taking advantage of symbolic simplifications, and calculating Hessians symbolically then evaluating millions of times numerically, the same study would have required years of runtime.
In a computer vision application, I used GiNaC::compile_ex for a similar advantage, solving stochastic functional equations, and selecting optimal model parameters, while accounting for noise. In a way, the massive boost in symbolic + numeric speed made this practically interactive, since previous models could be cached in a compiled form, meaning that instead of plodding along, looking at a few stills here and there to see if the algorithms were producing good results, I could use live video feeds and interactively get a sense of whether the noise and stochastic model were functioning as intended.
One of the most fun programs I ever wrote is a program that generates symbolic forms for stochastic models, runs them against live camera feeds, which in turn generates optimal copulas and so on, that get reduced to C code, that ultimately produces optimized VHDL. Every step involves iterations of symbolic calculation, numeric calculation, and generating the code that will perform the next step. The code is a mixture of C++ (model computations, camera IO, optimal pipelining for VHDL), Octave (graphical views), R (statistical routines), C (mostly generated code), Perl (code transformations), and VHDL (mostly generated code). The only part that wasn't so fun was actually invoking the windows-based Altera VHDL compiler, which could take an hour or more to do the synthesis.
Also, GNU Octave also has a nice package ("symbolic") for using GiNaC interactively.
https://octave.sourceforge.io/symbolic/