Blog Options
Archive
<< September 2025 >>-
Wednesday 17
- TMS at the 30 Years of Delphi Celebration in Sinsheim -
Thursday 11
- RAD Studio 13 Florence support for TMS components -
Wednesday 10
- Building a Scalable Gift Aid SaaS Platform with TMS Sphinx, Aurelius, XData, and WEB Core -
Tuesday 9
- Adding an existing library to Smart Setup in 20 minutes -
Friday 5
- A new chapter for TMS -
Thursday 4
- EKON29 The Developer Conference for Delphi -
Wednesday 3
- AI-powered HTML Reports with Embedded Browser Visualization -
Monday 1
- Kickstart the New Academic Year with TMS Academic for Delphi and C++ Developers
- Filter and Sort your tasks in TMS FNC Gantt Chart
- StellarDS: Introduction to Cloud Backend - Technology and Costs
Authors
- Bernard Roussely (2)
- Wagner Landgraf (93)
- Roman Yankovsky (2)
- Bart Holvoet (41)
- Aaron Decramer (55)
- Pieter Scheldeman (124)
- Nancy Lescouhier (32)
- Adrian Gallero (34)
- Bruno Fierens (443)
- Marcos Douglas B. Santos (5)
- Bernard (4)
- Bradley Velghe (33)
- Andrew Simard (86)
- Holger Flick (15)
- Gjalt Vanhouwaert (42)
- Tunde Keller (30)
- Masiha Zemarai (117)
Blog
All Blog Posts | Next Post | Previous Post
Introducing functional derivatives is easy
Monday, March 20, 2017
The unique feature of Analytics library is symbolic derivatives calculation. The library provides the simplest way to get a symbolic derivative expression for almost any complicated expression. There are predefined derivative for all standard functions: trigonometric, hyperbolic, logarithmic and exponential, inverse trigonometric and hyperbolic, and other.Another fine thing is that any developer can easily define derivative for any other function. Let us consider how to define derivative for special Gamma function (https://en.wikipedia.org/wiki/Gamma_function#General). Its derivative is defined via another special function Digamma (Polygamma function of order 0, https://en.wikipedia.org/wiki/Polygamma_function). Hereafter the Gamma function denoted as G and the Digamma (and Polygamma) as Y. Then, the derivative formula is: d(G(x))/dx = G(x)*Y(x).
To introduce new functional derivative new class must be implemented. In our case, the class is inherited from TSimpleFunctionalDerivative because the function has one argument only. Here is the code of the realized class:
TGammaDerivative = class sealed(TSimpleFunctionalDerivative) protected function GetFunctionName(): string; override; function BaseDerivative(argument: TBaseExpression): TBaseExpression; override; public class function IsRealized: boolean; override; end; function TGammaDerivative.GetFunctionName: string; begin result:= 'G'; end; class function TGammaDerivative.IsRealized: boolean; begin result:= true; end; function TGammaDerivative.BaseDerivative(argument: TBaseExpression): TBaseExpression; var ge: TBaseExpression; dge: TBaseExpression; begin ge:= TFunctionExpression.CreateSimple('G', argument); dge:= TFunctionExpression.CreateSimple('Y', argument); result:= TProductExpression.MakeProduct(ge, dge); end;
Now we can calculate derivatives for expressions with the Gamma function. For the simplest case with input string G(x) we get the expected output string G(x)*Y(x). No surprise here, because we just wrote the code, which produces the output.
But the amazing thing is when we trying to calculate the derivative expression for the Gamma function with a composite argument. As example, for the input string G(x^2+1) it produces the output string (G(x^2+1)*Y(x^2+1))*(2*x) which is totally correct for this case. And the output is correct for all the expressions with the Gamma function. It is because the Analytics library cares about other things, like implementing the chain rule for derivation process.
The source code of the example project is available here.
Nancy Lescouhier

This blog post has not received any comments yet.
All Blog Posts | Next Post | Previous Post