当前位置: 首页>>代码示例>>C++>>正文


C++ var::dual_numbers方法代码示例

本文整理汇总了C++中var::dual_numbers方法的典型用法代码示例。如果您正苦于以下问题:C++ var::dual_numbers方法的具体用法?C++ var::dual_numbers怎么用?C++ var::dual_numbers使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在var的用法示例。


在下文中一共展示了var::dual_numbers方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: nomad_output_value_error

  inline var<AutodiffOrder, StrictSmoothness, ValidateIO>
    operator/(const var<AutodiffOrder, StrictSmoothness, ValidateIO>& v1,
              const var<AutodiffOrder, StrictSmoothness, ValidateIO>& v2) {

    if (ValidateIO) {
      validate_input(v1.first_val(), "operator/");
      validate_input(v2.first_val(), "operator/");
    }
      
    const short partials_order = 3;
    const unsigned int n_inputs = 2;
    
    create_node<binary_var_node<AutodiffOrder, partials_order>>(n_inputs);
    
    double x = v1.first_val();
    double y_inv = 1.0 / v2.first_val();
    double val = x * y_inv;
    
    try {
      push_dual_numbers<AutodiffOrder, ValidateIO>(val);
    } catch (nomad_error) {
      throw nomad_output_value_error("operator/");
    }
      
    push_inputs(v1.dual_numbers());
    push_inputs(v2.dual_numbers());
    
    double y_inv_n = y_inv * y_inv;
    
    if (AutodiffOrder >= 1) {
      push_partials<ValidateIO>(y_inv);
      push_partials<ValidateIO>(- val * y_inv);
    }
    if (AutodiffOrder >= 2) {
      push_partials<ValidateIO>(0);
      push_partials<ValidateIO>(-y_inv_n);
      push_partials<ValidateIO>(2 * val * y_inv_n);
    }
    if (AutodiffOrder >= 3) {
      y_inv_n *= y_inv;
      push_partials<ValidateIO>(0);
      push_partials<ValidateIO>(0);
      push_partials<ValidateIO>(2 * y_inv_n);
      push_partials<ValidateIO>(-6 * val * y_inv_n);
    }
    
    return var<AutodiffOrder, StrictSmoothness, ValidateIO>(next_node_idx_ - 1);
    
  }
开发者ID:stan-dev,项目名称:nomad,代码行数:49,代码来源:operator_division.hpp

示例2: nomad_output_value_error

  inline var<AutodiffOrder, StrictSmoothness, ValidateIO>
    binary_prod_cubes(const var<AutodiffOrder, StrictSmoothness, ValidateIO>& v1,
                      const var<AutodiffOrder, StrictSmoothness, ValidateIO>& v2) {

    if (ValidateIO) {
      validate_input(v1.first_val(), "binary_prod_cubes");
      validate_input(v2.first_val(), "binary_prod_cubes");
    }
      
    const short partials_order = 3;
    const unsigned int n_inputs = 2;
    
    create_node<binary_var_node<AutodiffOrder, partials_order>>(n_inputs);

    double x = v1.first_val();
    double y = v2.first_val();
    
    try {
      push_dual_numbers<AutodiffOrder, ValidateIO>(binary_prod_cubes(x, y));
    } catch (nomad_error) {
      throw nomad_output_value_error("binary_prod_cubes");
    }
      
    push_inputs(v1.dual_numbers());
    push_inputs(v2.dual_numbers());
    
    try {
      if (AutodiffOrder >= 1) {
        push_partials<ValidateIO>(3 * x * x * y * y * y);
        push_partials<ValidateIO>(3 * x * x * x * y * y);
      }
      if (AutodiffOrder >= 2) {
        push_partials<ValidateIO>(6 * x * y * y * y);
        push_partials<ValidateIO>(9 * x * x * y * y);
        push_partials<ValidateIO>(6 * x * x * x * y);
      }
      if (AutodiffOrder >= 3) {
        push_partials<ValidateIO>(6 * y * y * y);
        push_partials<ValidateIO>(18 * x * y * y);
        push_partials<ValidateIO>(18 * x * x * y);
        push_partials<ValidateIO>(6 * x * x * x);
      }
    } catch (nomad_error) {
      throw nomad_output_partial_error("binary_prod_cubes");
    }
      
    return var<AutodiffOrder, StrictSmoothness, ValidateIO>(next_node_idx_ - 1);
    
  }
开发者ID:stan-dev,项目名称:nomad,代码行数:49,代码来源:binary_prod_cubes.hpp

示例3: nomad_output_value_error

  inline var<AutodiffOrder, StrictSmoothness, ValidateIO>
    lgamma(const var<AutodiffOrder, StrictSmoothness, ValidateIO>& input) {
    
    if (ValidateIO) validate_input(input.first_val(), "lgamma");
      
    const short partials_order = 3;
    const unsigned int n_inputs = 1;
    
    create_node<unary_var_node<AutodiffOrder, partials_order>>(n_inputs);

    double val = input.first_val();
    
    try {
      push_dual_numbers<AutodiffOrder, ValidateIO>(lgamma(val));
    } catch (nomad_error) {
      throw nomad_output_value_error("lgamma");
    }
      
    push_inputs(input.dual_numbers());
    
    try {
      if (AutodiffOrder >= 1) push_partials<ValidateIO>(digamma(val));
      if (AutodiffOrder >= 2) push_partials<ValidateIO>(trigamma(val));
      if (AutodiffOrder >= 3) push_partials<ValidateIO>(quadrigamma(val));
    } catch (nomad_error) {
      throw nomad_output_partial_error("lgamma");
    }
      
    return var<AutodiffOrder, StrictSmoothness, ValidateIO>(next_node_idx_ - 1);
    
  }
