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

字符串形式多变量数学函数求值报错:name 'sint' is not defined

解决SymPy中eval字符串函数时sint未定义的错误

这个问题我碰到过不少次,核心是你写的字符串里的函数语法和SymPy的要求不匹配,咱们一步步解决:

问题根源

SymPy里的正弦函数必须写成sin(t)的形式(函数名+括号包裹变量),而你字符串里的sint是把变量直接拼在函数名后面,Python会把它当成一个未定义的变量名,自然会报错name 'sint' is not defined。另外还要注意,SymPy里的幂运算用**而不是^,^在Python里是异或运算符,不是幂次。

具体解决方案

1. 直接修正函数字符串(推荐)

把你的原始字符串改成符合SymPy语法的格式:

from sympy import Symbol, sin

# 修正后的函数字符串:sint→sin(t),^→**
f = 't**2 * sin(t) + u*(20 + t) + v*t'

t = Symbol('t')
mu = 10  # 这里替换成你的mu实际值
mv = 5   # 这里替换成你的mv实际值
u = mu
v = mv

sol = eval(f)
print(sol)

2. 自动替换字符串(适合外部输入的情况)

如果你的函数字符串是从外部获取的,没办法手动修改,可以用字符串替换来批量修正语法:

from sympy import Symbol, sin

f_original = 't^2 * sint + u*(20 + t) + v*t'
# 替换sint为sin(t),同时把^替换为**
f_fixed = f_original.replace('sint', 'sin(t)').replace('^', '**')

t = Symbol('t')
mu = 10
mv = 5
u = mu
v = mv

sol = eval(f_fixed)
print(sol)

注意事项

  • 一定要确保导入了SymPy对应的函数(比如这里的sin),否则即使语法对了还是会报错。
  • 谨慎使用eval():如果你的字符串来自不可信的外部来源,eval()会带来安全风险,不过如果是你自己生成的字符串就不用担心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:09:06