基于SymPy实现统计表达式两两相交次数的num_intersections函数
函数实现要求
- 函数名:
num_intersections(expressions) - 入参:字符串格式的表达式列表,所有表达式仅含1个未知数,列表长度始终大于1且无重复元素
- 返回值:列表,每个元素对应原位置表达式与其余所有表达式的相交总次数
- 可用工具:SymPy已以别名
sp导入当前环境,可直接调用parse_expr()方法解析表达式
实现思路
遍历所有不重复的表达式对,计算每对的交点数后分别累加到两个表达式对应的计数中,避免重复计算。交点数计算逻辑参考给定的参考方法,通过求解两个表达式相等的根的数量得到。
完整代码
from sympy.parsing.sympy_parser import parse_expr def check_intersection(exp1, exp2): """计算两个表达式的交点数量""" equ1 = parse_expr(exp1) equ2 = parse_expr(exp2) return len(sp.solve(equ1 - equ2)) def num_intersections(expressions): n = len(expressions) res = [0] * n # 遍历所有不重复的表达式对 for i in range(n): for j in range(i + 1, n): cnt = check_intersection(expressions[i], expressions[j]) res[i] += cnt res[j] += cnt return res
测试用例验证
测试用例1
输入:
print(num_intersections(["x ** 2 - 1", "0.25 * x - 1"]))
预期输出:[2, 2],运行结果与预期一致。
测试用例2
输入:
print(num_intersections(["x ** 2 - 1", "0.25 * x - 1", "x + 1"]))
预期输出:[4, 3, 3],运行结果与预期一致。
结果说明:二次函数与两个一次函数各有2个交点,合计4;每个一次函数和二次函数有2个交点、和另一个一次函数有1个交点,合计3。
内容的提问来源于stack exchange,提问作者Dreamer
相关产品推荐
相关产品推荐

