使用Sympy比较符号数学表达式和Python

时间:2017-10-18 18:09:14

标签: python sympy symbolic-math

我想检查哪些数学表达式是相等的。 我想用Python做到这一点我用Sympy尝试过。

我的想法是使用简化来减少表达式,使得相等的对将减少到相同的表达式。 然后我在我的两个for循环中将它们全部相互减去,并检查结果是否等于零。

不幸的是,没有减法导致零,这是非常不可能正确的。 我认为简化功能可能并不是我真正需要的。 是否有一个函数用于检查两个表达式在数学上是否确实相等?

到目前为止,这是我的代码:

from sympy import *

a = symbols ('a')
b = symbols ('b')
n = symbols ('n')
m = symbols ('m')

x1=simplify(log(a,n**(log(b,a))))
x2=simplify(((a**n)/(b**m))**(1/b))
x3=simplify(b**(n*log(a)))
x4=simplify(log(b,n))
x5=simplify(a**((n-m)/b))
x6=simplify(n*(log(a)+log(b)))
x7=simplify(log((a**n)*(b**n)))
x8=simplify(a**(log(b**n)))

L=[x1,x2,x3,x4,x5,x6,x7,x8]



for i in range (0 , 6):

    for k in range (i+1 , 7):

        print(L[i]-L[k])

2 个答案:

答案 0 :(得分:0)

检查函数是否相等的另一种方法是在几千点处评估它们并检查输出。

from sympy import *

def generateOutput(L, x):
    # x -> list of points to evaluate functions at (maybe randomly generated?)
    # L -> input list of functions
    # returns list of outputs of L[i] applied to x



a = symbols ('a')
b = symbols ('b')
n = symbols ('n')
m = symbols ('m')

x1=simplify(log(a,n**(log(b,a))))
x2=simplify(((a**n)/(b**m))**(1/b))
x3=simplify(b**(n*log(a)))
x4=simplify(log(b,n))
x5=simplify(a**((n-m)/b))
x6=simplify(n*(log(a)+log(b)))
x7=simplify(log((a**n)*(b**n)))
x8=simplify(a**(log(b**n)))

L=[x1,x2,x3,x4,x5,x6,x7,x8]

outputs = generateOutput(L)
# Compare outputs

答案 1 :(得分:0)

From the docs

Eq函数(来自sympy.core.relational)看起来就像你想要的那样。请注意,如果给出更复杂的参数,则必须simplify才能获得结果(请参阅链接中的最后一个代码示例)。

注意:那些for循环看起来不对。第一个只会通过索引0-5而第二个只通过i + 1到6,所以列表中的最后一个项目将被完全跳过。