微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在python中交换两个运算符?

如何解决如何在python中交换两个运算符?

假设我有操作符 A 和操作符 B,例如作用于 f(x) = 2x。如何在 python 中创建一个函数,表示是否为 A(B(f(x))) == B(A(f(x)))?

这是我的尝试:

#Commutation: Creating a function that checks whether operators A and B commutate on some dummy function f(x) = 2*x
#[A,B](2x) =?= 0

def commutate(A,B):
    f = lambda x: 2*x
    if lambda x: A(B(f)) - B(A(f)) == 0:
        print('A and B commute!')
    else:
        print('A and B do not commute!')
         
A = lambda x: f(x)**2

B = lambda x: np.log(f(x))


commutate(A,B)

问题是我总是让运营商 A 和 B 通勤,即使给不通勤的运营商也是如此。我怀疑这可能与我无法在 python 中定义这样的运算符有关?

解决方法

一般来说,这是不可能的,基于 Rice theorem。因为您希望检查两段代码的非平凡属性,即该属性是可交换性的,而这里的一段代码意味着函数。因此,它证明决定“任何给定的 fg 函数是可交换的”是不可判定的。因此,您不能编写这样的函数来检查两个函数的可交换性。

,

在你的代码中有一行

if lambda x: A(B(f)) - B(A(f)) == 0:

在这一行中,您将生成一个 lambda,它在 f 的地址上调用运算符,而不是调用 f 的结果。此外,您没有调用在 if 语句中定义的 lambda,因此您正在检查 lambda 函数的地址是否为 True/False,这不是您要查找的。​​p>

Lambda 只是函数,但您可以测试运算符是否可交换特定值:

def commutate(A,B,value):
    f = lambda x: 2 * x
    if A(B(f(value))) == B(A(f(value))):
        print(f"A and B commute on value {value}!")
    else:
        print(f"A and B do not commute on value {value}!")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。