首页
学习
活动
专区
圈层
工具
发布

SymPy虚数
EN

Stack Overflow用户
提问于 2016-12-30 04:48:21
回答 2查看 17.7K关注 0票数 7

我正在编写一些SymPy代码来处理带有虚数的符号表达式。

首先,我想让它以x和y为实数,并找到其中x=iy的解。所以我可以这样做。

代码语言:javascript
复制
x, y = sympy.symbols("x y", real=True)  
print(sympy.solve([x-sympy.I*y]))

(SymPy solve接受一个值列表,所有值都必须为0。所以x-iy=0 => x=iy)。SymPy会正确地告诉我

代码语言:javascript
复制
[{x: 0, y: 0}]

然而,如果我用一种(理论上相同的)方式这样做:

代码语言:javascript
复制
x, y = sympy.symbols("x y")
print(sympy.solve([x-sympy.I*y, sympy.im(y), sympy.im(x)]))

现在SymPy告诉我

代码语言:javascript
复制
[{re(y): y, re(x): I*y, im(x): 0, x: I*y, im(y): 0}]

这在技术上是正确的,但并没有为我做好所有的事情。这只是SymPy中的一个限制,或者我可以通过这样约束复数x和y来让它给我x=y=0?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-31 00:42:33

由于SymPy比复数更擅长简化实数对,因此以下策略很有帮助:为实数/虚数部分设置实数变量,然后根据它们形成复数变量。

代码语言:javascript
复制
from sympy import *
x1, x2, y1, y2 = symbols("x1 x2 y1 y2", real=True)  
x = x1 + I*x2
y = y1 + I*y2

现在,x和y可以用作方程中的复变量。

代码语言:javascript
复制
sol = solve([x-I*y, im(y), im(x)])
print(x.subs(sol[0]), y.subs(sol[0])) 

输出:0 0

票数 7
EN

Stack Overflow用户

发布于 2018-06-13 12:48:33

下面是一个更具一般性的解决问题的示例。我使用了使用实际虚构字符将会有麻烦的提示,并使用collect_const()函数来执行缩减。

代码语言:javascript
复制
'''
Converts T to Pi Circuit Topology Symbolically
'''

from sympy import simplify, Symbol, pprint, collect_const

 # Use this for your imaginary symbol
j = Symbol('j')

# Circuit symbols
R = Symbol('R')
w = Symbol('w')
L = Symbol('L')
C = Symbol('C')

# Arbitrary Circuit Element Equations
R1 = 1 / (j*w*C)
R2 = R + j*w*L
R3 = R + j*w*L

# Circuit conversion equations
RN = R1 * R2 + R2 * R3 + R1 * R3 
RA = RN / R1
RB = RN / R2
RC = RN / R3

#Print the original circuit element equations
pprint(R1)
print("\n")
pprint(R2)
print("\n")
pprint(R3)

#Print the original solved equation, followed by the appropriately reduced equation
print("\nOriginal\t")
pprint(RA)
print("\nReduced\t")
pprint(collect_const(simplify(RA),j))

print("\nOriginal\t")
pprint(RB)
print("\nReduced\t")
pprint(collect_const(simplify(RB),j))

print("\nOriginal\t")
pprint(RC)
print("\nReduced\t")
pprint(collect_const(simplify(RC),j))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41386963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档