![]() |
Prev | Next | a_fun_jacobian_xam.pm | Headings |
package a_fun_jacobian_xam; sub a_fun_jacobian_xam() { # check for standard perl programming conventions use strict; use warnings; # # load the Cppad Swig library use pm_cppad; # # initilaize return variable my $ok = 1; # --------------------------------------------------------------------- # number of dependent and independent variables my $n_dep = 1; my $n_ind = 3; # # create the independent variables ax my $x = new pm_cppad::vec_double($n_ind); for(my $i = 0; $i < $n_ind ; $i++) { $x->set($i, $i + 2.0); } my $ax = pm_cppad::independent($x); # # create dependent variables ay with ay0 = ax_0 * ax_1 * ax_2 my $ax_0 = $ax->get(0); my $ax_1 = $ax->get(1); my $ax_2 = $ax->get(2); my $ay = new pm_cppad::vec_a_double($n_dep); $ay->set(0, $ax_0 * $ax_1 * $ax_2); # # define af corresponding to f(x) = x_0 * x_1 * x_2 my $af = new pm_cppad::a_fun($ax, $ay); # # compute the Jacobian f'(x) = ( x_1*x_2, x_0*x_2, x_0*x_1 ) my $fp = $af->jacobian($x); # # check Jacobian my $x_0 = $x->get(0); my $x_1 = $x->get(1); my $x_2 = $x->get(2); $ok = $ok && $fp->get(0 * $n_ind + 0) == $x_1 * $x_2 ; $ok = $ok && $fp->get(0 * $n_ind + 1) == $x_0 * $x_2 ; $ok = $ok && $fp->get(0 * $n_ind + 2) == $x_0 * $x_1 ; # return( $ok ); }