Blame docs/html/automatic_derivatives.html

Packit ea1746
Packit ea1746
Packit ea1746
Packit ea1746
Packit ea1746
 <html class="no-js" lang="en" > 
Packit ea1746
<head>
Packit ea1746
  <meta charset="utf-8">
Packit ea1746
  
Packit ea1746
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
Packit ea1746
  
Packit ea1746
  <title>Automatic Derivatives — Ceres Solver</title>
Packit ea1746
  
Packit ea1746
Packit ea1746
  
Packit ea1746
  
Packit ea1746
Packit ea1746
  
Packit ea1746
Packit ea1746
  
Packit ea1746
  
Packit ea1746
    
Packit ea1746
Packit ea1746
  
Packit ea1746
Packit ea1746
  
Packit ea1746
  
Packit ea1746
    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
Packit ea1746
  
Packit ea1746
Packit ea1746
  
Packit ea1746
Packit ea1746
  
Packit ea1746
    <link rel="top" title="Ceres Solver" href="index.html"/>
Packit ea1746
        <link rel="up" title="On Derivatives" href="derivatives.html"/>
Packit ea1746
        <link rel="next" title="Interfacing with Automatic Differentiation" href="interfacing_with_autodiff.html"/>
Packit ea1746
        <link rel="prev" title="Numeric derivatives" href="numerical_derivatives.html"/> 
Packit ea1746
Packit ea1746
  
Packit ea1746
  <script src="_static/js/modernizr.min.js"></script>
Packit ea1746
Packit ea1746
</head>
Packit ea1746
Packit ea1746
<body class="wy-body-for-nav" role="document">
Packit ea1746
Packit ea1746
  
Packit ea1746
Packit ea1746
    
Packit ea1746
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
Packit ea1746
      
Packit ea1746
        
Packit ea1746
          
Packit ea1746
Packit ea1746
          
Packit ea1746
             Ceres Solver
Packit ea1746
          
Packit ea1746
Packit ea1746
          
Packit ea1746
          
Packit ea1746
Packit ea1746
          
Packit ea1746
            
Packit ea1746
            
Packit ea1746
              
Packit ea1746
                1.13
Packit ea1746
              
Packit ea1746
            
Packit ea1746
          
Packit ea1746
Packit ea1746
          
Packit ea1746
Packit ea1746
  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
Packit ea1746
    <input type="text" name="q" placeholder="Search docs" />
Packit ea1746
    <input type="hidden" name="check_keywords" value="yes" />
Packit ea1746
    <input type="hidden" name="area" value="default" />
Packit ea1746
  </form>
Packit ea1746
Packit ea1746
Packit ea1746
          
Packit ea1746
        
Packit ea1746
Packit ea1746
        
Packit ea1746
          
Packit ea1746
            
Packit ea1746
            
Packit ea1746
                
    Packit ea1746
  • Why?
  • Packit ea1746
  • Installation
  • Packit ea1746
  • Tutorial
  • Packit ea1746
  • On Derivatives
    • Packit ea1746
    • Spivak Notation
    • Packit ea1746
    • Analytic Derivatives
    • Packit ea1746
    • Numeric derivatives
    • Packit ea1746
    • Automatic Derivatives
      • Packit ea1746
      • Dual Numbers & Jets
        • Packit ea1746
        • Implementing Jets
        • Packit ea1746
          Packit ea1746
          Packit ea1746
        • Pitfalls
        • Packit ea1746
          Packit ea1746
          Packit ea1746
        • Interfacing with Automatic Differentiation
        • Packit ea1746
          Packit ea1746
          Packit ea1746
        • Modeling Non-linear Least Squares
        • Packit ea1746
        • Solving Non-linear Least Squares
        • Packit ea1746
        • Covariance Estimation
        • Packit ea1746
        • General Unconstrained Minimization
        • Packit ea1746
        • FAQS, Tips & Tricks
        • Packit ea1746
        • Users
        • Packit ea1746
        • Contributing
        • Packit ea1746
        • Version History
        • Packit ea1746
        • Bibliography
        • Packit ea1746
        • License
        • Packit ea1746
          Packit ea1746
          Packit ea1746
                      
          Packit ea1746
                    
          Packit ea1746
                  
          Packit ea1746
                
          Packit ea1746
              </nav>
          Packit ea1746
          Packit ea1746
              <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
          Packit ea1746
          Packit ea1746
                
          Packit ea1746
                <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
          Packit ea1746
                  
          Packit ea1746
                  Ceres Solver
          Packit ea1746
                </nav>
          Packit ea1746
          Packit ea1746
          Packit ea1746
                
          Packit ea1746
                
          Packit ea1746
                  
          Packit ea1746
                    
          Packit ea1746
          Packit ea1746
           
          Packit ea1746
          Packit ea1746
          Packit ea1746
          Packit ea1746
          Packit ea1746
            
            Packit ea1746
                
          • Docs »
          • Packit ea1746
                  
            Packit ea1746
                      
          • On Derivatives »
          • Packit ea1746
                  
            Packit ea1746
                
          • Automatic Derivatives
          • Packit ea1746
                  
          • Packit ea1746
                    
            Packit ea1746
                      
            Packit ea1746
                    
            Packit ea1746
                  
            Packit ea1746
              
            Packit ea1746
              
            Packit ea1746
            Packit ea1746
                      
            Packit ea1746
                       
            Packit ea1746
                        
            Packit ea1746
              
            Packit ea1746

            Automatic DerivativesΒΆ

            Packit ea1746

            We will now consider automatic differentiation. It is a technique that

            Packit ea1746
            can compute exact derivatives, fast, while requiring about the same
            Packit ea1746
            effort from the user as is needed to use numerical differentiation.

            Packit ea1746

            Don’t believe me? Well here goes. The following code fragment

            Packit ea1746
            implements an automatically differentiated CostFunction for Rat43.

            Packit ea1746
            struct Rat43CostFunctor {
            Packit ea1746
              Rat43CostFunctor(const double x, const double y) : x_(x), y_(y) {}
            Packit ea1746
            Packit ea1746
              template <typename T>
            Packit ea1746
              bool operator()(const T* parameters, T* residuals) const {
            Packit ea1746
                const T b1 = parameters[0];
            Packit ea1746
                const T b2 = parameters[1];
            Packit ea1746
                const T b3 = parameters[2];
            Packit ea1746
                const T b4 = parameters[3];
            Packit ea1746
                residuals[0] = b1 * pow(1.0 + exp(b2 -  b3 * x_), -1.0 / b4) - y_;
            Packit ea1746
                return true;
            Packit ea1746
              }
            Packit ea1746
            Packit ea1746
              private:
            Packit ea1746
                const double x_;
            Packit ea1746
                const double y_;
            Packit ea1746
            };
            Packit ea1746
            Packit ea1746
            Packit ea1746
            CostFunction* cost_function =
            Packit ea1746
                  new AutoDiffCostFunction<Rat43CostFunctor, 1, 4>(
            Packit ea1746
                    new Rat43CostFunctor(x, y));