We are proud to present the new version 5.6 of the Calcpad software. It is much faster than the previous versions and includes a lot of new features.
Calcpad is ported to the latest Microsoft .NET 6.0 platform, which is faster than .NET Framework 4.x we used before. On the other side, the Calcpad code was significantly optimized. Now, we use expression trees to pre-compile parts of code that are repeatedly executed – bodies of functions, methods etc.
We also implemented better algorithms for numerical analysis. For example, we replaced the adaptive Simpson’s method for numerical integration with the adaptive Lobatto quadrature proposed by Gander and Gautschi. We adopted this algorithm for the C# language. We also developed an improved version of Anderson and Bjorks‘s root finding algorithm. That is why Calcpad 5.6 runs 3-4 times faster than 3.x versions in general and over 20 times faster when numerical methods are involved.
For plotting, we introduced adaptive interpolation of functions. It provides smooth graphs with the minimum number of calculation points. They are distributed unequally, depending on the function curvature as shown on the following figure.
Output formatting was also improved in respect to variable substitution and units of measurement. Speed of units arithmetic was also enhanced by optimizing memory consumption. That is how we reduced the pressure on the Garbage Collector.
There are also some improvements in the UI layer. Recent file list was introduced in version 5.0. Behaviour of the Undo function was improved. Support for Open Office or Libre Office was added alternatively to MS Word. Thanks to the wkhtmltopdf project, now we have direct export to pdf.
And last, but not at least, we added a lot of new and useful functions as follows:
Since version 5.0:
- new factorial operator “!”;
- log_2(x) – binary logarithm function;
- cbrt (x) – cubic root;
- root(x; n) – n-th root;
- csc(x) – cosecant;
- sec(x) – secant;
- csch(x) – hyperbolic cosecant;
- sech(x) – hyperbolic secant;
- acsc(x) – inverse cosecant;
- asec(x) – inverse secant;
- acsch(x) – inverse hyperbolic cosecant;
- asech(x) – inverse hyperbolic secant;
- acoth(x) – inverse hyperbolic cotangent;
Since version 5.6:
- min(x; y; z…) – minimum of multiple values;
- max(x; y; z…) – maximum of multiple values;
- sum(x; y; z…) – sum of multiple values;
- sumsq(x; y; z…) – sum of squares;
- srss(x; y; z…) – square root of sum of squares;
- average(x; y; z…) – average of multiple values;
- product(x; y; z…) – product of multiple values;
- mean(x; y; z…) – geometric mean;
- switch(<cond1>; <value1>; <cond2>; <value2>; …; <default>) – selective evaluation;
- take(n; a; b; c…) – returns the n-th element from the list;
- line(x; a; b; c…) – linear interpolation for variable x;
- spline(x; a; b; c…) – Hermite spline interpolation for variable x;
You can use the “take” function to represent vector and matrix-like behaviour. With the “line” and “spline“, you can interpolate over tabular data. Double interpolation is also possible with just a few line of code. If you have a function that is slow and heavy to calculate, you can use spline interpolation to speed up you program. Just sample the function in a few points and interpolate among them. We will discuss this in the next posts.
You can download the latest version from the following link: