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

Sympy求解非线性方程组出现未知符号'I'的技术咨询

问题:Sympy求解非线性方程组结果中的'I'符号含义

问题背景

我尝试用Sympy求解以下非线性方程组:

(a + x + tan(b /2) * r) / (a + m + tan(g /2) * r) = tan(pi - g)
g + b = 3/2* pi

执行求解代码后得到结果,但结果里出现了新符号'I',排除是单位矩阵的可能,想明确该符号的含义。

求解代码

from sympy import solve, symbols, pi, tan, Rational

a, x, b, g, r, m = symbols("a x b g r m")
half = Rational(1, 2)
eq1 = (a + x + tan(b * half) * r) / (a + m + tan(g * half) * r) - tan(pi - g)
rational = Rational(3, 2)
eq2 = g + b - rational * pi

solution = solve((eq1, eq2), b, g, dict=True)
print(solution)

输出结果

[{
  b: I*log(-sqrt((-a - I*a - I*m + r + I*r - x)/(a - I*a - I*m - r + I*r + x))) + 3*pi/2, 
  g: -I*log(-sqrt(-(a + I*a + I*m - r - I*r + x)/(a - I*a - I*m - r + I*r + x)))
}, 
{
  b: I*log((-a - I*a - I*m + r + I*r - x)/(a - I*a - I*m - r + I*r + x))/2 + 3*pi/2,
  g: -I*log(-(a + I*a + I*m - r - I*r + x)/(a - I*a - I*m - r + I*r + x))/2
}
]

我尝试用Eq运算符改写方程,结果一致。补充:当x=m=0时,已知g=b=135°(即3/4π弧度),相关可视化代码如下:

import numpy as np
import matplotlib.pyplot as plt

beta = np.linspace(0, 270, num=1000)
gamma = 270 - beta

beta_rad = beta * np.pi / 180.0
gamma_rad = gamma * np.pi / 180.0

A = 500 # 对任意A和R都成立! 
m = 0
dx = 0
R = 250

output = (A + dx + np.tan(beta_rad / 2) * R) / (
    A + m + np.tan(gamma_rad / 2) * R) - np.tan(np.pi - gamma_rad)

plt.plot(beta, output)

解答

在Sympy中,符号I代表虚数单位,对应数学中的i(满足I² = -1)。

出现虚数单位的原因是:Sympy在求解含tan、log这类超越函数的方程组时,会给出复数域内的通解。你补充的特殊情况(x=m=0时g=b=3π/4)是实数解,属于复数通解的一个分支。

代入x=m=0验证:将x=m=0代入解的表达式,利用对数与虚数的性质(如log(-1)=Iπ、sqrt(1)=1等),最终可化简得到b=g=3π/4,与已知结果完全一致。

内容的提问来源于stack exchange,提问作者SimonV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:35:24