python - 将字符串转换为数学函数: "name sint is not defined"

标签 python string function sympy symbols

我有一个字符串格式的函数f(t,u,v);例如't^2 * sint + u*(20 + t) + v*t'

如何解决这个问题?

我尝试这样做:

t = Symbol('t')
u = mu
v = mv
sol = eval(f)

但我收到错误消息 name 'sint' is not Defined

最佳答案

使用eval并不是最好的方法。 SymPy parser具有允许使用 t^2 (称为 convert_xor)和 sin t (称为 implicit_application)等内容解析字符串的选项>)。这是一个例子:

from sympy.parsing.sympy_parser import parse_expr, standard_transformations, implicit_application, convert_xor
transformations = standard_transformations + (implicit_application, convert_xor)
f = parse_expr('t^2 * sin t + u*(20 + t) + v*t', transformations=transformations)

现在 ft**2*sin(t) + t*v + u*(t + 20) 并且您可以正常使用它,例如示例

solve(f.subs({Symbol('u'): 4}), Symbol('v'))    # returns [-t*sin(t) - 4 - 80/t]

您可能需要引入 u, v, t = Symbols('u v t') 以便更轻松地访问这些符号。

不幸的是,sint 不会被识别为 sin(t);空间的缺乏是致命的。这必须进行预处理,可能使用正则表达式。例如,

import re
s = re.sub(r'\bsin', 'sin ', 't^2 * sint + u*(20 + t) + v*t')

在每个“sin”之后留一个空格(额外的空格不会造成伤害)。

关于python - 将字符串转换为数学函数: "name sint is not defined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49987329/

相关文章:

python - 测试 Python 中获取输入的不同方法的性能

string - squeak(smalltalk)如何使用方法 `findSubstring: in: startingAt: matchTable:`?

javascript - 用动态空白比较两个字符串的最快方法?

c - 函数范围和递增参数

Python:调用有延迟的函数,而不减慢主循环

python - 迭代一个大数组,用大小相同但不同的较小数组填充它

蟒龟 : trigger function on any key pressed

c++ - 如何将 String 传递给 const char * 从 VB.NET 到用 C++ 编程的 DLL

javascript - 访问 javascript 中的内部函数

python - 父/子数据库包含循环引用