![](/img/trans.png)
[英]How to use sympy.latex and sympy.sympify to produce unevaluated parameterized expression fr'\frac{{3}}{{{i}}}'?
[英]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.