因此,我的电路问题得到了这段代码(在spyder
上进行编码):
from sympy.solvers import solve
from sympy import Symbol, simplify
vo = Symbol("vo") #amplitude of output voltage
vr = Symbol("vr") #amplitude of voltage r
ir = Symbol("ir") #amplitude of R-current
ic = Symbol("ic") #amplitude of C-current
il = Symbol("il") #amplitude of L-current
r = Symbol("r") #resistance
omega = Symbol("omega") #angular frequency
c = Symbol("c") #capacitance
l = Symbol("l") #inductance
eq1 = (vr + vo - 1,
ir - ic - il,
vr - ir*r,
vo - ic/(1j*omega*c),
vo - 1j*omega*l*il)
sol = solve(eq1, (vo, vr, ir, ic, il))
vos = simplify(sol[vo])
print(vos)
print(sol[vo])
其输出为:
l*omega/(I*c*l*omega**2*r + l*omega - I*r)
l*omega/(I*c*l*omega**2*r + l*omega - I*r)
这是我当前电路的Vo
解决方案
然后我更改了eq1
的某些部分,因为我要再次解决另一条电路的Vo
,例如:
eq1 = (ir*(r + 1/ic + il) + vo - 1,
ir - ic - il - vr/r,
vr - ir*r,
vo - ic/(1j*omega*c),
vo - 1j*omega*l*il)
eq1
是ive更改的唯一部分,但是当我运行它时,出现此错误:
TypeError: list indices must be integers or slices, not Symbol
有人知道如何解决此问题吗?
答案 0 :(得分:1)
据我所知,唯一要为列表建立索引的地方是在您致电时:
sol[vo]
vo
是Symbol类型的对象,但是列表要求您使用整数(或切片),如错误所示。例如:
sol[5]
sol[1:3]
因此,您需要先将vo
转换为整数,然后才能使用它为列表建立索引。
答案 1 :(得分:1)
我添加了print(sol)
行。对于原始的eq1
,sol
是字典,而vo
是有效密钥:
0936:~/mypy$ python3 stack52932207.py
{vo: l*omega/(I*c*l*omega**2*r + l*omega - I*r), vr: I*r*(c*l*omega**2 - 1.0)/(I*c*l*omega**2*r + l*omega - I*r), ir: I*(c*l*omega**2 - 1.0)/(I*c*l*omega**2*r + l*omega - I*r), ic: I*c*l*omega**2/(I*c*l*omega**2*r + l*omega - I*r), il: -I/(I*c*l*omega**2*r + l*omega - I*r)}
l*omega/(I*c*l*omega**2*r + l*omega - I*r)
l*omega/(I*c*l*omega**2*r + l*omega - I*r)
对于较新的eq1
,sol
是一个空列表,因此使用vo
进行索引不再有效。
0937:~/mypy$ python3 stack52932207.py
[]
Traceback (most recent call last):
File "stack52932207.py", line 28, in <module>
vos = simplify(sol[vo])
TypeError: list indices must be integers or slices, not Symbol
我对sympy
和solve
不太熟悉,但是我猜想新的eq1
不再具有解决方案。无论如何,这就是您需要关注的重点-为什么solve
返回空列表?
请在询问错误时包括回溯。我们需要知道错误发生在哪里,而不仅仅是说什么。了解错误发生的位置后,可以添加诊断打印。在这种情况下,位置和错误消息都是相关的。