开发者ID:stan-dev,项目名称:nomad,代码行数:31,代码来源:lgamma.hpp

示例4: nomad_output_value_error

  inline var<AutodiffOrder, StrictSmoothness, ValidateIO>
    inv_logit(const var<AutodiffOrder, StrictSmoothness, ValidateIO>& input) {
    
    if (ValidateIO) validate_input(input.first_val(), "inv_logit");
      
    const short partials_order = 3;
    const unsigned int n_inputs = 1;
    
    create_node<unary_var_node<AutodiffOrder, partials_order>>(n_inputs);

    double s = inv_logit(input.first_val());
    
    try {
      push_dual_numbers<AutodiffOrder, ValidateIO>(s);
    } catch (nomad_error) {
      throw nomad_output_value_error("inv_logit");
    }
      
    push_inputs(input.dual_numbers());
    
    double ds = s * (1 - s);
    
    try {
      if (AutodiffOrder >= 1) push_partials<ValidateIO>(ds);
      if (AutodiffOrder >= 2) push_partials<ValidateIO>(ds * (1 - 2 * s) );
      if (AutodiffOrder >= 3) push_partials<ValidateIO>(ds * (1 - 6 * s * (1 - s)) );
    } catch (nomad_error) {
      throw nomad_output_partial_error("inv_logit");
    }
      
    return var<AutodiffOrder, StrictSmoothness, ValidateIO>(next_node_idx_ - 1);
    
  }
开发者ID:stan-dev,项目名称:nomad,代码行数:33,代码来源:inv_logit.hpp

示例5: nomad_output_value_error

  inline var<AutodiffOrder, StrictSmoothness, ValidateIO>
    operator++(const var<AutodiffOrder, StrictSmoothness, ValidateIO>& v1, int /* dummy */) {

    if (ValidateIO) validate_input(v1.first_val(), "operator++");
      
    create_node<unary_plus_var_node<AutodiffOrder>>(1);
    
    try {
      push_dual_numbers<AutodiffOrder, ValidateIO>(v1.first_val() + 1.0);
    } catch (nomad_error) {
      throw nomad_output_value_error("operator++");
    }
      
    push_inputs(v1.dual_numbers());
    
    return var<AutodiffOrder, StrictSmoothness, ValidateIO>(next_node_idx_ - 1);
    
  }
开发者ID:stan-dev,项目名称:nomad,代码行数:18,代码来源:operator_unary_increment.hpp

示例6: nomad_output_value_error

  inline var<AutodiffOrder, StrictSmoothness, ValidateIO>
    log2(const var<AutodiffOrder, StrictSmoothness, ValidateIO>& input) {
    
    if (ValidateIO) {
      double val = input.first_val();
      validate_input(val, "log2");
      validate_lower_bound(val, 0, "log2");
    }
      
    const short partials_order = 3;
    const unsigned int n_inputs = 1;
    
    create_node<unary_var_node<AutodiffOrder, partials_order>>(n_inputs);

    double val = input.first_val();
    
    try {
      push_dual_numbers<AutodiffOrder, ValidateIO>(log2(val));
    } catch (nomad_error) {
      throw nomad_output_value_error("log2");
    }
      
    push_inputs(input.dual_numbers());
    
    double val_inv = 1.0 / val;
    
    try {
      if (AutodiffOrder >= 1) push_partials<ValidateIO>(val = val_inv * 1.44269504088896);
      if (AutodiffOrder >= 2) push_partials<ValidateIO>(val *= - val_inv);
      if (AutodiffOrder >= 3) push_partials<ValidateIO>(val *= - 2.0 * val_inv);
    } catch (nomad_error) {
      throw nomad_output_partial_error("log2");
    }
      
    return var<AutodiffOrder, StrictSmoothness, ValidateIO>(next_node_idx_ - 1);
    
  }
开发者ID:stan-dev,项目名称:nomad,代码行数:37,代码来源:log2.hpp

示例7: nomad_output_value_error

  inline var<AutodiffOrder, StrictSmoothness, ValidateIO>
    sqrt(const var<AutodiffOrder, StrictSmoothness, ValidateIO>& input) {
    
    if (ValidateIO) {
      double val = input.first_val();
      validate_input(val, "sqrt");
      validate_lower_bound(val, 0, "sqrt");
    }
      
    const short partials_order = 3;
    const unsigned int n_inputs = 1;
    
    create_node<unary_var_node<AutodiffOrder, partials_order>>(n_inputs);

    double val = std::sqrt(input.first_val());
    
    try {
      push_dual_numbers<AutodiffOrder, ValidateIO>(val);
    } catch (nomad_error) {
      throw nomad_output_value_error("sqrt");
    }
    
    push_inputs(input.dual_numbers());
    
    double d2 = 1.0 / input.first_val();
    
    try {
      if (AutodiffOrder >= 1) push_partials<ValidateIO>(val *= 0.5 * d2);
      if (AutodiffOrder >= 2) push_partials<ValidateIO>(val *= - 0.5 * d2);
      if (AutodiffOrder >= 3) push_partials<ValidateIO>(val *= - 1.5 * d2);
    } catch (nomad_error) {
      throw nomad_output_partial_error("sqrt");
    }

    return var<AutodiffOrder, StrictSmoothness, ValidateIO>(next_node_idx_ - 1);
    
  }
开发者ID:stan-dev,项目名称:nomad,代码行数:37,代码来源:sqrt.hpp


注:本文中的var::dual_numbers方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。