1. 项目背景与目标

在量化金融分析中,扎实的数学工具是建模和分析的基础。虽然Python生态已有NumPy、SciPy等成熟库,但深入理解这些工具背后的数学原理对量化分析师至关重要。本项目旨在让学习者通过构建自己的数学工具库,掌握量化分析中常用的数学操作原理。

通过本项目,学习者将:

2. 项目架构设计

2.1 模块划分

project1/
├── matrix.py       # 矩阵运算模块
├── calculus.py     # 微积分模块
└── statistics.py   # 统计分析模块

2.2 核心数据结构

Calculus类设计

学习者需要实现以下功能:

  1. 数值微分
  2. 数值积分
  3. 优化算法基础
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

Matrix类设计

学习者需要实现以下功能:

  1. 基本矩阵操作