首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要log2(x)在sympy.solve中使用的渐近函数

需要log2(x)在sympy.solve中使用的渐近函数
EN

Stack Overflow用户
提问于 2017-05-28 03:19:18
回答 1查看 1.8K关注 0票数 3

我需要接受字符串形式的用户输入,将其解析为一个渐近表达式,然后对变量进行求解。除log2(x)外,大多数用户允许的函数与渐近函数匹配,后者等价于渐近日志(x,2)。

我已经尝试过定义python函数的方法,它像前面提到的这里那样返回渐近函数。我也尝试过使用lambda定义一个渐近函数。这两种方法都可以在替换变量后获得表达式的值,但是如果调用sympy.solve来解决变量的问题,则会创建错误。例如:

代码语言:javascript
复制
import sympy
from sympy.parsing.sympy_parser import parse_expr
def log2(x):
    return sympy.log(x, 2)
t, k, y = sympy.symbols('t k y')
parsed = parse_expr("log2(t + k) + k - y")
sympy.solve(parsed, k)

引发NotImplementedError。使用lambda返回类似的结果。如果将log2(t+k)替换为log(t+k,2),则上述代码可以工作。我认为这是因为渐近函数是具有许多不同方法的对象,sympy.solve试图调用一个未在我的python函数中实现的方法。我正在寻找一种解决方案,它不需要为我的函数创建一个与日志的实现长度相同的类。是否有一种无需创建一个长类来处理每个可能的调用就可以识别和使用log2的方法?我可以以某种方式创建一个简短的类定义来传递对log(x,2)的任何方法调用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-28 13:30:51

解析器不会自动将给定字符串中的"log2“与您创建的函数匹配。您必须明确地告诉它,这就是使用local_dict={"log2": log2}所要做的事情。

或者将lambda直接放入local_dict:

代码语言:javascript
复制
import sympy
from sympy.parsing.sympy_parser import parse_expr
t, k, y = sympy.symbols('t k y')
parsed = parse_expr("log2(t + k) + k - y", local_dict={"log2": lambda x: sympy.log(x, 2)})
print(sympy.solve(parsed, k))

输出:[(-t*log(2) + LambertW(exp((t + y)*log(2))*log(2)))/log(2)]

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44223486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档