gpt4 book ai didi

python - 如何让 sympy.sympify 使用预定义符号?

转载 作者:行者123 更新时间:2023-12-01 08:54:47 26 4
gpt4 key购买 nike

很容易理解

from sympy import *

x = symbols('x', real=True)

y = sin(x)
dy = y.diff(x)
ddy = y.diff(x, 2)

print(y.subs(x, pi/2), dy.subs(x, pi/2), ddy.subs(x, pi/2), )

将输出1 0 -1

现在,如果 y 的表达式不是预先定义的,而是需要用户输入,例如

y = input('please input expression about x: ')
y = sympify(y)
dy = y.diff(x)
ddy = y.diff(x, 2)

但是如果用户再次输入sin(x)

print(y.subs(x, pi/2), dy.subs(x, pi/2), ddy.subs(x, pi/2), )

sin(x) 0 0

print(y.subs('x', pi/2), dy.subs('x', pi/2), ddy.subs('x', pi/2), )

1 0 0

所以 sympify 并不像 sympy.sin(x) 那样将 x 识别为符号。那么我们该如何解决呢?谢谢

最佳答案

这就是为什么sympify中有一个参数locals :

y = sympify(y, locals={'x': x})

如果您的 x 没有假设 real=True,则没有必要。如果符号具有相同的属性(名称和假设),则它们被视为相同。从字符串 sin(x) 获得的符号没有任何假设,例如它是真实的。所以 名称与您的 x 匹配,但假设不匹配。

另一种方法是不将用户限制为变量名称x;只需使用他们使用的任何符号即可。

y = sympify(y)
x = next(iter(y.free_symbols)) # get the first (and hopefully only) symbol in the formula
dy = y.diff(x)
# and so on

关于python - 如何让 sympy.sympify 使用预定义符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52850326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com