[ Home | GAUSS | GAUSS Engine | GAUSS Apps | 3rd Party Apps | Keywords Index ]

Analytical Differentiation

This example shows how Symbolic Tools uses the Maple kernel to carry out analytical differentiation, and then to create and compile a GAUSS proc that has the same functionality.  This is the basis for Automatic Differentiation.

The process of creating a proc based on symbolic code is a one line operation-   symproc. This command takes four arguments - the proc name, the input argument(s), the output required, and the code.  The code ( txt ) is GAUSS, with the gradp function overloaded to permit a symbolic second argument.  The call to symproc executes the code in the Maple kernel, creates the equivalent GAUSS proc, and compiles the proc, so that it can be called immediately - as shown below.

library symbolic; // define the library
call symstate(reset);

// turns on symbolic processing

proc difsin; endp; // dummy proc
txt = "
slist = {x,y};
llf = sin(x*y)^2;
llfg = gradp(llf,slist);

";

call symproc("difsin","x,y","llfg",txt);

// create and compile the proc
rslt = difsin(1,2); // execute the proc
"rslt\n" rslt;

The proc that is created by the  symproc command :

proc difsin(x,y);
local t0, t1, t2, t3, t4,
unknown;
unknown = zeros(rows(y),2);
t1 = x .* y;
t2 = sin(t1);
t3 = cos(t1);
t4 = t2 .* t3;
unknown[.,1+0] = 2.0 .* t4 .* y;
unknown[.,1+1] = 2.0 .* t4 .* x;
retp(unknown);

endp;

The output from this example is :

rslt -1.5136050 -0.75680251