Объект 'SYMBOL' не вызывается - PullRequest
0 голосов
/ 19 октября 2019

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

Это мой код:

from __future__ import division
from sympy import *

q, l, p = symbols('q, l, p')
x1, x2, x3, x4, x5, x6, x7 = symbols('x1, x2, x3, x4, x5, x6, x7')
c1, c2, c3, c4, c5, c6, c7 = symbols('c1, c2, c3, c4, c5, c6, c7')
c8, c9, c10, c11, c12, c13, c14 = symbols('c8, c9, c10, c11, c12, c13, c14')


a = 209 * q * l / 42 - p / 3
"TRECHO AB"
m1 = a * x1 - q * x1 ** 2 / 2
d1 = integrate(m1, x1) + c1
y1 = integrate(d1, x1) + c2

"TRECHO BC"
m2 = a * 2 * l + a * x2 - 2 * q * l(x2 + l)
d2 = integrate(m2, x2) + c3
y2 = integrate(d2, x2) + c4

"TRECHO CD"
m3 = a(3 * l + x3) - 2 * q * l(2 * l + x3) - q * x3 ** 3 / 6 * l
d3 = integrate(m3, x3) + c5
y3 = integrate(d3, x3) + c6

"TRECHO DE"
m4 = a(x4 + 6 * l) - 2 * q * l(x4 + 5 * l) - (9 * q * l / 2)(x4 + l)
d4 = integrate(m4, x4) + c7
y4 = integrate(d3, x4) + c8

"TRECHO FG"
m5 = a(x5 + 7 * l) - 2 * q * l(x5 + 6 * l) - (9 * q * l / 2)(x5 + 2 * l) - p * x5
d5 = integrate(m5, x5) + c9
y5 = integrate(d5, x5) + c10

"TRECHO GH"
m6 = a(x6 + 15 * l / 2) - 2 * q * l(x6 + 13 * l / 2) - (9 * q * l / 2)(x6 + 5 * l / 2) - p(x6 + l / 2) - 2 * q * x6(
    x6 / 2)
d6 = integrate(m6, x6) + c11
y6 = integrate(d6, x6) + c12

"TRECHO HI"
m7 = a(x7 + 19 * l / 2) - 2 * q * l(x7 + 17 * l / 2) - (9 * q * l / 2)(x7 + 9 * l / 2) - p(x7 + 5 * l / 2) - 4 * q * l(
    x7 + l) - (3 * q * x7 ** 2 / 2 * l)(x7 / 3)
d7 = integrate(m7, x7) + c13
y7 = integrate(d7, x7) + c14

print(
    "{},\n{},\n{},\n{},\n{},\n{},\n{},\n{},\n{},\n{},\n{},\n{},\n{},\n{}".format(d1, y1, d2, y2, d3, y3, d4, y4, d5, y5,
                                                                                 d6, y6, d7, y7))

Отслеживание:

Traceback (most recent call last):
  File "mecsolidos2.py", line 17, in <module>
    m2 = a * 2 * l + a * x2 - 2 * q * l(x2 + l)
TypeError: 'Symbol' object is not callable

Это та же ошибка, что и для m3 через m7: S IЯ пытался изменить m2 на другую константу, использовал m2 как m2.eval, но ничего из этого не получалось: S Меня бесило то, что для m1 это работало идеально

ps: извините за мой плохой английский

1 Ответ

0 голосов
/ 19 октября 2019

Если l () предназначена как функция, она должна быть где-то объявлена. Если вы хотите, в SymPy вы можете иметь функции без указания внутренних деталей, например, l = Function('l')(x). Больше подробностей в документации .

Если, наоборот, l(...) подразумевается просто как умножение (как это предусмотрено вашей декларацией символов и использованием l в качествескаляр в другом месте), умножение (*) должно быть записано явно.

Обратите внимание, что для оптимальной работы SymPy при объявлении символов помогает указать их тип. Например symbols(".....", real=True). Также может помочь указание того, является ли некоторая переменная всегда положительной, особенно когда речь идет о логарифмах или sqrt. См. документацию для более подробной информации о возможных типах предположений.

Кстати, если вы предпочитаете более слабый синтаксис, где символ умножения может быть опущен, а ^ может быть преобразовандо **, функции sympify() или parse_expr() могут быть интересны.

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