Найти - Пользователи
Полная версия: SymPy TypeError: 'Symbol' object is not subscriptable
Начало » Python для новичков » SymPy TypeError: 'Symbol' object is not subscriptable
1
jigan-laym@mail.ru
Из текстового файла по строкам считывается сумма (полученная в Maple)
-4.1054687503*sin(s)
+0.8437499978*sin(2.*s)
-11.07064825*sin(2.*s)*bb[1][2]*t^2
-16.60597234*sin(2.*s)*bb[1][2]*cos(1.154700539*t)
+0.1994711401*sin(2.*s)*cc[2][2]*t^2
+1.196826839*sin(2.*s)*t^4*bb[1][2]
+8.571640841*sin(2.*s)*t^4*bb[2][2]^3
+1.166042757*sin(2.*s)*bb[2][2]*sin(1.154700539*t)
-10.74295864*sin(2.*s)*t^3*bb[2][2]^2
+0.4774648284*sin(2.*s)*t^5*bb[1][2]^2
-115.7171511*sin(2.*s)*bb[2][2]^3*cos(1.154700539*t)
+6.445775169*sin(2.*s)*bb[1][2]^2*cos(1.154700539*t)
-0.4774648284*sin(2.*s)*t^4*bb[1][2]^2
- 0.7161972435*sin(2.*s)*t^4*bb[2][2]^2
+ 0.2992067100*sin(2.*s)*cc[2][2]*cos(1.154700539*t)
Как заставить питон воспринимать
 bb[1][2] 
как единую символьную переменную.
Другими словами как побороть ошибку “ TypeError: ‘Symbol’ object is not subscriptable ”.

В дальнейшем эту сумму надо будет возвести в четвертую степень и проинтегрировать.

Заранее премного благодарен.
py.user.next
jigan-laym@mail.ru
Другими словами как побороть ошибку
Для передачи кода или символов в точности используй тег code.
[code]
Тут пиши текст
[/code]
Вот так типа ☺
Genabox
а почему в вас после последнего плюсика и предпоследнего минусика по пробелу стоит
и єто все в ковычках в одином коде?

The convert command leaves this list unchanged as it can already be used with EvalFunction.
convert(,python)
если мапл это язык то нужнона этьом языке правильно формировать Ваш текстовый файл а потом пихать его в питон
EvalFunction
на мапл
jigan-laym@mail.ru
py.user.next
Спасибо!
Не обратил внимание на то, что существенная часть а именно
 bb[1][2]  
потерялись.
Именно на квадратные скобки питон и ругается.
jigan-laym@mail.ru
Genabox
В изначальном посте в силу не знания закралась ошибка.
Не обратил внимание на то, что существенная часть а именно
 bb[1][2]  
потерялись.
Именно на квадратные скобки питон и ругается.
В мапле все нормально работает только медленно, поэтому хочу на питоне попробовать.
Квадратные скобки возникают в силу того, что используются двойные ряды.
Откуда лишние пробелы не могу сказать.
Команда питона eval нормально их (пробелы, плюсы, минусы) интерпретирует, но когда дело доходит до квадратных скобой ай-ай-ай, нельзя.
Можно ли заставить питон воспринимать
 bb[1][2]  
как единое целое.

“и єто все в ковычках в одином коде? ”
Это все построчно читается из файла.
py.user.next
Заменил скобки, проинтегрировал по dt, вернул скобки.
  
>>> import sympy
>>> 
>>> text = """
... -4.1054687503*sin(s)
... +0.8437499978*sin(2.*s)
... -11.07064825*sin(2.*s)*bb[1][2]*t^2
... -16.60597234*sin(2.*s)*bb[1][2]*cos(1.154700539*t)
... +0.1994711401*sin(2.*s)*cc[2][2]*t^2
... +1.196826839*sin(2.*s)*t^4*bb[1][2]
... +8.571640841*sin(2.*s)*t^4*bb[2][2]^3
... +1.166042757*sin(2.*s)*bb[2][2]*sin(1.154700539*t)
... -10.74295864*sin(2.*s)*t^3*bb[2][2]^2
... +0.4774648284*sin(2.*s)*t^5*bb[1][2]^2
... -115.7171511*sin(2.*s)*bb[2][2]^3*cos(1.154700539*t)
... +6.445775169*sin(2.*s)*bb[1][2]^2*cos(1.154700539*t)
... -0.4774648284*sin(2.*s)*t^4*bb[1][2]^2
... - 0.7161972435*sin(2.*s)*t^4*bb[2][2]^2
... + 0.2992067100*sin(2.*s)*cc[2][2]*cos(1.154700539*t)
... """
>>> 
>>> textnew = text.replace('[', 'lb').replace(']', 'rb')
>>> 
>>> expr = sympy.sympify(textnew)
>>> 
>>> t = sympy.Symbol('t')
>>> 
>>> exprnew = sympy.integrate(expr, t)
>>> 
>>> out = str(exprnew).replace('lb', '[').replace('rb', ']')
>>> out
'0.0795774714*bb[1][2]**2*t**6*sin(2.0*s) - 0.09549296568*bb[1][2]**2*t**5*sin(2.0*s) + 5.58220504043603*bb[1][2]**2*sin(2.0*s)*sin(1.154700539*t) + 0.2393653678*bb[1][2]*t**5*sin(2.0*s) - 3.69021608333333*bb[1][2]*t**3*sin(2.0*s) - 14.3811938932506*bb[1][2]*sin(2.0*s)*sin(1.154700539*t) + 1.7143281682*bb[2][2]**3*t**5*sin(2.0*s) - 100.213992452289*bb[2][2]**3*sin(2.0*s)*sin(1.154700539*t) - 0.1432394487*bb[2][2]**2*t**5*sin(2.0*s) - 2.68573966*bb[2][2]**2*t**4*sin(2.0*s) - 1.00982264891798*bb[2][2]*sin(2.0*s)*cos(1.154700539*t) + 0.0664903800333333*cc[2][2]*t**3*sin(2.0*s) + 0.259120611703464*cc[2][2]*sin(2.0*s)*sin(1.154700539*t) - 4.1054687503*t*sin(s) + 0.8437499978*t*sin(2.0*s)'
>>>

Это на другом примере, более ясном
  >>> import sympy
>>> 
>>> text = """
... a[0] + b[1]*t
... """
>>> 
>>> textnew = text.replace('[', 'lb').replace(']', 'rb')
>>> 
>>> expr = sympy.sympify(textnew)
>>> 
>>> t = sympy.Symbol('t')
>>> 
>>> exprnew = sympy.integrate(expr, t)
>>> 
>>> out = str(exprnew).replace('lb', '[').replace('rb', ']')
>>> out
'a[0]*t + b[1]*t**2/2'
>>>
jigan-laym@mail.ru
py.user.next
Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB