簡體   English   中英

如何在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)以獲得所需的方程形式。 不幸的是,不能直接在Equation上調用as_real_imag但您可以執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM