Blame docs/html/numerical_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>Numeric 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="Automatic Derivatives" href="automatic_derivatives.html"/>
Packit ea1746
        <link rel="prev" title="Analytic Derivatives" href="analytical_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
      • Forward Differences
        • Packit ea1746
        • Implementation Details
        • Packit ea1746
          Packit ea1746
          Packit ea1746
        • Central Differences
        • Packit ea1746
        • Ridders’ Method
        • Packit ea1746
        • Recommendations
        • Packit ea1746
          Packit ea1746
          Packit ea1746
        • Automatic Derivatives
        • 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
                
          • Numeric 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

            Numeric derivatives

            Packit ea1746

            The other extreme from using analytic derivatives is to use numeric

            Packit ea1746
            derivatives. The key observation here is that the process of
            Packit ea1746
            differentiating a function \(f(x)\) w.r.t \(x\) can be written
            Packit ea1746
            as the limiting process:

            Packit ea1746
            Packit ea1746
            \[Df(x) = \lim_{h \rightarrow 0} \frac{f(x + h) - f(x)}{h}\]
            Packit ea1746
            Packit ea1746

            Forward Differences

            Packit ea1746

            Now of course one cannot perform the limiting operation numerically on

            Packit ea1746
            a computer so we do the next best thing, which is to choose a small
            Packit ea1746
            value of \(h\) and approximate the derivative as

            Packit ea1746
            Packit ea1746
            \[Df(x) \approx \frac{f(x + h) - f(x)}{h}\]
            Packit ea1746

            The above formula is the simplest most basic form of numeric

            Packit ea1746
            differentiation. It is known as the Forward Difference formula.

            Packit ea1746

            So how would one go about constructing a numerically differentiated

            Packit ea1746
            version of Rat43Analytic (Rat43) in
            Packit ea1746
            Ceres Solver. This is done in two steps:

            Packit ea1746
            Packit ea1746
              Packit ea1746
            1. Define Functor that given the parameter values will evaluate the
            2. Packit ea1746
              residual for a given \((x,y)\).
              Packit ea1746
            3. Construct a CostFunction by using
            4. Packit ea1746
              NumericDiffCostFunction to wrap an instance of
              Packit ea1746
              Rat43CostFunctor.
              Packit ea1746
              Packit ea1746
              Packit ea1746
              struct Rat43CostFunctor {
              Packit ea1746
                Rat43CostFunctor(const double x, const double y) : x_(x), y_(y) {}
              Packit ea1746
              Packit ea1746
                bool operator()(const double* parameters, double* residuals) const {
              Packit ea1746
                  const double b1 = parameters[0];
              Packit ea1746
                  const double b2 = parameters[1];
              Packit ea1746
                  const double b3 = parameters[2];
              Packit ea1746
                  const double 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
                const double x_;
              Packit ea1746
                const double y_;
              Packit ea1746
              }
              Packit ea1746
              Packit ea1746
              CostFunction* cost_function =
              Packit ea1746
                new NumericDiffCostFunction<Rat43CostFunctor, FORWARD, 1, 4>(
              Packit ea1746
                  new Rat43CostFunctor(x, y));