首页 函数目录 函数说明

    Y = abs(X) 返回输入 X 中每个元素的绝对值.

    如果 X 是复数,则 abs(X) 返回复数的模.

    X是标量,向量,数组,矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def abs_complex_modulus(input_str):
        """
        计算输入表达式的绝对值或复数的模。

        参数:
        input_str: 输入的字符串,可以是矩阵、复数、数字或符号表达式。

        返回:
        如果输入是矩阵,则返回每个元素的绝对值或模;
        如果输入是数字或符号表达式,则返回其绝对值或模;
        如果输入无法解析,则返回错误信息。
        """
        try:
            # 将输入字符串解析为 SymPy 表达式
            expr = sp.sympify(input_str)

            # 判断是否为矩阵
            if (sp_matrix := is_matrix(expr)) is not None:
                # 如果是矩阵,对每个元素应用绝对值函数
                result = sp_matrix.applyfunc(sp.Abs)
            elif expr.is_number or expr.free_symbols:
                # 如果是数字或符号表达式,直接计算绝对值
                result = sp.Abs(expr)
            else:
                return f"输入错误: {input_str}"

            return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 abs_complex_modulus 函数的使用。
        """
        # 示例 1: 输入为复数
        input_str1 = "3 + 4*I"
        result1 = abs_complex_modulus(input_str1)
        print(f"输入: {input_str1}\n结果: {result1}\n")

        # 示例 2: 输入为矩阵
        input_str2 = "[[1, -2], [3, -4]]"
        result2 = abs_complex_modulus(input_str2)
        print(f"输入: {input_str2}\n结果: {result2}\n")

        # 示例 3: 输入为符号表达式
        input_str3 = "x**2 + y**2"
        result3 = abs_complex_modulus(input_str3)
        print(f"输入: {input_str3}\n结果: {result3}\n")

        # 示例 4: 输入错误的情况
        input_str4 = "invalid_input"
        result4 = abs_complex_modulus(input_str4)
        print(f"输入: {input_str4}\n结果: {result4}\n")

    if __name__ == "__main__":
        main()
    
    
    通过将向量的元素累积到其下标定义的位置来创建数组.

    A =accumarray(data, ind).

    B = accumarray(ind,data) 根据ind中指定的组,通过对向量data的元素进行累加来对组数据求和.然后计算每组的总和.ind 中的值定义数据所属的组以及存储每个组总和的输出数组B的索引.

    要按顺序返回组总和,请将ind指定为向量。然后,对于索引为i的组,accumarray返回其在 B(i) 中的总和.例如,如果data = [1 2 3 4], ind=[1 1 2 2]则 B = accumarray(data,ind) 返回列向量B = [0 3 7].

    要以另一种形状返回组总和,请将 ind 指定为矩阵。对于 m×n 矩阵 ind,其中每一行的值表示指定的组和输出B的n维索引. 例如,如果ind包含[3 4]形式的两行,则data 中对应元素的总和存储在B 的 (3,4) 元素中.

    B 中未在 ind 中显示其索引的元素默认用 0 填充.
    
    import numpy as np
    import ast
    from itertools import product

    def accumulating_array(input_str, func=None, size=None, fill_value=0, dtype=None):
        """
        一个类似于 Matlab 的 `accumarray` 函数的累加函数。

        参数
        ----------
        input_str : str
            输入字符串,包含输入数组和累加映射。
        func : callable or None
            累加函数。该函数将接收一个值列表进行累加。
            如果为 None,默认使用 `numpy.sum`。
        size : ndarray or None
            输出数组的大小。如果为 None,则根据 `accmap` 确定大小。
        fill_value : scalar
            输出数组元素的默认值。
        dtype : numpy 数据类型 or None
            输出数组的数据类型。如果为 None,则使用输入数组的数据类型。

        返回
        -------
        out : ndarray
            累加结果。

        示例
        --------
        见 `main` 函数中的示例代码。
        """
        try:
            # 解析输入字符串为 Python 对象
            expr = ast.literal_eval(input_str)
            a = np.array(expr[0])  # 输入数组
            accmap = np.array(expr[1])  # 累加映射

            # 检查参数是否合法并处理默认值
            if accmap.shape[:a.ndim] != a.shape:
                raise ValueError("accmap 的前几个维度必须与 a 的形状相同")
            if func is None:
                func = np.sum  # 默认累加函数为求和
            if dtype is None:
                dtype = a.dtype  # 默认数据类型与输入数组相同
            if accmap.shape == a.shape:
                accmap = np.expand_dims(accmap, -1)  # 如果 accmap 是二维的,扩展为三维

            # 确定输出数组的大小
            adims = tuple(range(a.ndim))
            if size is None:
                size = 1 + np.squeeze(np.apply_over_axes(np.max, accmap, axes=adims))
            size = np.atleast_1d(size)

            # 创建一个存储值的 Python 列表数组
            vals = np.empty(size, dtype='O')
            for s in product(*[range(k) for k in size]):
                vals[s] = []
            for s in product(*[range(k) for k in a.shape]):
                indx = tuple(accmap[s])  # 获取累加映射的索引
                val = a[s]  # 获取输入数组的值
                vals[indx].append(val)  # 将值添加到对应的列表中

            # 创建输出数组
            out = np.empty(size, dtype=dtype)
            for s in product(*[range(k) for k in size]):
                if vals[s] == []:
                    out[s] = fill_value  # 如果列表为空,使用填充值
                else:
                    out[s] = func(vals[s])  # 否则应用累加函数

            return list(out)  # 返回结果列表
        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 `accumulating_array` 函数的使用。
        """
        # 示例 1: 对角元素求和
        input_str1 = "[[[1, 2, 3], [4, -1, 6], [-1, 8, 9]], [[0, 1, 2], [2, 0, 1], [1, 2, 0]]]"
        result1 = accumulating_array(input_str1)
        print(f"示例 1 输入: {input_str1}\n结果: {result1}\n")

        # 示例 2: 使用乘积累加
        input_str2 = "[[[1, 2, 3], [4, -1, 6], [-1, 8, 9]], [[[0, 0], [0, 0], [0, 1]], [[0, 0], [0, 0], [0, 1]], [[1, 0], [1, 0], [1, 1]]]]"
        result2 = accumulating_array(input_str2, func=np.prod, dtype=float)
        print(f"示例 2 输入: {input_str2}\n结果: {result2}\n")

        # 示例 3: 返回值的列表
        input_str3 = "[[[1, 2, 3], [4, -1, 6], [-1, 8, 9]], [[[0, 0], [0, 0], [0, 1]], [[0, 0], [0, 0], [0, 1]], [[1, 0], [1, 0], [1, 1]]]]"
        result3 = accumulating_array(input_str3, func=lambda x: x, dtype='O')
        print(f"示例 3 输入: {input_str3}\n结果: {result3}\n")

        # 示例 4: 错误输入
        input_str4 = "invalid_input"
        result4 = accumulating_array(input_str4)
        print(f"示例 4 输入: {input_str4}\n结果: {result4}\n")

    if __name__ == "__main__":
        main()
    
    
    通过将数组的切片累积到其下标沿指定维度定义的位置来创建数组.

    A =accumdim(subs, vals, dim)

    下标由索引向量subs定义.尺寸由dim指定.如果未给出,则默认为第一个非单一维度.

    将subs矩阵中的行向量,按vals下标分组,每组中的向量对应列求和,得到新的一个向量.
    
    import ast
    import numpy as np
    import sympy as sp


    def accumulating_dim(input_str):
        """
        该函数接受一个字符串形式的输入,将其解析为一个表达式,然后根据表达式中的值和索引进行累加操作,
        最后返回一个Sympy矩阵。

        参数:
        input_str (str): 一个字符串,表示一个包含值和索引的列表或元组。

        返回:
        sp.Matrix: 累加后的Sympy矩阵。
        """
        try:
            # 使用ast.literal_eval安全地解析输入字符串为Python表达式
            expr = ast.literal_eval(input_str)

            # 将表达式中的值和索引转换为NumPy数组
            values = np.array(expr[0])
            indices = np.array(expr[1])

            # 获取结果数组的形状,行数为索引的最大值加1,列数与values的列数相同
            result_shape = (indices.max() + 1, values.shape[1])

            # 初始化结果数组,使用与values相同的数据类型,并填充0
            result = np.zeros(result_shape, dtype=values.dtype)

            # 使用np.add.at函数将values累加到result的指定位置
            np.add.at(result, (indices, slice(None)), values)

            # 将结果数组转换为Sympy矩阵
            s_matrix = sp.Matrix(result)

            return s_matrix
        except Exception as e:
            # 如果发生任何异常,返回错误信息
            return f"错误: {e}"


    def main():
        """
        主函数,用于演示accumulating_dim函数的使用。
        """
        # 示例输入:一个字符串,表示一个包含值和索引的列表
        input_str = "([[1, 2], [3, 4], [5, 6]], [0, 1, 0])"

        # 调用accumulating_dim函数
        result = accumulating_dim(input_str)

        # 打印结果
        print("输入字符串:", input_str)
        print("累加后的Sympy矩阵:")
        print(result)


    if __name__ == "__main__":
        # 如果直接运行该脚本,则执行main函数
        main()
    
    
    计算x的每个元素的反余弦(以弧度为单位),返回X各元素的反余弦(cos^-1).该函数同时接受实数和复数输入.

    Y=acos(X)

    对于X在区间[-1, 1]内的实数值,acos(X)返回区间[0, π]内的值.

    对于X在区间[-1,1]之外的实数值以及X的复数值,acos(X)返回复数值.

    X是标量,向量,数组,矩阵.
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None


    def acos_inverse_cosine(input_str):
        """
        计算输入表达式的反余弦值。

        参数:
        input_str: 输入的字符串表达式。

        返回:
        如果输入是矩阵,则返回矩阵中每个元素的反余弦值;
        如果输入是数值或符号表达式,则返回其反余弦值;
        如果输入无效,则返回错误信息。
        """
        try:
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,计算矩阵中每个元素的反余弦值
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.acos).evalf()
            # 如果输入是数值或符号表达式,计算其反余弦值
            elif expr.is_number or expr.free_symbols:
                result = sp.acos(expr).evalf()
            else:
                error = True

            # 根据是否有错误返回相应的结果
            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于示范 acos_inverse_cosine 函数的使用。
        """
        # 示范输入为数值
        input_str1 = "0.5"
        result1 = acos_inverse_cosine(input_str1)
        print(f"输入: {input_str1}, 结果: {result1}")

        # 示范输入为符号表达式
        input_str2 = "x"
        result2 = acos_inverse_cosine(input_str2)
        print(f"输入: {input_str2}, 结果: {result2}")

        # 示范输入为矩阵
        input_str3 = "[[1, 0], [0, 1]]"
        result3 = acos_inverse_cosine(input_str3)
        print(f"输入: {input_str3}, 结果: {result3}")

        # 示范输入为无效表达式
        input_str4 = "(1, 2)"
        result4 = acos_inverse_cosine(input_str4)
        print(f"输入: {input_str4}, 结果: {result4}")

    if __name__ == "__main__":
        main()
    
    
    返回X的元素的反余弦(cos^-1)(以度为单位),该函数同时接受实数和复数输入.

    Y=acosd(X)

    对于X在区间[-1, 1]内的实数值,acos(X)返回区间[0, 180]内的值.

    对于X在区间[-1,1]之外的实数值以及X的复数值,acos(X)返回复数值.

    X是标量,向量,数组,矩阵.
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def acosd_inverse_cosine(input_str):
        """
        计算输入表达式的反余弦值,并将结果转换为度数。

        参数:
        input_str: 输入的字符串表达式,可以是数字、符号或矩阵。

        返回:
        如果输入有效,则返回计算结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            def evaluate_acosd_function(z):
                """
                计算单个元素的反余弦值,并将结果转换为度数。

                参数:
                z: SymPy 表达式或数字。

                返回:
                如果 z 是数字,则返回其反余弦值的度数;如果 z 包含符号,则返回符号表达式。
                """
                if z.is_number:
                    return sp.deg(sp.acos(z)).evalf()
                elif z.free_symbols:
                    return sp.deg(sp.acos(z))
                else:
                    return None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对矩阵中的每个元素应用反余弦函数
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(lambda x: evaluate_acosd_function(x))
            # 如果输入是数字或包含符号,直接计算反余弦值
            elif expr.is_number or expr.free_symbols:
                result = evaluate_acosd_function(expr)
            else:
                error = True

            # 如果发生错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 acosd_inverse_cosine 函数的使用。
        """
        # 示范代码
        input_examples = [
            "0.5",  # 数字输入
            "x",    # 符号输入
            "[[1, 0], [0, 1]]",  # 矩阵输入
            "acosd(0.5)",  # 直接调用反余弦函数
            "(1, 2, 3)"  # 错误输入(元组)
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = acosd_inverse_cosine(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    反双曲余弦

    Y = acosh(X) 返回X的元素的反双曲余弦.该函数同时接受实数和复数输入.所有的角度都以弧度表示.

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def acosh_inverse_hyperbolic_cosine(input_str):
        """
        计算输入表达式的反双曲余弦值(acosh),并返回结果。

        参数:
        input_str: 输入的字符串表达式,可以是数字、符号或矩阵。

        返回:
        如果输入有效,则返回计算结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对矩阵中的每个元素应用反双曲余弦函数
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.acosh).evalf()
            # 如果输入是数字或包含符号,直接计算反双曲余弦值
            elif expr.is_number or expr.free_symbols:
                result = sp.acosh(expr).evalf()
            else:
                error = True

            # 如果发生错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 acosh_inverse_hyperbolic_cosine 函数的使用。
        """
        # 示范代码
        input_examples = [
            "2",  # 数字输入
            "x",  # 符号输入
            "[[1, 2], [3, 4]]",  # 矩阵输入
            "(1, 2, 3)",  # 错误输入(元组)
            "1.5",  # 浮点数输入
            "y + 1"  # 符号表达式输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = acosh_inverse_hyperbolic_cosine(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    反余切(以弧度为单位)

    Y = acot(X) 以弧度为单位返回X各元素的反余切(cot^-1).该函数同时接受实数和复数输入.

    对于 X 的实数值,acot(X) 返回区间[-π/2, π/2]中的值

    对于 X 的复数值,acot(X) 返回复数值

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def acot_inverse_cotangent(input_str):
        """
        计算输入表达式的反余切值(acot),并返回结果。

        参数:
        input_str: 输入的字符串表达式,可以是数字、符号或矩阵。

        返回:
        如果输入有效,则返回计算结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对矩阵中的每个元素应用反余切函数
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.acot).evalf()
            # 如果输入是数字或包含符号,直接计算反余切值
            elif expr.is_number or expr.free_symbols:
                result = sp.acot(expr).evalf()
            else:
                error = True

            # 如果发生错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 acot_inverse_cotangent 函数的使用。
        """
        # 示范代码
        input_examples = [
            "1",  # 数字输入
            "x",  # 符号输入
            "[[1, 2], [3, 4]]",  # 矩阵输入
            "(1, 2, 3)",  # 错误输入(元组)
            "0.5",  # 浮点数输入
            "y + 1"  # 符号表达式输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = acot_inverse_cotangent(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    反余切(以度为单位)

    Y = acotd(X) 返回X的元素的反余切(cot^-1)(以度为单位)。该函数同时接受实数和复数输入.

    对于 X 的实数值,acotd(X) 返回范围 [-90, 90] 中的值.

    对于 X 的复数值,acotd(X) 返回复数值.

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def acot_degree_inverse_cotangent(input_str):
        """
        计算输入表达式的反余切值(acot),并将结果转换为度数。

        参数:
        input_str: 输入的字符串表达式,可以是数字、符号或矩阵。

        返回:
        如果输入有效,则返回计算结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            def evaluate_acotd_function(z):
                """
                计算单个元素的反余切值,并将结果转换为度数。

                参数:
                z: SymPy 表达式或数字。

                返回:
                如果 z 是数字,则返回其反余切值的度数;如果 z 包含符号,则返回符号表达式。
                """
                if z.is_number:
                    return sp.deg(sp.acot(z)).evalf()
                elif z.free_symbols:
                    return sp.deg(sp.acot(z))
                else:
                    return None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对矩阵中的每个元素应用反余切函数
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(lambda x: evaluate_acotd_function(x))
            # 如果输入是数字或包含符号,直接计算反余切值
            elif expr.is_number or expr.free_symbols:
                result = evaluate_acotd_function(expr)
            else:
                error = True

            # 如果发生错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 acot_degree_inverse_cotangent 函数的使用。
        """
        # 示范代码
        input_examples = [
            "1",  # 数字输入
            "x",  # 符号输入
            "[[1, 2], [3, 4]]",  # 矩阵输入
            "(1, 2, 3)",  # 错误输入(元组)
            "0.5",  # 浮点数输入
            "y + 1"  # 符号表达式输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = acot_degree_inverse_cotangent(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    反双曲余切

    Y = acoth(X) 返回X各元素的反双曲余切.该函数同时接受实数和复数输入.所有的角度都以弧度表示.

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def acot_hyperbolic_inverse_cotangent(input_str):
        """
        计算输入表达式的反双曲余切值。

        参数:
        input_str: 输入的字符串表达式,可以是数字、符号、矩阵等。

        返回:
        如果输入有效,则返回计算结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果表达式是元组,说明输入格式错误
            if isinstance(expr, tuple):
                error = True
            # 如果表达式是矩阵,则对矩阵中的每个元素计算反双曲余切
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.acoth).evalf()
            # 如果表达式是数字或包含自由符号,则直接计算反双曲余切
            elif expr.is_number or expr.free_symbols:
                result = sp.acoth(expr).evalf()
            else:
                error = True

            # 如果出现错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result
        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 acot_hyperbolic_inverse_cotangent 函数的使用。
        """
        # 示范代码
        input_examples = [
            "2",  # 数字
            "x",  # 符号
            "[[1, 2], [3, 4]]",  # 矩阵
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = acot_hyperbolic_inverse_cotangent(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    反余割(以弧度为单位)

    Y = acsc(X) 以弧度为单位返回X各元素的 反余割(csc^-1).该函数同时接受实数和复数输入

    对于 X 在区间 [-∞, -1] 和 [1, ∞]中的实数值,acsc(X)返回区间[-π/2, π/2]中的实数值

    对于 X 在区间 (-1, 1) 内的实数值以及 X 的复数值,acsc(X) 返回复数值

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def acsc_inverse_cosecant(input_str):
        """
        计算输入表达式的反余割值。

        参数:
        input_str: 输入的字符串表达式,可以是数字、符号、矩阵等。

        返回:
        如果输入有效,则返回计算结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果表达式是元组,说明输入格式错误
            if isinstance(expr, tuple):
                error = True
            # 如果表达式是矩阵,则对矩阵中的每个元素计算反余割
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.acsc).evalf()
            # 如果表达式是数字或包含自由符号,则直接计算反余割
            elif expr.is_number or expr.free_symbols:
                result = sp.acsc(expr).evalf()
            else:
                error = True

            # 如果出现错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result
        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 acsc_inverse_cosecant 函数的使用。
        """
        # 示范代码
        input_examples = [
            "2",  # 数字
            "x",  # 符号
            "[[1, 2], [3, 4]]",  # 矩阵
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = acsc_inverse_cosecant(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    acscd 反余割(以度为单位)

    Y = acscd(X) 返回 X 的元素的反余割 (cosec^-1)(以度为单位).该函数同时接受实数和复数输入

    对于 X 在区间 [-∞, -1] 和 [1, ∞] 中的实数值,acscd(X) 返回范围 [-90, 90] 中的值.

    对于 X 在区间 (-1, 1) 内的实数值以及 X 的复数值,acscd(X) 返回复数值.

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def evaluate_acscd_function(z):
        """
        计算输入的反余割值(以度为单位)。

        参数:
        z: 输入的表达式,可以是数字、符号等。

        返回:
        如果输入是数字,则返回反余割值的浮点数结果;
        如果输入包含符号,则返回符号表达式;
        否则返回 None。
        """
        if z.is_number:
            return sp.deg(sp.acsc(z)).evalf()
        elif z.free_symbols:
            return sp.deg(sp.acsc(z))
        else:
            return None

    def acscd_inverse_cosecant(input_str):
        """
        计算输入表达式的反余割值(以度为单位)。

        参数:
        input_str: 输入的字符串表达式,可以是数字、符号、矩阵等。

        返回:
        如果输入有效,则返回计算结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果表达式是元组,说明输入格式错误
            if isinstance(expr, tuple):
                error = True
            # 如果表达式是矩阵,则对矩阵中的每个元素计算反余割值(以度为单位)
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(lambda x: evaluate_acscd_function(x))
            # 如果表达式是数字或包含自由符号,则直接计算反余割值(以度为单位)
            elif expr.is_number or expr.free_symbols:
                result = evaluate_acscd_function(expr)
            else:
                error = True

            # 如果出现错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result
        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 acscd_inverse_cosecant 函数的使用。
        """
        # 示范代码
        input_examples = [
            "2",  # 数字
            "x",  # 符号
            "[[1, 2], [3, 4]]",  # 矩阵
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = acscd_inverse_cosecant(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    反双曲余割

    Y = acsch(X) 返回X各元素的反双曲余割.该函数同时接受实数和复数输入.所有的角度都以弧度表示

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def evaluate_acsch_function(z):
        """
        计算输入的反双曲余割值。

        参数:
        z: 输入的表达式,可以是数字、符号等。

        返回:
        如果输入是数字,则返回反双曲余割值的浮点数结果;
        如果输入包含符号,则返回符号表达式;
        否则返回 None。
        """
        if z.is_number:
            return sp.log(1 / z + sp.sqrt(1 / (z ** 2) + 1)).evalf()
        elif z.free_symbols:
            return sp.log(1 / z + sp.sqrt(1 / (z ** 2) + 1))
        else:
            return None

    def acsch_inverse_cosecant(input_str):
        """
        计算输入表达式的反双曲余割值。

        参数:
        input_str: 输入的字符串表达式,可以是数字、符号、矩阵等。

        返回:
        如果输入有效,则返回计算结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果表达式是元组,说明输入格式错误
            if isinstance(expr, tuple):
                error = True
            # 如果表达式是矩阵,则对矩阵中的每个元素计算反双曲余割值
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(lambda x: evaluate_acsch_function(x))
            # 如果表达式是数字或包含自由符号,则直接计算反双曲余割值
            elif expr.is_number or expr.free_symbols:
                result = evaluate_acsch_function(expr)
            else:
                error = True

            # 如果出现错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result
        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 acsch_inverse_cosecant 函数的使用。
        """
        # 示范代码
        input_examples = [
            "2",  # 数字
            "x",  # 符号
            "[[1, 2], [3, 4]]",  # 矩阵
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = acsch_inverse_cosecant(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    Airy函数,

    W = airy(Z) 为Z的每个元素返回Airy函数Ai(Z).

    W = airy(k,Z) 返回任何四个不同的Airy函数,具体取决于k的值,例如第二类Airy函数或Airy函数的一阶导数.

    Z是向量,矩阵,多维数组

    k=0,返回Ai(Z)

    k=1,返回Ai(Z)的一阶导数

    k=2,返回Bi(Z)

    k=3,返回Bi(Z)的一阶导数
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def evaluate_function(z_val, k_val):
        """
        根据 k_val 的值计算 Airy 函数或其导数。

        参数:
        z_val: 输入的表达式,可以是数字、符号等。
        k_val: 控制 Airy 函数类型的参数:
            - 0: 计算 Airy Ai 函数
            - 1: 计算 Airy Ai 函数的导数
            - 2: 计算 Airy Bi 函数
            - 3: 计算 Airy Bi 函数的导数

        返回:
        如果输入有效,则返回计算结果;否则返回 None。
        """
        if k_val == 0:
            return sp.airyai(z_val).evalf()
        elif k_val == 1:
            return sp.airyaiprime(z_val)
        elif k_val == 2:
            return sp.airybi(z_val).evalf()
        elif k_val == 3:
            return sp.airybiprime(z_val)
        else:
            return None

    def airy_functions(input_str):
        """
        计算输入表达式的 Airy 函数或其导数。

        参数:
        input_str: 输入的字符串表达式,可以是数字、符号、矩阵等。

        返回:
        如果输入有效,则返回计算结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,则解析 k 和 z
            if isinstance(expr, tuple):
                k = expr[0]
                z = expr[1]
            else:
                k = 0
                z = expr

            # 检查 k 和 z 是否为矩阵
            K = is_matrix(k)
            Z = is_matrix(z)

            # 获取 k 和 z 的形状
            K_shape = K.shape if K is not None else None
            Z_shape = Z.shape if Z is not None else None

            # 确定返回结果的形状
            result_shape = None
            if K is not None:
                result_shape = K_shape
            elif Z is not None:
                result_shape = Z_shape

            # 检查是否有两个或两个以上的矩阵,且形状相同
            if K is not None and Z is not None and K_shape != Z_shape:
                error = True

            # 计算结果
            if result_shape:
                result = sp.Matrix(result_shape[0], result_shape[1], lambda i, j: evaluate_function(
                    Z[i, j] if Z is not None else z,
                    K[i, j] if K is not None else k
                ))
            else:
                result = evaluate_function(z, k)

            # 如果出现错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result
        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 airy_functions 函数的使用。
        """
        # 示范代码
        input_examples = [
            "2",  # 数字
            "x",  # 符号
            "(0, [[1, 2], [3, 4]])",  # 矩阵
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = airy_functions(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    AiryAi函数的第k个零点

    airyaiZero(k)返回第k个零点

    k - 输入,整数
    
    import sympy as sp
    import mpmath as mp

    def airy_ai_zero(input_str):
        """
        计算 Airy Ai 函数的第 n 个零点。

        参数:
        input_str: 输入的字符串表达式,必须是一个整数。

        返回:
        如果输入有效,则返回 Airy Ai 函数的第 n 个零点;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,说明输入格式错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是整数,则计算 Airy Ai 函数的第 n 个零点
            elif expr.is_integer:
                # 设置 mpmath 的精度
                mp.dps = 25
                mp.pretty = True
                # 计算 Airy Ai 函数的第 n 个零点
                result = mp.airyaizero(expr)
            else:
                error = True

            # 如果出现错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result
        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 airy_ai_zero 函数的使用。
        """
        # 示范代码
        input_examples = [
            "0",  # 第 0 个零点
            "1",  # 第 1 个零点
            "2",  # 第 2 个零点
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = airy_ai_zero(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    AiryBi函数的第k个零点

    airybiZero(k)返回第k个零点

    k - 输入,整数
    
    import sympy as sp
    import mpmath as mp

    def airy_bi_zero(input_str):
        """
        计算 Airy Bi 函数的第 n 个零点。

        参数:
        input_str: 输入的字符串表达式,必须是一个整数。

        返回:
        如果输入有效,则返回 Airy Bi 函数的第 n 个零点;否则返回错误信息。
        """
        try:
            # 对输入字符串进行预处理
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,说明输入格式错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是整数,则计算 Airy Bi 函数的第 n 个零点
            elif expr.is_integer:
                # 设置 mpmath 的精度
                mp.dps = 25
                mp.pretty = True
                # 计算 Airy Bi 函数的第 n 个零点
                result = mp.airybizero(expr)
            else:
                error = True

            # 如果出现错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result
        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 airy_bi_zero 函数的使用。
        """
        # 示范代码
        input_examples = [
            "0",  # 第 0 个零点
            "1",  # 第 1 个零点
            "2",  # 第 2 个零点
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = airy_bi_zero(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    交错数列函数

    W = AlternatingSeries(a,n)把a解析成交错队列.

    这个函数近似于交替序列中给定的实数.

    结果以列表形式返回,每个元素都是有理数。

    a是实数, n是队列长度.
    
    import sympy as sp
    from fractions import Fraction

    def alternating_series_calculate_leibniz(input_str):
        """
        计算交错数列,并将其转换为有理数形式。

        参数:
        input_str: 输入的字符串表达式,可以是一个数或一个元组(起始点,项数)。

        返回:
        如果输入有效,则返回交错数列的有理数形式列表;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)

            # 如果输入是元组,解析起始点和项数
            if isinstance(expr, tuple):
                starting_point = sp.N(expr[0])  # 起始点
                num_terms = expr[1]  # 项数
            else:
                starting_point = sp.N(expr)  # 默认起始点
                num_terms = 10  # 默认项数

            # 计算莱布尼茨级数的部分和
            leibniz_series = [((-1) ** i) / (2 * i + 1) for i in range(int(num_terms))]
            current_sum = sum(leibniz_series)

            # 调整级数以匹配起始点
            leibniz_series[0] += starting_point - current_sum

            # 将级数中的浮点数转换为分数形式
            fraction_list = [Fraction(str(number)).limit_denominator(100) for number in leibniz_series]

            # 将分数转换为 SymPy 的有理数形式
            rational_list = [sp.Rational(fraction.numerator, fraction.denominator) for fraction in fraction_list]

            return rational_list
        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 alternating_series_calculate_leibniz 函数的使用。
        """
        # 示范代码
        input_examples = [
            "0",  # 默认起始点,默认项数
            "(1, 5)",  # 起始点为 1,项数为 5
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = alternating_series_calculate_leibniz(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    近似最小度置换.

    P = amd(A) 为稀疏矩阵 C=A+A' 返回近似最小度置换向量.

    amd函数可能比symamd函数快,还可能比symamd返回更好的排序.

    矩阵A必须是方阵.如果A为满矩阵,则amd(A)等效于amd(sparse(A))。
    
    import sympy as sp
    import numpy as np
    import scipy.sparse
    import tensorflow as tf
    from tensorflow.python.ops.linalg.sparse import sparse_csr_matrix_ops

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def amd_approximate_minimum_degree(input_str):
        """
        计算输入矩阵的近似最小度(AMD)排序。

        参数:
        input_str: 输入的字符串表达式,必须是一个矩阵。

        返回:
        如果输入有效,则返回 AMD 排序结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)

            # 检查输入是否为矩阵
            if (sp_matrix := is_matrix(expr)) is not None:
                # 将 SymPy 矩阵转换为 NumPy 数组
                matrix = np.array(sp_matrix, dtype=np.float32)
            else:
                return f"输入错误: {input_str}"

            # 检查矩阵是否为稀疏矩阵
            if scipy.sparse.issparse(matrix):
                # 如果是稀疏矩阵,转换为 COO 格式
                coo = matrix.tocoo()
                indices = np.vstack((coo.row, coo.col)).T
                values = coo.data
                dense_shape = coo.shape
            else:
                # 如果是稠密矩阵,找到非零元素的索引和值
                indices = np.argwhere(matrix != 0)
                values = matrix[indices[:, 0], indices[:, 1]]
                dense_shape = matrix.shape

            # 从索引、值和形状创建稀疏张量
            sparse_tensor = tf.sparse.SparseTensor(indices, values, dense_shape)

            # 将稀疏张量转换为 CSR 稀疏矩阵
            sparse_matrix = sparse_csr_matrix_ops.sparse_tensor_to_csr_sparse_matrix(
                sparse_tensor.indices, sparse_tensor.values, sparse_tensor.dense_shape)

            # 计算 CSR 稀疏矩阵的 AMD 排序
            ordering_amd = sparse_csr_matrix_ops.sparse_matrix_ordering_amd(sparse_matrix)

            # 将 AMD 排序结果转换为 NumPy 数组并返回
            ordering_amd_value = ordering_amd.numpy()
            return list(ordering_amd_value)
        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 amd_approximate_minimum_degree 函数的使用。
        """
        # 示范代码
        input_examples = [
            "[[1, 0, 2], [0, 3, 0], [4, 0, 5]]",  # 稠密矩阵
            "[[0, 1, 0], [2, 0, 3], [0, 4, 0]]",  # 稀疏矩阵
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = amd_approximate_minimum_degree(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    两个向量之间的角度.

    X = angleBtwNDVectors(A,B)

    (A,B) -- 带有两个向量的元组, 包括正交向量, 普通向量, 符号向量。

    X  -- 夹角的弧度
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def angle_between_vectors(input_str):
        """
        计算两个向量之间的夹角。

        参数:
        input_str: 输入的字符串表达式,表示两个向量,例如 "([a1, b1, c1], [a2, b2, c2])"。

        返回:
        如果输入有效,则返回两个向量之间的夹角(以弧度表示);否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 检查输入是否为元组且包含两个向量
            if not isinstance(expr, tuple) or len(expr) != 2:
                error = True
            else:
                # 检查第一个向量是否为列向量
                if (sp_matrix := is_matrix(expr[0])) is not None and sp_matrix.shape[1] == 1:
                    v = sp_matrix
                else:
                    error = True

                # 检查第二个向量是否为列向量
                if (sp_matrix := is_matrix(expr[1])) is not None and sp_matrix.shape[1] == 1:
                    w = sp_matrix
                else:
                    error = True

            # 如果输入无效,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                # 计算两个向量之间的夹角
                result = sp.acos(v.dot(w) / (v.norm() * w.norm())).evalf()
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 angle_between_vectors 函数的使用。
        """
        # 示范代码
        input_examples = [
            "([1, 0, 0], [0, 1, 0])",  # 两个正交向量
            "([1, 2, 3], [4, 5, 6])",  # 两个普通向量
            "([a1, b1, c1], [a2, b2, c2])",  # 符号变量
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = angle_between_vectors(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    确定是否缺失任一数组元素

    如果 A 中有至少一个元素缺失,则 TF = anymissing(A) 返回逻辑值 1 (true)。如果没有元素缺失,它将返回 0 (false)

    A -- 向量,矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def any_missing(input_str):
        """
        检查输入矩阵中是否包含缺失值(NaN)。

        参数:
        input_str: 输入的字符串表达式,可以是矩阵或其他类型。

        返回:
        如果输入是矩阵且包含缺失值,返回 1;
        如果输入是矩阵且不包含缺失值,返回 0;
        如果输入无效,返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            def evaluation_missing_ele(x):
                """
                检查元素是否为缺失值(NaN)。

                参数:
                x: 矩阵中的元素。

                返回:
                如果元素是 NaN,返回 True;否则返回 False。
                """
                if x is sp.nan:
                    return True
                else:
                    return False

            # 如果输入是元组,说明输入格式错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,检查是否包含缺失值
            elif (A := is_matrix(expr)) is not None:
                result = any(A.applyfunc(lambda x: evaluation_missing_ele(x)))
            else:
                error = True

            # 如果出现错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            # 如果包含缺失值,返回 1;否则返回 0
            elif result:
                return 1
            else:
                return 0

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 any_missing 函数的使用。
        """
        # 示范代码
        input_examples = [
            "[[1, 2], [3, 4]]",  # 不包含缺失值的矩阵
            "[[1, nan], [3, 4]]",  # 包含缺失值的矩阵
            "([1, 2], [3, 4])",  # 无效输入(元组)
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = any_missing(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    分解分式

    对多项式函数执行部分分数分解.

    对有理函数执行部分分式分解.
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def is_func(expr):
        """
        判断输入是否为函数或可以转换为函数的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 函数或其他类型。

        返回:
        如果输入是函数或可以转换为函数,则返回 SymPy 函数对象;否则返回 None。
        """
        try:
            if isinstance(expr, sp.Function):
                return expr
            else:
                return None
        except Exception as e:
            print(f"{e}")
            return None

    def apart_expression(input_str):
        """
        对输入表达式进行部分分式分解。

        参数:
        input_str: 输入的字符串表达式,可以是矩阵、函数或其他类型。

        返回:
        如果输入有效,则返回部分分式分解结果;否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,说明输入格式错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对矩阵中的每个元素进行部分分式分解
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.apart)
            # 如果输入是函数,对函数进行部分分式分解
            elif (f_expr := is_func(expr)) is not None:
                result = sp.apart(f_expr)
            # 其他情况,直接对表达式进行部分分式分解
            else:
                result = sp.apart(expr)

            # 如果出现错误,返回错误信息
            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 apart_expression 函数的使用。
        """
        # 示范代码
        input_examples = [
            "(x**2 + 3*x + 2)/(x + 1)",  # 多项式分式
            "[[(x**2 + 3*x + 2)/(x + 1), 1/(x + 2)], [1/(x + 3), 1/(x + 4)]]",  # 矩阵
            "sin(x)",  # 函数
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = apart_expression(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    自回归条件异方差模型

    是特别用来建立条件方差模型并对其进行预测的.

    这些模型被运用于经济学领域,尤其是金融时间序列分析中.
    
    import sympy as sp
    import numpy as np
    from arch import arch_model

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def archfit_regression_expression(input_str):
        """
        对输入的时间序列数据进行 ARCH 模型拟合。

        参数:
        input_str: 输入的字符串表达式,表示时间序列数据(矩阵或列表)。

        返回:
        如果输入有效,则返回 ARCH 模型的拟合参数(以中文命名);否则返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)

            # 检查输入是否为矩阵
            if (sp_matrix := is_matrix(expr)) is not None:
                # 将 SymPy 矩阵转换为 NumPy 数组并展平
                A = np.ravel(np.array(sp_matrix, dtype=np.float32))
            else:
                return f"输入错误: {input_str}"

            # 使用 ARCH 模型进行拟合
            # 假设 p=1(ARCH(1) 模型),vol='ARCH'(ARCH 模型)
            am = arch_model(A, vol='ARCH', p=1)
            # 拟合模型,设置 update_freq=0 和 disp='off' 以关闭输出
            res = am.fit(update_freq=0, disp='off')

            # 获取拟合参数
            params_dict = dict(res.params)

            # 创建一个新的字典,用于存储重命名后的参数
            renamed_params_dict = {}

            # 遍历原始字典,将键重命名为更具描述性的中文名称
            for key, value in params_dict.items():
                if key == 'mu':
                    renamed_params_dict['均值'] = value
                elif key == 'omega':
                    renamed_params_dict['方差偏移'] = value
                elif key == 'alpha[1]':
                    renamed_params_dict['方差系数'] = value
                else:
                    renamed_params_dict[key] = value

            return renamed_params_dict

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 archfit_regression_expression 函数的使用。
        """
        # 示范代码
        input_examples = [
            "[[1, 2, 3, 4, 5]]",  # 时间序列数据
            "[[0.1, 0.2, 0.3, 0.4, 0.5]]",  # 时间序列数据
            "invalid_input",  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = archfit_regression_expression(input_str)
            print(f"结果: {result}")
            print("-" * 40)

    if __name__ == "__main__":
        main()
    
    
    相位角

    theta = angle(z) 为复数数组z的每个元素返回区间 [-π,π] 中的相位角,theta中的角度表示为z=abs(z).*exp(i*theta)

    z是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def angle_phase(input_str):
        """
        计算复数或复数矩阵的相位角。

        参数:
        input_str: 输入的复数或复数矩阵的字符串表示。

        返回:
        如果输入是复数,返回其相位角;如果输入是复数矩阵,返回每个元素的相位角矩阵;
        如果输入错误,返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            def evaluate_angle_phase(x):
                """
                计算单个复数的相位角。

                参数:
                x: 输入的复数。

                返回:
                复数的相位角。
                """
                if x.is_complex:
                    # 提取实部和虚部
                    a = x.as_real_imag()[0]
                    b = x.as_real_imag()[1]
                    # 计算相位
                    phase = sp.atan(b / a)
                    return phase.evalf()
                else:
                    return None

            # 判断输入是否为矩阵
            if (sp_matrix := is_matrix(expr)) is not None:
                # 如果是矩阵,对每个元素计算相位角
                result = sp_matrix.applyfunc(lambda x: evaluate_angle_phase(x))
            elif expr.is_complex:
                # 如果是单个复数,计算其相位角
                a = expr.as_real_imag()[0]
                b = expr.as_real_imag()[1]
                phase = sp.atan(b / a)
                result = phase.evalf()
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误:{e}"

    def main():
        """
        主函数,用于演示 angle_phase 函数的使用。
        """
        # 示范代码
        # 单个复数的相位角计算
        complex_number = "3 + 4*I"
        print(f"复数 {complex_number} 的相位角为: {angle_phase(complex_number)}")

        # 复数矩阵的相位角计算
        complex_matrix = "[[1 + I, 2 + 2*I], [3 + 3*I, 4 + 4*I]]"
        print(f"复数矩阵 {complex_matrix} 的相位角为: {angle_phase(complex_matrix)}")

        # 错误输入示例
        invalid_input = "1 + 2"
        print(f"输入 {invalid_input} 的结果为: {angle_phase(invalid_input)}")

    if __name__ == "__main__":
        main()
    
    
    自回归移动平均模型

    Armax(data,order),其中data是输入的时间序列数据,orders是包含AR,MA和常数项阶数的向量.
    
    import ast
    import numpy as np
    import statsmodels.api as sm

    def arma_regression_expression(input_str):
        """
        根据输入的字符串数据拟合 ARMA 模型,并返回自回归系数、移动平均系数和常数项。

        参数:
        input_str: 输入的字符串,格式为 "([数据列表], (p, d, q))",其中 p 是自回归阶数,d 是差分阶数,q 是移动平均阶数。

        返回:
        返回一个字符串,包含自回归系数、移动平均系数和常数项;如果出错,返回错误信息。
        """
        try:
            # 将输入字符串解析为 Python 对象
            A = ast.literal_eval(input_str)
            # 提取数据并展平为一维数组
            data = np.ravel(A[0])
            # 提取 ARMA 模型的阶数 (p, d, q)
            order = A[1]

            # 拟合 ARMA 模型
            model = sm.tsa.SARIMAX(data, order=order)
            result = model.fit()

            # 提取并返回自回归系数、移动平均系数和常数项
            return_string = (
                f"自回归系数: {list(result.arparams)}, "
                f"移动平均系数: {result.maparams}, "
                f"常数项: {result.params[-1]}"
            )
            return return_string

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 arma_regression_expression 函数的使用。
        """
        # 示范代码
        # 示例 1: 正常输入
        input_str1 = "([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], (1, 0, 1))"
        print(f"输入: {input_str1}")
        print(f"结果: {arma_regression_expression(input_str1)}")
        print()

        # 示例 2: 正常输入(随机数据)
        np.random.seed(0)
        random_data = np.random.randn(100).tolist()
        input_str2 = f"({random_data}, (2, 0, 1))"
        print(f"输入: {input_str2}")
        print(f"结果: {arma_regression_expression(input_str2)}")
        print()

        # 示例 3: 错误输入(数据格式错误)
        input_str3 = "([1, 2, 3], (1, 0))"  # 阶数格式错误
        print(f"输入: {input_str3}")
        print(f"结果: {arma_regression_expression(input_str3)}")
        print()

        # 示例 4: 错误输入(非数值数据)
        input_str4 = "(['a', 'b', 'c'], (1, 0, 1))"  # 数据格式错误
        print(f"输入: {input_str4}")
        print(f"结果: {arma_regression_expression(input_str4)}")

    if __name__ == "__main__":
        main()
    
    
    反正割(以弧度为单位)

    Y = asec(X) 以弧度为单位返回X各元素的反正割(sec^-1),该函数同时接受实数和复数输入

    对于 X 在区间 [-∞, -1] 和 [1, ∞] 中的实数值,asec(X) 返回区间 [0, π] 中的值

    对于 X 在区间 (-1, 1) 内的实数值以及 X 的复数值,asec(X) 返回复数值

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def asec_inverse_sec(input_str):
        """
        计算输入表达式的反正割值(arcsec)。

        参数:
        input_str: 输入的表达式,可以是数值、符号、矩阵或列表。

        返回:
        如果输入是数值或符号,返回其反正割值;
        如果输入是矩阵或列表,返回每个元素的反正割值矩阵;
        如果输入错误,返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对每个元素计算反正割值
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.asec).evalf()
            # 如果输入是数值或符号表达式,计算反正割值
            elif expr.is_number or expr.free_symbols:
                result = sp.asec(expr).evalf()
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 asec_inverse_sec 函数的使用。
        """
        # 示范代码
        # 示例 1: 数值输入
        input_str1 = "2"
        print(f"输入: {input_str1}")
        print(f"反正割值: {asec_inverse_sec(input_str1)}")
        print()

        # 示例 2: 符号输入
        input_str2 = "x"
        print(f"输入: {input_str2}")
        print(f"反正割值: {asec_inverse_sec(input_str2)}")
        print()

        # 示例 3: 矩阵输入
        input_str3 = "[[1, 2], [3, 4]]"
        print(f"输入: {input_str3}")
        print(f"反正割值矩阵: {asec_inverse_sec(input_str3)}")
        print()

        # 示例 4: 错误输入(元组)
        input_str4 = "(1, 2, 3)"
        print(f"输入: {input_str4}")
        print(f"结果: {asec_inverse_sec(input_str4)}")
        print()

        # 示例 5: 错误输入(非法表达式)
        input_str5 = "1 / 0"
        print(f"输入: {input_str5}")
        print(f"结果: {asec_inverse_sec(input_str5)}")

    if __name__ == "__main__":
        main()
    
    
    反正割(以度为单位)

    Y = asecd(X) 返回X的元素的反正割(sec^-1)(以度为单位)。该函数同时接受实数和复数输入

    对于 X 在区间 [-∞, -1] 和 [1, ∞] 中的实数值,asecd(X) 返回区间 [0, 180] 中的值

    对于 X 在区间 (-1, 1) 内的实数值以及 X 的复数值,asecd(X) 返回复数值.

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def asecd_inverse_secant(input_str):
        """
        计算输入表达式的反余割值(arcsec),并将结果转换为度数。

        参数:
        input_str: 输入的表达式,可以是数值、符号、矩阵或列表。

        返回:
        如果输入是数值或符号,返回其反余割值(以度数为单位);
        如果输入是矩阵或列表,返回每个元素的反余割值矩阵(以度数为单位);
        如果输入错误,返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            def evaluate_asecd_function(z):
                """
                计算单个值的反余割值(以度数为单位)。

                参数:
                z: 输入的数值或符号。

                返回:
                反余割值(以度数为单位)。
                """
                if z.is_number:
                    # 如果是数值,计算反余割值并转换为度数
                    return sp.deg(sp.asec(z)).evalf()
                elif z.free_symbols:
                    # 如果是符号,保留符号表达式
                    return sp.deg(sp.asec(z))
                else:
                    return None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对每个元素计算反余割值
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(lambda x: evaluate_asecd_function(x))
            # 如果输入是数值或符号表达式,计算反余割值
            elif expr.is_number or expr.free_symbols:
                result = evaluate_asecd_function(expr)
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 asecd_inverse_secant 函数的使用。
        """
        # 示范代码
        # 示例 1: 数值输入
        input_str1 = "2"
        print(f"输入: {input_str1}")
        print(f"反余割值(度数): {asecd_inverse_secant(input_str1)}")
        print()

        # 示例 2: 符号输入
        input_str2 = "x"
        print(f"输入: {input_str2}")
        print(f"反余割值(度数): {asecd_inverse_secant(input_str2)}")
        print()

        # 示例 3: 矩阵输入
        input_str3 = "[[1, 2], [3, 4]]"
        print(f"输入: {input_str3}")
        print(f"反余割值矩阵(度数): {asecd_inverse_secant(input_str3)}")
        print()

        # 示例 4: 错误输入(元组)
        input_str4 = "(1, 2, 3)"
        print(f"输入: {input_str4}")
        print(f"结果: {asecd_inverse_secant(input_str4)}")
        print()

        # 示例 5: 错误输入(非法表达式)
        input_str5 = "1 / 0"
        print(f"输入: {input_str5}")
        print(f"结果: {asecd_inverse_secant(input_str5)}")

    if __name__ == "__main__":
        main()
    
    
    反双曲正割

    Y = asech(X) 返回X的元素的反双曲正割.该函数同时接受实数和复数输入.所有的角度都以弧度表示

    X是标量,向量,数组或矩阵.
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def asech_inverse_hyperbolic_secant(input_str):
        """
        计算输入表达式的反双曲正割值(asech)。

        参数:
        input_str: 输入的表达式,可以是数值、符号、矩阵或列表。

        返回:
        如果输入是数值或符号,返回其反双曲正割值;
        如果输入是矩阵或列表,返回每个元素的反双曲正割值矩阵;
        如果输入错误,返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对每个元素计算反双曲正割值
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.asech).evalf()
            # 如果输入是数值或符号表达式,计算反双曲正割值
            elif expr.is_number or expr.free_symbols:
                result = sp.asech(expr).evalf()
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 asech_inverse_hyperbolic_secant 函数的使用。
        """
        # 示范代码
        # 示例 1: 数值输入
        input_str1 = "0.5"
        print(f"输入: {input_str1}")
        print(f"反双曲正割值: {asech_inverse_hyperbolic_secant(input_str1)}")
        print()

        # 示例 2: 符号输入
        input_str2 = "x"
        print(f"输入: {input_str2}")
        print(f"反双曲正割值: {asech_inverse_hyperbolic_secant(input_str2)}")
        print()

        # 示例 3: 矩阵输入
        input_str3 = "[[0.1, 0.2], [0.3, 0.4]]"
        print(f"输入: {input_str3}")
        print(f"反双曲正割值矩阵: {asech_inverse_hyperbolic_secant(input_str3)}")
        print()

        # 示例 4: 错误输入(元组)
        input_str4 = "(1, 2, 3)"
        print(f"输入: {input_str4}")
        print(f"结果: {asech_inverse_hyperbolic_secant(input_str4)}")
        print()

        # 示例 5: 错误输入(非法表达式)
        input_str5 = "1 / 0"
        print(f"输入: {input_str5}")
        print(f"结果: {asech_inverse_hyperbolic_secant(input_str5)}")

    if __name__ == "__main__":
        main()
    
    
    反正弦(以弧度为单位)

    Y = asin(X) 以弧度为单位返回 X 各元素的 反正弦 (sin^-1)。该函数同时接受实数和复数输入

    对于 X 在区间 [-1, 1] 内的实数值,asin(X) 返回区间 [-π/2, π/2] 内的值

    对于 X 在区间 [-1, 1] 之外的实数值以及 X 的复数值,asin(X) 返回复数值

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def asin_inverse_sine(input_str):
        """
        计算输入表达式的反正弦值(arcsin),结果以弧度为单位。

        参数:
        input_str: 输入的表达式,可以是数值、符号、矩阵或列表。

        返回:
        如果输入是数值或符号,返回其反正弦值(以弧度为单位);
        如果输入是矩阵或列表,返回每个元素的反正弦值矩阵(以弧度为单位);
        如果输入错误,返回错误信息。
        """
        try:
            # 将输入字符串转换为 SymPy 表达式
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对每个元素计算反正弦值
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.asin).evalf()
            # 如果输入是数值或符号表达式,计算反正弦值
            elif expr.is_number or expr.free_symbols:
                result = sp.asin(expr).evalf()
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 asin_inverse_sine 函数的使用。
        """
        # 示范代码
        # 示例 1: 数值输入
        input_str1 = "0.5"
        print(f"输入: {input_str1}")
        print(f"反正弦值(弧度): {asin_inverse_sine(input_str1)}")
        print()

        # 示例 2: 符号输入
        input_str2 = "x"
        print(f"输入: {input_str2}")
        print(f"反正弦值(弧度): {asin_inverse_sine(input_str2)}")
        print()

        # 示例 3: 矩阵输入
        input_str3 = "[[0.1, 0.2], [0.3, 0.4]]"
        print(f"输入: {input_str3}")
        print(f"反正弦值矩阵(弧度): {asin_inverse_sine(input_str3)}")
        print()

        # 示例 4: 错误输入(元组)
        input_str4 = "(1, 2, 3)"
        print(f"输入: {input_str4}")
        print(f"结果: {asin_inverse_sine(input_str4)}")
        print()

        # 示例 5: 错误输入(非法表达式)
        input_str5 = "1 / 0"
        print(f"输入: {input_str5}")
        print(f"结果: {asin_inverse_sine(input_str5)}")

    if __name__ == "__main__":
        main()
    
    
    反正弦(以度为单位)

    Y = asind(X) 以度为单位返回 X 各元素的 反正弦 (sin^-1)。该函数同时接受实数和复数输入

    对于 X 在区间 [-1, 1] 内的实数值,asind(X) 返回区间 [-90, 90] 内的值

    对于 X 在区间 [-1, 1] 之外的实数值以及 X 的复数值,asind(X) 返回复数值

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def asind_inverse_sine(input_str):
        """
        计算反正弦函数的值,并将结果转换为度数。

        参数:
        input_str: 输入的字符串,可以是数字、符号表达式、矩阵或列表。

        返回:
        如果输入有效,返回计算结果;否则返回错误信息。
        """
        try:
            expr = sp.sympify(input_str)
            error = False
            result = None

            def evaluate_asind_function(z):
                """
                计算单个值的反正弦函数,并将结果转换为度数。

                参数:
                z: 输入的 SymPy 表达式。

                返回:
                如果 z 是数字,返回计算结果的浮点值;如果 z 包含符号,返回符号表达式;否则返回 None。
                """
                if z.is_number:
                    return sp.deg(sp.asin(z)).evalf()
                elif z.free_symbols:
                    return sp.deg(sp.asin(z))
                else:
                    return None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对矩阵中的每个元素应用 evaluate_asind_function
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(lambda x: evaluate_asind_function(x))
            # 如果输入是数字或包含符号,直接计算
            elif expr.is_number or expr.free_symbols:
                result = evaluate_asind_function(expr)
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 asind_inverse_sine 函数的使用。
        """
        # 示范代码
        input_examples = [
            "0.5",  # 数字输入
            "sqrt(2)/2",  # 符号表达式输入
            "[[1/2, sqrt(3)/2], [0, 1]]",  # 矩阵输入
            "invalid_input"  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = asind_inverse_sine(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    反双曲正弦

    Y = asinh(X) 返回X的元素的反双曲正弦.该函数同时接受实数和复数输入.所有的角度都以弧度表示

    X是标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def asinh_inverse_hyperbolic_sine(input_str):
        """
        计算反双曲正弦函数的值。

        参数:
        input_str: 输入的字符串,可以是数字、符号表达式、矩阵或列表。

        返回:
        如果输入有效,返回计算结果;否则返回错误信息。
        """
        try:
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对矩阵中的每个元素应用反双曲正弦函数
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.asinh).evalf()
            # 如果输入是数字或包含符号,直接计算反双曲正弦函数
            elif expr.is_number or expr.free_symbols:
                result = sp.asinh(expr).evalf()
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 asinh_inverse_hyperbolic_sine 函数的使用。
        """
        # 示范代码
        input_examples = [
            "0.5",  # 数字输入
            "1",  # 数字输入
            "[[1, 2], [3, 4]]",  # 矩阵输入
            "x",  # 符号表达式输入
            "invalid_input"  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = asinh_inverse_hyperbolic_sine(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    反正切(以弧度为单位)

    Y = atan(X) 以弧度为单位返回X各元素的反正切 (tan^-1). 该函数同时接受实数和复数输入.

    对于X的实数值,atan(X)返回区间 [-π/2, π/2] 中的值.

    对于X的复数值,atan(X)返回复数值.

    X -- 角正切,标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def atan_inverse_tangent(input_str):
        """
        计算反正切函数的值。

        参数:
        input_str: 输入的字符串,可以是数字、符号表达式、矩阵或列表。

        返回:
        如果输入有效,返回计算结果;否则返回错误信息。
        """
        try:
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对矩阵中的每个元素应用反正切函数
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.atan).evalf()
            # 如果输入是数字或包含符号,直接计算反正切函数
            elif expr.is_number or expr.free_symbols:
                result = sp.atan(expr).evalf()
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 atan_inverse_tangent 函数的使用。
        """
        # 示范代码
        input_examples = [
            "1",  # 数字输入
            "sqrt(3)",  # 符号表达式输入
            "[[1, 0], [0, 1]]",  # 矩阵输入
            "x",  # 符号变量输入
            "invalid_input"  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = atan_inverse_tangent(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    反正切(以度为单位)

    Y = atand(X) 返回 X 的元素的反正切 (tan-1)(以度为单位).该函数同时接受实数和复数输入.

    对于X的实数值,atand(X)返回区间 [-90, 90] 中的值。

    对于X的复数值,atand(X)返回复数值.

    X -- 角正切,标量,向量,数组或矩阵

    Y — 输出,以度为单位的角, 标量值,向量,矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def atand_inverse_tangent(input_str):
        """
        计算反正切函数的值,并将结果转换为度数。

        参数:
        input_str: 输入的字符串,可以是数字、符号表达式、矩阵或列表。

        返回:
        如果输入有效,返回计算结果;否则返回错误信息。
        """
        try:
            expr = sp.sympify(input_str)
            error = False
            result = None

            def evaluate_atand_function(z):
                """
                计算单个值的反正切函数,并将结果转换为度数。

                参数:
                z: 输入的 SymPy 表达式。

                返回:
                如果 z 是数字,返回计算结果的浮点值;如果 z 包含符号,返回符号表达式;否则返回 None。
                """
                if z.is_number:
                    return sp.deg(sp.atan(z)).evalf()
                elif z.free_symbols:
                    return sp.deg(sp.atan(z))
                else:
                    return None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对矩阵中的每个元素应用 evaluate_atand_function
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(lambda x: evaluate_atand_function(x))
            # 如果输入是数字或包含符号,直接计算
            elif expr.is_number or expr.free_symbols:
                result = evaluate_atand_function(expr)
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 atand_inverse_tangent 函数的使用。
        """
        # 示范代码
        input_examples = [
            "1",  # 数字输入
            "sqrt(3)",  # 符号表达式输入
            "[[1, 0], [0, 1]]",  # 矩阵输入
            "x",  # 符号变量输入
            "invalid_input"  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = atand_inverse_tangent(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    反双曲正切

    Y = atanh(X)返回X的元素的反双曲正切.该函数同时接受实数和复数输入.所有的角度都以弧度表示.

    X -- 角的双曲正切,标量,向量,数组或矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def atanh_inverse_hyperbolic_tangent(input_str):
        """
        计算反双曲正切函数的值。

        参数:
        input_str: 输入的字符串,可以是数字、符号表达式、矩阵或列表。

        返回:
        如果输入有效,返回计算结果;否则返回错误信息。
        """
        try:
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 如果输入是元组,标记为错误
            if isinstance(expr, tuple):
                error = True
            # 如果输入是矩阵,对矩阵中的每个元素应用反双曲正切函数
            elif (sp_matrix := is_matrix(expr)) is not None:
                result = sp_matrix.applyfunc(sp.atanh).evalf()
            # 如果输入是数字或包含符号,直接计算反双曲正切函数
            elif expr.is_number or expr.free_symbols:
                result = sp.atanh(expr).evalf()
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 atanh_inverse_hyperbolic_tangent 函数的使用。
        """
        # 示范代码
        input_examples = [
            "0.5",  # 数字输入
            "0",  # 数字输入
            "[[0.1, 0.2], [0.3, 0.4]]",  # 矩阵输入
            "x",  # 符号表达式输入
            "invalid_input"  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = atanh_inverse_hyperbolic_tangent(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    四象限反正切

    P = atanTwo(Y,X) 返回Y和X的四象限反正切(tan^-1),该值必须为实数. atanTwo函数遵循当x在数学上为零(或者为0或-0)时atanTwo(x,x)返回0的约定.

    X -- x坐标,标量,向量,矩阵

    Y -- y坐标,标量,向量,矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def atan2_inverse_tangent(input_str):
        """
        计算 atan2 函数的值,用于计算两个数的四象限反正切值。

        参数:
        input_str: 输入的字符串,可以是元组(包含两个数字、符号表达式或矩阵)。

        返回:
        如果输入有效,返回计算结果;否则返回错误信息。
        """
        try:
            expr = sp.sympify(input_str)
            error = False
            result = None

            # 检查输入是否为元组且长度为 2
            if isinstance(expr, tuple) and len(expr) == 2:
                n = expr[0]  # 第一个输入
                x = expr[1]  # 第二个输入

                # 检查是否为矩阵
                N = is_matrix(n)
                X = is_matrix(x)

                # 获取矩阵的形状
                N_shape = N.shape if N is not None else None
                X_shape = X.shape if X is not None else None

                # 确定返回结果的形状
                result_shape = None
                if N is not None:
                    result_shape = N_shape
                elif X is not None:
                    result_shape = X_shape

                # 检查是否有两个矩阵且形状不同
                if N is not None and X is not None and N_shape != X_shape:
                    error = True

                # 计算结果
                if result_shape:
                    # 如果输入是矩阵,逐元素计算 atan2
                    result = sp.Matrix(result_shape[0], result_shape[1], lambda i, j: sp.atan2(
                        N[i, j] if N is not None else n,
                        X[i, j] if X is not None else x
                    ).evalf())
                else:
                    # 如果输入是数字或符号表达式,直接计算 atan2
                    result = sp.atan2(n, x).evalf()
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 atan2_inverse_tangent 函数的使用。
        """
        # 示范代码
        input_examples = [
            "(1, 1)",  # 数字输入
            "(0, 1)",  # 数字输入
            "([[1, 2], [3, 4]], [[1, 0], [0, 1]])",  # 矩阵输入
            "(x, y)",  # 符号表达式输入
            "invalid_input"  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = atan2_inverse_tangent(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    四象限反正切(以度为单位)

    D = atanTwoD(Y,X) 返回Y和X的四象限反正切(tan^-1),该值必须为实数.结果D用度表示.

    X -- x坐标,标量,向量,矩阵

    Y -- y坐标,标量,向量,矩阵
    
    import sympy as sp

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def atan2d_inverse_tangent(input_str):
        """
        计算 atan2 函数的值,并将结果转换为度数。

        参数:
        input_str: 输入的字符串,可以是元组(包含两个数字、符号表达式或矩阵)。

        返回:
        如果输入有效,返回计算结果;否则返回错误信息。
        """
        try:
            expr = sp.sympify(input_str)
            error = False
            result = None

            def evaluate_atan2d_function(x, y):
                """
                计算 atan2 函数的值,并将结果转换为度数。

                参数:
                x: 第一个输入,可以是数字或符号表达式。
                y: 第二个输入,可以是数字或符号表达式。

                返回:
                如果 x 和 y 是数字,返回计算结果的浮点值;如果包含符号,返回符号表达式;否则返回 None。
                """
                if x.is_number and y.is_number:
                    return sp.deg(sp.atan2(x, y)).evalf()
                elif x.free_symbols or y.free_symbols:
                    return sp.deg(sp.atan2(x, y))
                else:
                    return None

            # 检查输入是否为元组且长度为 2
            if isinstance(expr, tuple) and len(expr) == 2:
                n = expr[0]  # 第一个输入
                x = expr[1]  # 第二个输入

                # 检查是否为矩阵
                N = is_matrix(n)
                X = is_matrix(x)

                # 获取矩阵的形状
                N_shape = N.shape if N is not None else None
                X_shape = X.shape if X is not None else None

                # 确定返回结果的形状
                result_shape = None
                if N is not None:
                    result_shape = N_shape
                elif X is not None:
                    result_shape = X_shape

                # 检查是否有两个矩阵且形状不同
                if N is not None and X is not None and N_shape != X_shape:
                    error = True

                # 计算结果
                if result_shape:
                    # 如果输入是矩阵,逐元素计算 atan2d
                    result = sp.Matrix(result_shape[0], result_shape[1], lambda i, j: evaluate_atan2d_function(
                        N[i, j] if N is not None else n,
                        X[i, j] if X is not None else x
                    ))
                else:
                    # 如果输入是数字或符号表达式,直接计算 atan2d
                    result = evaluate_atan2d_function(n, x)
            else:
                error = True

            if error:
                return f"输入错误: {input_str}"
            else:
                return result

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 atan2d_inverse_tangent 函数的使用。
        """
        # 示范代码
        input_examples = [
            "(1, 1)",  # 数字输入
            "(0, 1)",  # 数字输入
            "([[1, 2], [3, 4]], [[1, 0], [0, 1]])",  # 矩阵输入
            "(x, y)",  # 符号表达式输入
            "invalid_input"  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = atan2d_inverse_tangent(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()
    
    
    给定时间序列(向量)y,返回一个矩阵,其中第一列为1,其他列为y的前k个滞后值

    换句话说,对于t>k,[1,y(t-1),…,y(t-k)]是结果的第t行.

    所得到的矩阵可以用作自回归中的回归矩阵.
    
    import sympy as sp
    import numpy as np

    def is_matrix(expr):
        """
        判断输入是否为矩阵或可以转换为矩阵的形式。

        参数:
        expr: 输入的表达式,可以是 SymPy 矩阵、列表或其他类型。

        返回:
        如果输入是矩阵或可以转换为矩阵,则返回 SymPy 矩阵对象;否则返回 None。
        """
        try:
            result = None

            # 如果输入已经是 SymPy 的 MutableDenseMatrix 类型,直接返回
            if isinstance(expr, sp.MutableDenseMatrix):
                result = expr
            # 如果输入是列表,尝试将其转换为 SymPy 矩阵
            elif isinstance(expr, list):
                result = sp.Matrix(expr)
            else:
                pass

            return result

        except Exception as e:
            print(f"{e}")
            return None

    def autoreg_matrix_generation(input_str):
        """
        生成自回归模型的自变量矩阵。

        参数:
        input_str: 输入的字符串,格式为 (矩阵, 滞后阶数 k)。

        返回:
        如果输入有效,返回生成的自变量矩阵(SymPy 矩阵对象);否则返回错误信息。
        """
        try:
            # 将输入字符串解析为 SymPy 表达式
            expr = sp.sympify(input_str)

            # 检查输入是否为元组且长度为 2
            if isinstance(expr, tuple) and len(expr) == 2:
                # 检查第一个元素是否为矩阵
                if (sp_matrix := is_matrix(expr[0])) is not None:
                    # 将矩阵展平为一维数组
                    y = np.ravel(sp_matrix)
                else:
                    return f"输入错误: {input_str}"

                # 获取滞后阶数 k
                k = int(expr[1])
                n = len(y)

                # 检查滞后阶数 k 是否小于时间序列长度
                if k >= n:
                    return f"滞后阶数 k 必须小于时间序列长度"

                # 初始化自变量矩阵 X 和因变量向量 y_shifted
                X = np.zeros((n - k, k + 1))
                y_shifted = np.zeros(n - k)

                # 填充自变量矩阵 X 和因变量向量 y_shifted
                for i in range(k, n):
                    X[i - k, 0] = 1  # 常数项
                    for j in range(1, k + 1):
                        X[i - k, j] = y[i - j]  # 滞后值
                    y_shifted[i - k] = y[i]  # 因变量值

                # 将自变量矩阵转换为 SymPy 矩阵
                A = sp.Matrix(X)
                return A
            else:
                return f"输入错误: {input_str}"

        except Exception as e:
            return f"错误: {e}"

    def main():
        """
        主函数,用于演示 autoreg_matrix_generation 函数的使用。
        """
        # 示范代码
        input_examples = [
            "([[1, 2, 3, 4, 5]], 2)",  # 矩阵输入,滞后阶数 2
            "([[1, 2, 3]], 1)",  # 矩阵输入,滞后阶数 1
            "([[1, 2, 3, 4]], 4)",  # 滞后阶数等于时间序列长度(错误)
            "([[1, 2, 3]], 0)",  # 滞后阶数为 0(错误)
            "invalid_input"  # 无效输入
        ]

        for input_str in input_examples:
            print(f"输入: {input_str}")
            result = autoreg_matrix_generation(input_str)
            print(f"结果: {result}\n")

    if __name__ == "__main__":
        main()