Skip to content

mbcp.mp_math.function

説明: AAA

def cal_gradient_3vf(func: ThreeSingleVarsFunc, p: Point3, epsilon: float = EPSILON) -> Vector3

説明: 计算三元函数在某点的梯度向量。

TIP

已知一个函数f(x,y,z),则其在点(x0,y0,z0)处的梯度向量为: f(x0,y0,z0)=(fx,fy,fz)

變數説明:

  • func: 三元函数
  • p: 点
  • epsilon: 偏移量

返回: 梯度

源碼於GitHub上查看
python
def cal_gradient_3vf(func: ThreeSingleVarsFunc, p: Point3, epsilon: float=EPSILON) -> Vector3:
    """
    计算三元函数在某点的梯度向量。
    > [!tip]
    > 已知一个函数$f(x, y, z)$,则其在点$(x_0, y_0, z_0)$处的梯度向量为:
    $\\nabla f(x_0, y_0, z_0) = \\left(\\frac{\\partial f}{\\partial x}, \\frac{\\partial f}{\\partial y}, \\frac{\\partial f}{\\partial z}\\right)$
    Args:
        func: 三元函数
        p: 点
        epsilon: 偏移量
    Returns:
        梯度
    """
    dx = (func(p.x + epsilon, p.y, p.z) - func(p.x - epsilon, p.y, p.z)) / (2 * epsilon)
    dy = (func(p.x, p.y + epsilon, p.z) - func(p.x, p.y - epsilon, p.z)) / (2 * epsilon)
    dz = (func(p.x, p.y, p.z + epsilon) - func(p.x, p.y, p.z - epsilon)) / (2 * epsilon)
    return Vector3(dx, dy, dz)

def curry(func: MultiVarsFunc, *args: Var) -> OneVarFunc

説明: 对多参数函数进行柯里化。

TIP

有关函数柯里化,可参考函数式编程--柯理化(Currying)

變數説明:

  • func: 函数
  • *args: 参数

返回: 柯里化后的函数

範例:

python
def add(a: int, b: int, c: int) -> int:
    return a + b + c
add_curried = curry(add, 1, 2)
add_curried(3)  # 6
源碼於GitHub上查看
python
def curry(func: MultiVarsFunc, *args: Var) -> OneVarFunc:
    """
    对多参数函数进行柯里化。
    > [!tip]
    > 有关函数柯里化,可参考[函数式编程--柯理化(Currying)](https://zhuanlan.zhihu.com/p/355859667)
    Args:
        func: 函数
        *args: 参数
    Returns:
        柯里化后的函数
    Examples:
        ```python
        def add(a: int, b: int, c: int) -> int:
            return a + b + c
        add_curried = curry(add, 1, 2)
        add_curried(3)  # 6
        ```
    """

    def curried_func(*args2: Var) -> Var:
        """@litedoc-hide"""
        return func(*args, *args2)
    return curried_func

文檔由 VitePress 構建 | API引用由 litedoc 生成