使用Python SymPy指定区间求解三角函数交点的报错修复方法
问题修复方案
错误原因
报错核心是nsolve函数不支持直接传入SymPy逻辑条件(And(0 < x, x < pi/2))作为搜索参数,同时原代码没有把输入的字符串方程转换为SymPy可识别的表达式,也会触发后续运算错误。
修复思路
- 用
sympify()将用户输入的字符串方程转换为SymPy表达式 - 区间内求根可以选择两种可行方案:
- 方案1:给
nsolve传入区间中点作为初始猜测值,nsolve会在初始值附近搜索根 - 方案2:用
solveset直接指定求解区间,更适合固定区间的三角函数求根
- 方案1:给
修复后完整代码
import mpmath from IPython.display import display, Latex from sympy import * init_printing(pretty_print=True) a, b, c, d, x, y, z = symbols('a b c d x y z') # 输入方程后转换为SymPy表达式 Equation1 = sympify(input('Enter the first equation: ')) Equation2 = sympify(input('Enter the second equation: ')) # 求解区间0<x<pi/2内的根,两种方案二选一即可 # 方案1:用nsolve,传入区间中点pi/4作为初始猜测值 solve_trig = nsolve(Equation1 - Equation2, x, pi/4) # 方案2:用solveset直接限定求解区间,更稳妥 # solve_trig = solveset(Equation1 - Equation2, x, Interval.open(0, pi/2)).evalf().pop() # 输出保留三位小数的结果 print(f"{solve_trig:.3f} radians")
运行测试
当输入第一个方程为tan(x),第二个方程为cos(x)时,输出结果为:
0.666 radians
注意事项
输入方程时需要符合SymPy的语法规范,三角函数、圆周率直接写tan()、cos()、pi即可,不需要额外加前缀。
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

