在量化金融分析中,扎实的数学工具是建模和分析的基础。虽然Python生态已有NumPy、SciPy等成熟库,但深入理解这些工具背后的数学原理对量化分析师至关重要。本项目旨在让学习者通过构建自己的数学工具库,掌握量化分析中常用的数学操作原理。
通过本项目,学习者将:
project1/
├── matrix.py # 矩阵运算模块
├── calculus.py # 微积分模块
└── statistics.py # 统计分析模块
学习者需要实现以下功能:
class Calculus:
"""
数值计算工具类,提供微分、积分和优化方法的实现
"""
@staticmethod
def forward_difference(func, x, h=1e-5):
"""
使用前向差分法计算函数在给定点的一阶导数
Parameters:
-----------
func : callable
要计算导数的函数
x : float
计算导数的点
h : float, optional
步长,默认为1e-5
Returns:
--------
float
函数在x点的一阶导数近似值
"""
# TODO: 实现前向差分法计算一阶导数
pass
@staticmethod
def backward_difference(func, x, h=1e-5):
"""
使用后向差分法计算函数在给定点的一阶导数
Parameters:
-----------
func : callable
要计算导数的函数
x : float
计算导数的点
h : float, optional
步长,默认为1e-5
Returns:
--------
float
函数在x点的一阶导数近似值
"""
# TODO: 实现后向差分法计算一阶导数
pass
@staticmethod
def central_difference(func, x, h=1e-5):
"""
使用中心差分法计算函数在给定点的一阶导数
Parameters:
-----------
func : callable
要计算导数的函数
x : float
计算导数的点
h : float, optional
步长,默认为1e-5
Returns:
--------
float
函数在x点的一阶导数近似值
"""
# TODO: 实现中心差分法计算一阶导数
pass
@staticmethod
def second_derivative(func, x, h=1e-5, method='central'):
"""
计算函数在给定点的二阶导数
Parameters:
-----------
func : callable
要计算导数的函数
x : float
计算导数的点
h : float, optional
步长,默认为1e-5
method : str, optional
差分方法,可选'forward', 'backward', 'central',默认为'central'
Returns:
--------
float
函数在x点的二阶导数近似值
"""
# TODO: 实现二阶导数计算
pass
@staticmethod
def partial_derivative(func, point, variable_index, h=1e-5, method='central'):
"""
计算多变量函数在给定点的偏导数
Parameters:
-----------
func : callable
多变量函数,接受向量输入
point : list or numpy.ndarray
计算偏导数的点,如[x, y, z]
variable_index : int
对哪个变量求偏导数(0表示第一个变量)
h : float, optional
步长,默认为1e-5
method : str, optional
差分方法,可选'forward', 'backward', 'central',默认为'central'
Returns:
--------
float
函数在给定点关于指定变量的偏导数
"""
# TODO: 实现偏导数计算
pass
@staticmethod
def gradient(func, point, h=1e-5):
"""
计算多变量函数在给定点的梯度向量
Parameters:
-----------
func : callable
多变量函数,接受向量输入
point : list or numpy.ndarray
计算梯度的点,如[x, y, z]
h : float, optional
步长,默认为1e-5
Returns:
--------
numpy.ndarray
函数在给定点的梯度向量
"""
# TODO: 实现梯度计算
pass
@staticmethod
def trapezoidal_rule(func, a, b, n=100):
"""
使用复合梯形法则计算函数在区间[a,b]上的定积分
Parameters:
-----------
func : callable
要积分的函数
a : float
积分下限
b : float
积分上限
n : int, optional
区间划分数量,默认为100
Returns:
--------
float
定积分的近似值
"""
# TODO: 实现复合梯形法则
pass
@staticmethod
def simpson_rule(func, a, b, n=100):
"""
使用辛普森法则计算函数在区间[a,b]上的定积分
Parameters:
-----------
func : callable
要积分的函数
a : float
积分下限
b : float
积分上限
n : int, optional
区间划分数量,默认为100(必须为偶数)
Returns:
--------
float
定积分的近似值
"""
# TODO: 实现辛普森法则
pass
@staticmethod
def adaptive_quadrature(func, a, b, tol=1e-6, max_recursion=20):
"""
使用自适应积分算法计算函数在区间[a,b]上的定积分
Parameters:
-----------
func : callable
要积分的函数
a : float
积分下限
b : float
积分上限
tol : float, optional
容差,默认为1e-6
max_recursion : int, optional
最大递归深度,默认为20
Returns:
--------
float
定积分的近似值
"""
# TODO: 实现自适应积分算法(可选)
pass
@staticmethod
def double_integral(func, x_range, y_range, nx=20, ny=20):
"""
计算二重积分
Parameters:
-----------
func : callable
二元函数 f(x, y)
x_range : tuple
x的积分范围 (x_min, x_max)
y_range : tuple
y的积分范围 (y_min, y_max)
nx : int, optional
x方向的划分数量,默认为20
ny : int, optional
y方向的划分数量,默认为20
Returns:
--------
float
二重积分的近似值
"""
# TODO: 实现二重积分(可选)
pass
@staticmethod
def gradient_descent(func, grad_func, initial_point, learning_rate=0.01, max_iterations=1000, tol=1e-6):
"""
使用梯度下降法寻找函数的局部最小值
Parameters:
-----------
func : callable
目标函数
grad_func : callable
目标函数的梯度函数
initial_point : list or numpy.ndarray
初始点
learning_rate : float, optional
学习率,默认为0.01
max_iterations : int, optional
最大迭代次数,默认为1000
tol : float, optional
收敛容差,默认为1e-6
Returns:
--------
tuple
(最优点, 最优值, 迭代次数)
"""
# TODO: 实现梯度下降法
pass
@staticmethod
def newton_method(func, grad_func, hessian_func, initial_point, max_iterations=100, tol=1e-6):
"""
使用牛顿法寻找函数的局部最小值
Parameters:
-----------
func : callable
目标函数
grad_func : callable
目标函数的梯度函数
hessian_func : callable
目标函数的海森矩阵
initial_point : list or numpy.ndarray
初始点
max_iterations : int, optional
最大迭代次数,默认为100
tol : float, optional
收敛容差,默认为1e-6
Returns:
--------
tuple
(最优点, 最优值, 迭代次数)
"""
# TODO: 实现牛顿法(可选)
pass
学习者需要实现以下功能: