1 # ifndef CPPAD_LOCAL_ERF_OP_HPP
2 # define CPPAD_LOCAL_ERF_OP_HPP
3 # if CPPAD_USE_CPLUSPLUS_2011
21 namespace CppAD {
namespace local {
101 const Base* parameter ,
133 addr[1] =
addr_t( i_z + 2 );
137 Base* x = taylor + arg[0] * cap_order;
138 Base* z_3 = taylor + (i_z+3) * cap_order;
139 Base* z_4 = taylor + (i_z+4) * cap_order;
147 for(
size_t j = p; j <= q; j++)
151 Base base_j =
static_cast<Base
>(double(j));
152 z_4[j] =
static_cast<Base
>(0);
153 for(
size_t k = 1; k <= j; k++)
154 z_4[j] += (Base(
double(k)) / base_j) * x[k] * z_3[j-k];
211 template <
class Base>
215 const Base* parameter ,
246 addr[1] =
addr_t(i_z + 2);
250 Base* x = taylor + arg[0] * cap_order;
251 Base* z_4 = taylor + (i_z + 4) * cap_order;
331 template <
class Base>
337 const Base* parameter ,
369 addr[1] =
addr_t( i_z + 2 );
373 size_t num_taylor_per_var = (cap_order - 1) * r + 1;
374 Base* x = taylor + arg[0] * num_taylor_per_var;
375 Base* z_3 = taylor + (i_z+3) * num_taylor_per_var;
376 Base* z_4 = taylor + (i_z+4) * num_taylor_per_var;
381 Base base_q =
static_cast<Base
>(double(q));
382 for(
size_t ell = 0; ell < r; ell++)
384 size_t m = (q-1)*r + ell + 1;
386 z_4[m] = z_3[0] * x[m];
387 for(
size_t k = 1; k < q; k++)
388 {
size_t x_index = (k-1)*r + ell + 1;
389 size_t z3_index = (q-k-1)*r + ell + 1;
390 z_4[m] += (Base(
double(k)) / base_q) * x[x_index] * z_3[z3_index];
478 template <
class Base>
483 const Base* parameter ,
500 Base* pz = partial + i_z * nc_partial;
502 for(
size_t i_d = 0; i_d <= d; i_d++)
511 const Base* x = taylor + arg[0] * cap_order;
512 Base* px = partial + arg[0] * nc_partial;
515 const Base* z_3 = taylor + (i_z+3) * cap_order;
516 Base* pz_3 = partial + (i_z+3) * nc_partial;
519 Base* pz_4 = partial + (i_z+4) * nc_partial;
524 { pz_4[j] /= Base(
double(j));
525 for(
size_t k = 1; k <= j; k++)
526 { px[k] +=
azmul(pz_4[j], z_3[j-k]) * Base(
double(k));
527 pz_3[j-k] +=
azmul(pz_4[j], x[k]) * Base(
double(k));
531 px[0] +=
azmul(pz_4[0], z_3[0]);
535 addr[1] =
addr_t( i_z + 2 );
537 d, i_z+3, addr, parameter, cap_order, taylor, nc_partial, partial
542 d, i_z+2, i_z+1, cap_order, taylor, nc_partial, partial
549 d, i_z+1, addr, parameter, cap_order, taylor, nc_partial, partial
556 d, i_z+0, addr, parameter, cap_order, taylor, nc_partial, partial
563 # endif // CPPAD_USE_CPLUSPLUS_2011
564 # endif // CPPAD_ERF_OP_INCLUDED
std::complex< double > erf(const std::complex< double > &x)
AD< Base > azmul(const AD< Base > &x, const AD< Base > &y)
void reverse_mulvv_op(size_t d, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivatives for result of op = MulvvOp.
CPPAD_TAPE_ADDR_TYPE addr_t
void forward_subpv_op_dir(size_t q, size_t r, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Multiple directions forward mode Taylor coefficients for op = SubpvOp.
void forward_erf_op_0(size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Zero order Forward mode Taylor coefficient for result of op = ErfOp.
size_t NumArg(OpCode op)
Number of arguments for a specified operator.
void reverse_mulpv_op(size_t d, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivative for result of op = MulpvOp.
void reverse_exp_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)
Reverse mode partial derivatives for result of op = ExpOp.
void forward_erf_op(size_t p, size_t q, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Forward mode Taylor coefficient for result of op = ErfOp.
size_t NumRes(OpCode op)
Number of variables resulting from the specified operation.
void reverse_erf_op(size_t d, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivatives for result of op = ErfOp.
void forward_mulpv_op_0(size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute zero order forward mode Taylor coefficient for result of op = MulpvOp.
void forward_erf_op_dir(size_t q, size_t r, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Forward mode Taylor coefficient for result of op = ErfOp.
Forward and reverse mode calculations for z = x - y.
Forward and reverse mode calculations for z = exp(x).
bool IdenticalZero(const std::complex< double > &x)
void forward_exp_op_dir(size_t q, size_t r, size_t i_z, size_t i_x, size_t cap_order, Base *taylor)
Multiple direction forward mode Taylor coefficient for op = ExpOp.
void forward_subpv_op(size_t p, size_t q, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficients for result of op = SubpvOp.
void forward_mulvv_op_dir(size_t q, size_t r, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Multiple directions forward mode Taylor coefficients for op = MulvvOp.
void forward_mulvv_op(size_t p, size_t q, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficients for result of op = MulvvOp.
void forward_mulpv_op(size_t p, size_t q, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficients for result of op = MulpvOp.
void forward_exp_op_0(size_t i_z, size_t i_x, size_t cap_order, Base *taylor)
Zero order forward mode Taylor coefficient for result of op = ExpOp.
void reverse_subpv_op(size_t d, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivative for result of op = SubpvOp.
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
void forward_mulpv_op_dir(size_t q, size_t r, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Multiple directions forward mode Taylor coefficients for op = MulpvOp.
void forward_mulvv_op_0(size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute zero order forward mode Taylor coefficients for result of op = MulvvOp.
void forward_exp_op(size_t p, size_t q, size_t i_z, size_t i_x, size_t cap_order, Base *taylor)
Forward mode Taylor coefficient for result of op = ExpOp.
Forward and reverse mode calculations for z = x * y.
void forward_subpv_op_0(size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute zero order forward mode Taylor coefficient for result of op = SubpvOp.