簡體   English   中英

如何讓 sympy.sympify 使用預定義的符號?

[英]how to let sympy.sympify use predefined symbols?

很容易理解

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 不知道x作為符號,就像sympy.sin(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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM