Ceres Jet型

Jet型产生基本思想是引入一个额外的元素epsilon(e), e满足e != 0, e^2 = 0,即e为一个无穷小量,类似与复数,扩展了实数的范围.一般表达式为x + y*e.Jet型能方便的计算导数.

例如:

f\left ( x\right ) = x^{2}

在x = 10处的导数为20.

我们引入无穷小量e,原式为

f\left ( 10 + e \right ) = (10+e)^{2} = 100 + 20e+e^{2} = 100 + 20e

其中20为x=10处导数值.

对于多参数的函数求导,例如

f\left ( x, y\right ) = x^{2}+xy

计算f(1,3)处导数时,分别用不同的无穷小量进行导数计算.

df/dx:

f\left ( 1+e, 3 \right )=(1+e)^{2} + (1+e)*3=4+5e

\frac{df}{dx}=5

df/dy:

f\left ( 1, 3+e \right )=1 + (3+e)*1=4+e

\frac{df}{dy}=1

采用dual number(Jet)计算函数f的梯度

   template<typename T>
   T f(const T &x, const T &y) {
     return x * x + x * y;
   }

   // The "2" means there should be 2 dual number components.
   // It computes the partial derivative at x=10, y=20.
   Jet<double, 2> x(10, 0);  // Pick the 0th dual number for x.
   Jet<double, 2> y(20, 1);  // Pick the 1st dual number for y.
   Jet<double, 2> z = f(x, y);

   LOG(INFO) << "df/dx = " << z.v[0]
             << "df/dy = " << z.v[1];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值