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
相关产品推荐
相关产品推荐

