计算机与代数 |
您所在的位置:网站首页 › 函数导数计算机 › 计算机与代数 |
0.简介 有了前一篇的计算图铺垫,这次我可以计算出函数导数的结果。
1.计算导数
一般来说,计算导数的时候,我们利用导数公式可以计算,根据前一篇最开始说的,如果程序中的方程或者函数直接计算,那么这个函数的导数也需要再重写一个才可以,但是利用计算图则可以不必针对某个方程专门计算的导数,而是利用计算图的特性来计算。例如 所以,利用最基本的导数运算规则,对每个结点做求导操作,最后得到的值就是导数,图会自动的根据构建方式来计算x=n时候的导数结果,导数实际对应的就是曲线一点的斜线斜率。 2.添加代码根据上一篇继续添加计算导数函数,在其中添加back函数来求导数数值结果。 class OpNode { public: virtual float forward() { return 0; } virtual float back() { return 0; } }; using Op = shared_ptr; class Variable : public OpNode { public: Variable() {} Variable(float n):v(n) {} float v; static shared_ptr make_var(float n) { return make_shared(Variable(n)); } float forward() { return v; } static void set_var(shared_ptr& a, float b){a->v = b;} float back() { return 1.0; } }; using Var = shared_ptr; class AddNode : public OpNode { public: AddNode(shared_ptr _a, shared_ptr _b) :a(_a), b(_b) {} shared_ptr a,b; float forward() { return a->forward() + b->forward(); } float back() { return a->back() + b->back(); } }; class MulNode : public OpNode { public: MulNode(shared_ptr _a, shared_ptr _b) :a(_a), b(_b) {} shared_ptr a, b; float forward() { return a->forward() * b->forward(); } float back() { return a->back() * b->forward() + a->forward() * b->back(); } }; class Constant : public OpNode { public: float v; Constant() {} Constant(float n) :v(n) {} float forward() { return v; } float back() { return 0; } static shared_ptr make_var(float n) { return make_shared(Constant(n)); } };你可能奇怪,为何计算个某点的导数要这么麻烦,完全可以利用 上一篇:计算函数数值结果 下一篇:函数导数表达式计算 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |