Ошибка типа: списочные индексы должны быть целыми или кусочками, а не символами - PullRequest
0 голосов
/ 22 октября 2018

Итак, я получил этот фрагмент кода для моей проблемы электрических цепей (кодирование на 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 - это единственная часть, которую я изменил, но когда я ее запускаю, появляется эта ошибка:

TypeError: list indices must be integers or slices, not Symbol

кто-нибудь знает, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Я добавил 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 возвращает пустой список?

И, пожалуйста, при запросе об ошибке включайте трассировку.Нам нужно знать, где происходит ошибка, а не только то, что говорится.Как только вы поймете, где произошла ошибка, вы можете добавить диагностические отпечатки.В этом случае и местоположение, и сообщение об ошибке были актуальны.

0 голосов
/ 22 октября 2018

Из того, что я вижу, единственное место, где вы пытаетесь проиндексировать список, это когда вы вызываете:

sol[vo]

vo - это объект типа Symbol, но списки требуют, чтобы выиспользуйте целые числа (или кусочки), как предполагает ошибка.Например:

sol[5]
sol[1:3]

Поэтому вам нужно преобразовать vo в целое число, прежде чем использовать его для индексирования списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...