簡體   English   中英

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 的出色解決方案改編為:

  1. 每次使用不同的隨機數測試數值相等 N 次以獲得更自信的診斷
  2. 當一對表達式僅通過數字測試但未通過符號相等測試時警告用戶。

例如:

相等性檢驗示例

希望它可以證明是有用的:

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.

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