有什么方法可以为代数表达式提供未声明的变量吗?

时间:2015-10-19 14:49:38

标签: python python-3.x

我有一个能够使用高斯消除法求解线性方程组的函数。

在增强矩阵无法唯一求解的情况下(由于一行零),而不是为自由变量t分配任意数字,我想使用未声明的变量t本身在其余的操作中。

我搜索了有关未声明变量的其他类似帖子,其中大多数都建议为其指定None的值。 但是,如果您尝试以代数方式操作它,那么这并不是我想要的,因为你最终会遇到TypeErrors:

t = None
4*t + 3*t

不给:7t

有可能实现这样的目标吗?

1 个答案:

答案 0 :(得分:2)

你需要使用像SymPy这样的东西来处理符号值。基本Python的问题是变量只是一个值的名称,并且本身不具有类型。 4*t + 3*t无法简化为7*t,因为根据t引用的值的类型,乘法可能不会分配(也就是说,4*t + 3*t != 7*t可能会{ 1}})。

这是一个非常人为的例子,它简单地演示了你在可以,在Python中,定义了一个不适合分配的类型。 (我使用__rmul__而不是__mul__只是为了允许3*t等人在你的例子中。)

class Foo(object):
    def __init__(self, name):
        self.name = name

    def __rmul__(self, x):
        return Foo(str(x) + self.name)

    def __add__(self, x):
        return Foo(str(self.name) + ' + ' + str(x.name))

    def __str__(self):
        return self.name

结果是两个不同的值:

>>> t = Foo('x')
>>> print 4*t + 3*t
4x + 3x
>>> print 7*t
7x
相关问题