《quantitative finance with cpp》阅读笔记13---使用差值微分法求任意函数在某点处的导数
作者:yunjinqi   类别:    日期:2023-12-27 15:00:40    阅读:133 次   消耗积分:0 分    

Write a function differentiateNumerically that can differentiate  any RealFunction.

理解题目要求之后,写代码就相对比较容易了。代码地址:对比视图(522d1b37a228b768cff1026c8616a159b4af0809...0ffb34a558d47180b8f246c3e4b96bec491d3b27) · 云金杞/learn_cpp_series - Gitee.com


double differentiateNumerically(RealFunction& f, double x) {
    double h = x / 10000000;
    double ValueOfXMinusH = f.evaluate(x - h);
    double ValueOfXPlusH = f.evaluate(x + h);
    double r = (ValueOfXPlusH - ValueOfXMinusH) / (2 * h);
    return r;
}

用幻方的大模型生成对这个题目的理解:DeepSeek 

这句话的意思是,需要编写一个函数 differentiateNumerically,该函数可以对任何 RealFunction 进行数值微分。

具体来说,RealFunction 是一个抽象类,它定义了一个 evaluate 方法,用于计算函数在某个点处的值。而 differentiateNumerically 函数需要接受一个 RealFunction 对象作为参数,并返回一个 RealFunction 对象,该对象表示原函数在某个点处的导数。

为了实现这个功能,differentiateNumerically 函数可以使用数值微分的方法,例如中心差分法或前向差分法,来计算原函数在某个点处的导数。具体来说,中心差分法和前向差分法都是通过计算函数在两个相邻点处的值的差值,来近似计算函数在某个点处的导数。


数值微分的方法有很多种,其中中心差分法和前向差分法是比较常用的两种方法。下面分别介绍这两种方法的详细步骤:

  1. 中心差分法

中心差分法是一种常用的数值微分方法,它通过计算函数在两个相邻点处的值的差值,来近似计算函数在某个点处的导数。具体步骤如下:

(1)选择一个点 x,以及一个步长 h

(2)计算函数在点 x 和点 x+h 处的值,分别记为 f(x) 和 f(x+h)

(3)计算函数在点 x-h 和点 x+h 处的值,分别记为 f(x-h) 和 f(x+h)

(4)计算函数在点 x 处的导数的近似值,公式为:

f'(x) ≈ (f(x+h) - f(x-h)) / (2*h)

  1. 前向差分法

前向差分法也是一种常用的数值微分方法,它通过计算函数在两个相邻点处的值的差值,来近似计算函数在某个点处的导数。具体步骤如下:

(1)选择一个点 x,以及一个步长 h

(2)计算函数在点 x 和点 x+h 处的值,分别记为 f(x) 和 f(x+h)

(3)计算函数在点 x 处的导数的近似值,公式为:

f'(x) ≈ (f(x+h) - f(x)) / h

需要注意的是,中心差分法和前向差分法都是近似计算函数在某个点处的导数,因此它们的计算结果可能存在误差。在实际应用中,需要根据具体情况选择合适的方法,并进行误差分析和控制。

版权所有,转载本站文章请注明出处:云子量化, http://www.woniunote.com/article/378
上一篇:《quantitative finance with cpp》阅读笔记12---正态分布累积分布函数的两种计算方法并对比结果
下一篇:《quantitative finance with cpp》阅读笔记14---写一个Cipher接口,实现两个加密和解密算法