1 # ifndef CPPAD_LOCAL_SINH_OP_HPP
2 # define CPPAD_LOCAL_SINH_OP_HPP
16 namespace CppAD {
namespace local {
55 Base* x = taylor + i_x * cap_order;
56 Base* s = taylor + i_z * cap_order;
57 Base* c = s - cap_order;
65 { s[0] =
sinh( x[0] );
69 for(
size_t j = p; j <= q; j++)
73 for(k = 1; k <= j; k++)
74 { s[j] += Base(
double(k)) * x[k] * c[j-k];
75 c[j] += Base(
double(k)) * x[k] * s[j-k];
77 s[j] /= Base(
double(j));
78 c[j] /= Base(
double(j));
113 size_t num_taylor_per_var = (cap_order-1) * r + 1;
114 Base* x = taylor + i_x * num_taylor_per_var;
115 Base* s = taylor + i_z * num_taylor_per_var;
116 Base* c = s - num_taylor_per_var;
122 size_t m = (q-1) * r + 1;
123 for(
size_t ell = 0; ell < r; ell++)
124 { s[m+ell] = Base(
double(q)) * x[m + ell] * c[0];
125 c[m+ell] = Base(
double(q)) * x[m + ell] * s[0];
126 for(
size_t k = 1; k < q; k++)
127 { s[m+ell] += Base(
double(k)) * x[(k-1)*r+1+ell] * c[(q-k-1)*r+1+ell];
128 c[m+ell] += Base(
double(k)) * x[(k-1)*r+1+ell] * s[(q-k-1)*r+1+ell];
130 s[m+ell] /= Base(
double(q));
131 c[m+ell] /= Base(
double(q));
150 template <
class Base>
163 Base* x = taylor + i_x * cap_order;
164 Base* s = taylor + i_z * cap_order;
165 Base* c = s - cap_order;
186 template <
class Base>
203 const Base* x = taylor + i_x * cap_order;
204 Base* px = partial + i_x * nc_partial;
207 const Base* s = taylor + i_z * cap_order;
208 Base* ps = partial + i_z * nc_partial;
211 const Base* c = s - cap_order;
212 Base* pc = ps - nc_partial;
221 ps[j] /= Base(
double(j));
222 pc[j] /= Base(
double(j));
223 for(k = 1; k <= j; k++)
225 px[k] += Base(
double(k)) *
azmul(ps[j], c[j-k]);
226 px[k] += Base(
double(k)) *
azmul(pc[j], s[j-k]);
228 ps[j-k] += Base(
double(k)) *
azmul(pc[j], x[k]);
229 pc[j-k] += Base(
double(k)) *
azmul(ps[j], x[k]);
234 px[0] +=
azmul(ps[0], c[0]);
235 px[0] +=
azmul(pc[0], s[0]);
AD< Base > cosh(const AD< Base > &x)
AD< Base > azmul(const AD< Base > &x, const AD< Base > &y)
void forward_sinh_op_0(size_t i_z, size_t i_x, size_t cap_order, Base *taylor)
Compute zero order forward mode Taylor coefficient for result of op = SinhOp.
AD< Base > sinh(const AD< Base > &x)
size_t NumArg(OpCode op)
Number of arguments for a specified operator.
size_t NumRes(OpCode op)
Number of variables resulting from the specified operation.
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
void forward_sinh_op(size_t p, size_t q, size_t i_z, size_t i_x, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficient for result of op = SinhOp.
void forward_sinh_op_dir(size_t q, size_t r, size_t i_z, size_t i_x, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficient for result of op = SinhOp.
void reverse_sinh_op(size_t d, size_t i_z, size_t i_x, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivatives for result of op = SinhOp.