You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SymPy报错'Symbol' object is not callable 求助代码排查

解决SymPy中'Symbol' object is not callable错误

嘿,我一眼就看出你遇到的问题啦——这是Python里很容易踩的小坑:乘法符号*绝对不能省略!

错误原因

你定义的l、a、p这些都是SymPy的Symbol对象,在代码里像l(x2 + l)、a(3 * l + x3)这种写法,会被Python当成「调用名为l或a的函数」,但它们根本不是函数,所以才会抛出TypeError: 'Symbol' object is not callable的错误。

修正方案

所有你想表示「符号和括号里的表达式相乘」的地方,都必须显式加上*。我帮你把所有出错的地方都修正了,同时也调整了部分表达式的括号来避免优先级歧义,还顺手改了一个小笔误:

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"
# 修正:l(x2+l) → l*(x2+l)
m2 = a * 2 * l + a * x2 - 2 * q * l * (x2 + l)
d2 = integrate(m2, x2) + c3
y2 = integrate(d2, x2) + c4

"TRECHO CD"
# 修正:a(3l+x3)→a*(3l+x3),l(2l+x3)→l*(2l+x3),调整x³项的括号避免歧义
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"
# 修正:a(x4+6l)→a*(x4+6l),l(x4+5l)→l*(x4+5l),(9ql/2)(x4+l)→(9ql/2)*(x4+l)
# 笔误修正:原本的integrate(d3, x4)改成integrate(d4, x4)
m4 = a * (x4 + 6 * l) - 2 * q * l * (x4 + 5 * l) - (9 * q * l / 2) * (x4 + l)
d4 = integrate(m4, x4) + c7
y4 = integrate(d4, x4) + c8

"TRECHO FG"
# 修正:a(x5+7l)→a*(x5+7l),l(x5+6l)→l*(x5+6l),(9ql/2)(x5+2l)→(9ql/2)*(x5+2l)
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"
# 修正所有乘法省略的问题,调整x³项的括号
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( "{},{},{},{},{},{},{},{},{},{},{},{},{},{}".format(d1, y1, d2, y2, d3, y3, d4, y4, d5, y5, d6, y6, d7, y7))

小提示

在Python(包括SymPy)里,永远不要省略乘法符号,哪怕是符号和括号、符号和数字之间也不行,必须用*明确表示乘法关系——这和我们手写数学公式的习惯不一样,得多留意~

内容的提问来源于stack exchange,提问作者ldsm25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:28:58