![](/img/trans.png)
[英]Comparing symbolic mathematical expressions with Python using Sympy
[英]Sympy - Comparing expressions
有沒有辦法檢查兩個表達式在數學上是否相等? 我預計tg(x)cos(x) == sin(x)
到 output True
,但它輸出False
。 有沒有辦法與 sympy 進行這樣的比較? 另一個例子是(a+b)**2 == a**2 + 2*a*b + b**2
令人驚訝地也輸出False
。
我發現了一些類似的問題,但沒有一個涵蓋這個確切的問題。
有沒有辦法檢查兩個表達式在數學上是否相等? 我期望tg(x)cos(x) == sin(x)
輸出True
,但輸出False
。 有沒有辦法與sympy進行這種比較? 另一個例子是(a+b)**2 == a**2 + 2*a*b + b**2
令人驚訝地還輸出False
。
我發現了一些類似的問題,但沒有一個涵蓋這個確切的問題。
有沒有辦法檢查兩個表達式在數學上是否相等? 我期望tg(x)cos(x) == sin(x)
輸出True
,但輸出False
。 有沒有辦法與sympy進行這種比較? 另一個例子是(a+b)**2 == a**2 + 2*a*b + b**2
令人驚訝地還輸出False
。
我發現了一些類似的問題,但沒有一個涵蓋這個確切的問題。
有沒有辦法檢查兩個表達式在數學上是否相等? 我期望tg(x)cos(x) == sin(x)
輸出True
,但輸出False
。 有沒有辦法與sympy進行這種比較? 另一個例子是(a+b)**2 == a**2 + 2*a*b + b**2
令人驚訝地還輸出False
。
我發現了一些類似的問題,但沒有一個涵蓋這個確切的問題。
如前所述, (expr1 - expr2).simplify()
或expr1.equals(expr2)
有時無法識別復雜簡化的表達式的相等性。 為了解決這個問題,使用隨機數對表達式進行數值評估可能構成相對安全的“蠻力”測試。 我已將@Okapi575 的出色解決方案改編為:
例如:
希望它可以證明是有用的:
import sympy as sp
import numpy as np
def check_equal(Expr1, Expr2, n=10):
# Minimal tests
if Expr1==None or Expr2==None:
return(False)
if Expr1.free_symbols!=Expr2.free_symbols:
return(False)
vars = Expr1.free_symbols
# Numeric (brute force) equality testing n-times
for i in range(n):
your_values=np.random.random(len(vars))
Expr1_num=Expr1
Expr2_num=Expr2
for symbol,number in zip(vars, your_values):
Expr1_num=Expr1_num.subs(symbol, sp.Float(number))
Expr2_num=Expr2_num.subs(symbol, sp.Float(number))
Expr1_num=float(Expr2_num)
Expr2_num=float(Expr2_num)
if not np.allclose(Expr1_num, Expr2_num):
print("Fails numerical test")
return(False)
# If all goes well so far, check symbolic equality
if (Expr1.equals(Expr2)):
return(True)
else:
print("Passes the numerical test but not the symbolic test")
# Still returns true though
return(True)
有沒有辦法檢查兩個表達式在數學上是否相等? 我期望tg(x)cos(x) == sin(x)
輸出True
,但輸出False
。 有沒有辦法與sympy進行這種比較? 另一個例子是(a+b)**2 == a**2 + 2*a*b + b**2
令人驚訝地還輸出False
。
我發現了一些類似的問題,但沒有一個涵蓋這個確切的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.