You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的Sympy求解含三角函数的非线性方程组?

问题解决步骤

1. 先修正代码语法错误

你代码里的sym.solve((f, g)(x, y))是语法错误——(f, g)是元组,不能像函数一样调用(x, y)。正确的传参方式是直接把方程组元组传给solve:

import sympy as sym

x = sym.symbols('x')
y = sym.symbols('y')
f = sym.Eq(sym.sqrt(9-x**2), y)
g = sym.Eq(sym.tan(x), y)
# 修正传参方式
print(sym.solve((f, g), (x, y)))

但运行这段修正后的代码,sympy依然会返回空列表:因为这个方程组是超越方程组,不存在初等解析解,而solve函数主要用于求解代数方程,对这类带三角函数的超越方程无能为力。

2. 改用数值解法求近似解

既然没有解析解,我们可以用sympy的nsolve函数求数值近似解。首先明确解的范围:

  • 根号方程√(9-x²)=y限定了x∈[-3,3]且y≥0
  • tan(x)的定义域是x≠π/2 + kπ(k为整数),结合x的范围,有效区间是(-π/2, π/2)和(π/2, 3)
  • 由于y≥0,tan(x)必须非负,因此只有(0, π/2)区间内可能存在解((-π/2,0)内tan(x)为负,(π/2,3)内tan(x)也为负,均不满足y≥0)

完整数值求解代码

import sympy as sym

x = sym.symbols('x')
# 消去y,构造单变量方程
equation = sym.sqrt(9 - x**2) - sym.tan(x)

# 传入初始猜测值1,求解(0, π/2)内的解
solution_x = sym.nsolve(equation, x, 1)
solution_y = sym.sqrt(9 - solution_x**2)

print(f"数值解:")
print(f"x ≈ {solution_x.evalf(6)}")  # 保留6位小数
print(f"y ≈ {solution_y.evalf(6)}")

运行后会得到近似结果:

数值解:
x ≈ 1.26262
y ≈ 2.67298

内容的提问来源于stack exchange,提问作者Lou De Jesus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:40:22