我一直在使用SymPy將表達式轉換爲latex(然後由Matplotlib呈現)。例如SymPy自動處理表達式
from sympy import latex, sympify
from sympy.abc import x
str = '2*x + 3*x'
TeX = latex(sympify(str))
問題是它自動處理表達式,所以2 * x + 3 * x會自動變成5 * x等;這不是我想要的(不要問!)。
我一直在使用SymPy將表達式轉換爲latex(然後由Matplotlib呈現)。例如SymPy自動處理表達式
from sympy import latex, sympify
from sympy.abc import x
str = '2*x + 3*x'
TeX = latex(sympify(str))
問題是它自動處理表達式,所以2 * x + 3 * x會自動變成5 * x等;這不是我想要的(不要問!)。
Sympy的Add
類處理符號的添加。您可以提供關鍵字參數來停止自動收集條款。
from sympy import Add
from sympy.abc import x
eq = Add(2*x, 3*x, evaluate=False)
# this will print: 2*x + 3*x
print eq
根據您對phimuemue的評論的回覆,這可能不是您想要的。
我的目標是讓學齡學生可以輸入程序將呈現的數學表達式。所以,是的,這不是我所需要的,但非常感謝您的幫助! – Geddes
實際上,當你調用sympify(str)時,它會嘗試解析表達式並將它們轉換爲默認類。在這種情況下,Add(2*x,2*x)
將被調用(默認參數evalaute = True),所以這成爲5*x
。如果你想避免它要麼你必須調用Add(2*x,3*x,evaluate=False)
或使用一些全局變量和初始化檢查AssocOp類的方法在覈 - > operation.py
我這樣做
try:
import __builtin__
evaluate_expr=__builtin__.evaluate_expr
except AttributeError ,ex:
pass
if ((not options.pop('evaluate', True)) or (evaluate_expr==False)) :
* *注意 - sympy使用緩存功能,所以如果你用gloabl變量evalute=True
調用相同函數(例如:sympy("2*x+3*x")
)兩次.1次,第二次調用evaluate=False
。在這兩種情況下,因爲緩存,你會得到相同的結果。 所以你需要在core-> expr類中更新像(add,mul)這樣的方法。類似下面
def __add__(self, other):
#simplifychange:
evaluate_expr=self.get_evaluate()
return Add(self, other,evaluate=evaluate_expr)
但我會建議它會更好,如果你不使用評估=假。 sympy的行爲將會發生巨大的變化。像我的問題正面臨着這個post
很高興知道sympy依靠自動處理來測試平等!省時間! – JeromeJ
>>>進口重新
>>>應用re.sub(「(^ | [\(\ [\ {\ + \ - \ */\ :=')(\ - ?[0-9] * \。?[0-9] +)「,」\\ 1Dummy('\\ 2')「,'2 * x + 3 * x')
「假( '2')* X +假( '3')* X」
>>>的eval(_)
2⋅x+3⋅x
>>>乳膠(_)
「2×3 + X」
也許你應該只是複製原始的字符串... – phimuemue
我真正想要的方程真分數線,根符號渲染等等,謝謝你的! – Geddes
所以你只是想排版?在這種情況下,像SymPy這樣的CAS可能並不合適......也許[某種LaTeX公式編輯器](http://www.google.com/search?q=latex+equation+editor)?如果這不是你想要的,你可以編輯你的問題更具體嗎? – Simon