MCPcopy Create free account
hub / github.com/coin-or/CppAD / BoolCases

Function BoolCases

example/sparse/for_sparse_jac.cpp:27–96  ·  view source on GitHub ↗

vector class, elements of type bool

Source from the content-addressed store, hash-verified

25// define the template function BoolCases<Vector>
26template <class Vector> // vector class, elements of type bool
27bool BoolCases(void)
28{ bool ok = true;
29 using CppAD::AD;
30
31 // domain space vector
32 size_t n = 2;
33 CPPAD_TESTVECTOR(AD<double>) X(n);
34 X[0] = 0.;
35 X[1] = 1.;
36
37 // declare independent variables and start recording
38 CppAD::Independent(X);
39
40 // range space vector
41 size_t m = 3;
42 CPPAD_TESTVECTOR(AD<double>) Y(m);
43 Y[0] = X[0];
44 Y[1] = X[0] * X[1];
45 Y[2] = X[1];
46
47 // create f: X -> Y and stop tape recording
48 CppAD::ADFun<double> f(X, Y);
49
50 // sparsity pattern for the identity matrix
51 Vector r(n * n);
52 size_t i, j;
53 for(i = 0; i < n; i++)
54 { for(j = 0; j < n; j++)
55 r[ i * n + j ] = (i == j);
56 }
57
58 // sparsity pattern for F'(x)
59 Vector s(m * n);
60 s = f.ForSparseJac(n, r);
61
62 // check values
63 ok &= (s[ 0 * n + 0 ] == true); // Y[0] does depend on X[0]
64 ok &= (s[ 0 * n + 1 ] == false); // Y[0] does not depend on X[1]
65 ok &= (s[ 1 * n + 0 ] == true); // Y[1] does depend on X[0]
66 ok &= (s[ 1 * n + 1 ] == true); // Y[1] does depend on X[1]
67 ok &= (s[ 2 * n + 0 ] == false); // Y[2] does not depend on X[0]
68 ok &= (s[ 2 * n + 1 ] == true); // Y[2] does depend on X[1]
69
70 // check that values are stored
71 ok &= (f.size_forward_bool() > 0);
72 ok &= (f.size_forward_set() == 0);
73
74 // sparsity pattern for F'(x)^T, note R is the identity, so R^T = R
75 bool transpose = true;
76 Vector st(n * m);
77 st = f.ForSparseJac(n, r, transpose);
78
79 // check values
80 ok &= (st[ 0 * m + 0 ] == true); // Y[0] does depend on X[0]
81 ok &= (st[ 1 * m + 0 ] == false); // Y[0] does not depend on X[1]
82 ok &= (st[ 0 * m + 1 ] == true); // Y[1] does depend on X[0]
83 ok &= (st[ 1 * m + 1 ] == true); // Y[1] does depend on X[1]
84 ok &= (st[ 0 * m + 2 ] == false); // Y[2] does not depend on X[0]

Callers

nothing calls this directly

Calls 5

ForSparseJacMethod · 0.80
size_forward_boolMethod · 0.80
size_forward_setMethod · 0.80
IndependentFunction · 0.50
YFunction · 0.50

Tested by

no test coverage detected