Skip to content

# 模組 `mbcp.mp_math.equation` ​

本模块定义了方程相关的类和函数以及一些常用的数学函数

### class `CurveEquation` ​

#### method `__init__(self, x_func: OneVarFunc, y_func: OneVarFunc, z_func: OneVarFunc)` ​

説明: 曲线方程。

變數説明:

> - x_func (`OneVarFunc`): x函数
> - y_func (`OneVarFunc`): y函数
> - z_func (`OneVarFunc`): z函数

源碼 或 於GitHub上查看
python

    def __init__(self, x_func: OneVarFunc, y_func: OneVarFunc, z_func: OneVarFunc):
        self.x_func = x_func
        self.y_func = y_func
        self.z_func = z_func

#### method `self () *t: Var => Point3 | tuple[Point3, ...]` ​

説明: 计算曲线上的点。

變數説明:

> - *t:
> - 参数:

返回: 目标点

源碼 或 於GitHub上查看
python

    def __call__(self, *t: Var) -> Point3 | tuple[Point3, ...]:
        if len(t) == 1:
            return Point3(self.x_func(t[0]), self.y_func(t[0]), self.z_func(t[0]))
        else:
            return tuple([Point3(x, y, z) for x, y, z in zip(self.x_func(t), self.y_func(t), self.z_func(t))])

### func `get_partial_derivative_func(func: MultiVarsFunc, var: int | tuple[int, ...], epsilon: Number = EPSILON) -> MultiVarsFunc` ​

説明: 求N元函数一阶偏导函数。这玩意不太稳定，慎用。

WARNING

目前数学界对于一个函数的导函数并没有通解的说法，因此该函数的稳定性有待提升

變數説明:

> - func (`MultiVarsFunc`): N元函数
> - var: 变量位置，可为整数(一阶偏导)或整数元组(高阶偏导)
> - epsilon: 偏移量

返回: 偏导函数

抛出:

> - ValueError 无效变量类型

源碼 或 於GitHub上查看
python

    def get_partial_derivative_func(func: MultiVarsFunc, var: int | tuple[int, ...], epsilon: Number=EPSILON) -> MultiVarsFunc:
        if isinstance(var, int):

            def partial_derivative_func(*args: Var) -> Var:
                args_list_plus = list(args)
                args_list_plus[var] += epsilon
                args_list_minus = list(args)
                args_list_minus[var] -= epsilon
                return (func(*args_list_plus) - func(*args_list_minus)) / (2 * epsilon)
            return partial_derivative_func
        elif isinstance(var, tuple):

            def high_order_partial_derivative_func(*args: Var) -> Var:
                result_func = func
                for v in var:
                    result_func = get_partial_derivative_func(result_func, v, epsilon)
                return result_func(*args)
            return high_order_partial_derivative_func
        else:
            raise ValueError('Invalid var type')