如何在 sympy 中将一个指数复方程扩展为两个三角方程?
How to expand one exponential complex equation to two trigonometric ones in sympy?
我有一个有两个未知数的指数方程,比如说:
y*exp(ix) = sqrt(2) + i * sqrt(2)
我可以手动将其转换为三角方程组:
y * cos x = sqrt(2)
y * sin x = sqrt(2)
我怎样才能在 sympy 中自动完成它?
我试过这个:
from sympy import *
x = Symbol('x', real=True)
y = Symbol('y', real=True)
eq = Eq(y * cos(I * x), sqrt(2) + I * sqrt(2))
print([e.trigsimp() for e in eq.as_real_imag()])
但只有两个相同的方程式,除了一个前面有“re”,另一个前面有“im”。
您可以调用方法 .rewrite(sin)
或 .rewrite(cos)
以获得所需形式的方程。不幸的是,as_real_imag
不能直接在 Equation
上调用,但您可以这样做:
from sympy import *
def eq_as_real_imag(eq):
lhs_ri = eq.lhs.as_real_imag()
rhs_ri = eq.rhs.as_real_imag()
return Eq(lhs_ri[0], rhs_ri[0]), Eq(lhs_ri[1], rhs_ri[1])
x = Symbol('x', real=True)
y = Symbol('y', real=True)
original_eq = Eq(y*exp(I*x), sqrt(2) + I*sqrt(2))
trig_eq = original_eq.rewrite(sin) # Eq(y*(I*sin(x) + cos(x)), sqrt(2) + sqrt(2)*I)
eq_real, eq_imag = eq_as_real_imag(trig_eq)
print(eq_real) # Eq(y*cos(x), sqrt(2))
print(eq_imag) # Eq(y*sin(x), sqrt(2))
(为了直接调用方法 as_real_imag
而使用表达式(隐式理解为 0)而不是方程式,例如 eq.lhs - eq.rhs
,您可能还会有更多运气)
我有一个有两个未知数的指数方程,比如说:
y*exp(ix) = sqrt(2) + i * sqrt(2)
我可以手动将其转换为三角方程组:
y * cos x = sqrt(2)
y * sin x = sqrt(2)
我怎样才能在 sympy 中自动完成它?
我试过这个:
from sympy import *
x = Symbol('x', real=True)
y = Symbol('y', real=True)
eq = Eq(y * cos(I * x), sqrt(2) + I * sqrt(2))
print([e.trigsimp() for e in eq.as_real_imag()])
但只有两个相同的方程式,除了一个前面有“re”,另一个前面有“im”。
您可以调用方法 .rewrite(sin)
或 .rewrite(cos)
以获得所需形式的方程。不幸的是,as_real_imag
不能直接在 Equation
上调用,但您可以这样做:
from sympy import *
def eq_as_real_imag(eq):
lhs_ri = eq.lhs.as_real_imag()
rhs_ri = eq.rhs.as_real_imag()
return Eq(lhs_ri[0], rhs_ri[0]), Eq(lhs_ri[1], rhs_ri[1])
x = Symbol('x', real=True)
y = Symbol('y', real=True)
original_eq = Eq(y*exp(I*x), sqrt(2) + I*sqrt(2))
trig_eq = original_eq.rewrite(sin) # Eq(y*(I*sin(x) + cos(x)), sqrt(2) + sqrt(2)*I)
eq_real, eq_imag = eq_as_real_imag(trig_eq)
print(eq_real) # Eq(y*cos(x), sqrt(2))
print(eq_imag) # Eq(y*sin(x), sqrt(2))
(为了直接调用方法 as_real_imag
而使用表达式(隐式理解为 0)而不是方程式,例如 eq.lhs - eq.rhs
,您可能还会有更多运气)