首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SymPy求解包含Abs()操作的复杂系统

使用SymPy求解包含Abs()操作的复杂系统
EN

Stack Overflow用户
提问于 2020-05-16 08:27:45
回答 1查看 552关注 0票数 0

当试图使用SymPy求解这样的系统时(其中R2是实数Z3是虚数,其他变量都是复杂的):

代码语言:javascript
复制
I1, I2, I3, Z3 = symbols("I1, I2, I3, Z3", real = False)
R2 = symbols("R2", real = True)

f1 = I2 * R2 - 220
f2 = I3 * Z3 - 220
f3 = Abs(I1) - 4
f4 = Abs(I2) - 2
f5 = Abs(I3) - 3

solve([f1, f2, f3, f4, f5], [I1, I2, I3, R2, Z3])

我遇到了一个错误,比如:

代码语言:javascript
复制
NotImplementedError: solving Abs(I1) when the argument is not real or imaginary.

我去看了SymPy的文档,并确保Abs()函数能够返回复数的模块,而且如果所有变量都是真实的,那么它就工作得很好。

那么,为什么会出现这个错误呢?我该怎么解我的方程?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-16 11:54:42

在这种情况下,可以使用复数的Abs定义来获得解决方案:

代码语言:javascript
复制
_abs = Abs # save definition

Abs = lambda x: sqrt(re(x)**2 + im(x)**2)
I1, I2, I3, Z3 = symbols("I1, I2, I3, Z3", real=False)
R2 = symbols("R2", real = True)
f1 = I2 * R2 - 220
f2 = I3 * Z3 - 220
f3 = Abs(I1) - 4
f4 = Abs(I2) - 2
f5 = Abs(I3) - 3

eq=solve([f1, f2, f3, f4, f5], [I1, I2, I3, R2, Z3])

Abs = _abs # restore definition

这给了我们

代码语言:javascript
复制
[{
    re(I1): (I1**2 + 16)/(2*I1), 
    im(I1): I*(16 - I1**2)/(2*I1), 
    re(I2): (R2**2 + 12100)/(110*R2), 
    im(I2): I*(R2**2 - 12100)/(110*R2), 
    re(I3): (9*Z3**2 + 48400)/(440*Z3), 
    im(I3): I*(9*Z3**2 - 48400)/(440*Z3), 
    I2: 220/R2, 
    I3: 220/Z3}]

但我认为你需要3个额外的条件来明确地解决真实的和想象的成分。

f1你知道I2必须是真实的,所以im(I2) = 0所以R2 = sqrt(12100)。你还有其他两个条件吗?

也许solve拒绝处理Abs的复杂论点的原因就是这个原因:除非你知道它是真实的或想象的,否则你不会得到一个明确的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61833932

复制
相关文章

相似问题

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