用组合评估代数表达式

时间:2018-04-13 21:33:03

标签: python math algebra

我需要帮助评估表达式。我刚刚启动它但是对于下一个加上我正在使用的所有for循环而言似乎没有必要。它有总和,产品和组合:

a complicated mathematical equations

我尝试的是不完整的,我认为不准确。我尝试了几个,但我现在可以想出来。我还没有分母。

i = 10
N = 3.1
j = []
for x in range(1, i + 1):
    for y in range(1, i):
        for z in range(1, n - i):            
            l = N * y * z
            j.append(l)
            ll = sum(j)

感谢任何帮助。我希望能够理解它,以便我可以做更复杂的例子。

1 个答案:

答案 0 :(得分:1)

以下是一些提示。如果您尝试并且仍然卡住,请寻求更多帮助。

首先,您知道该表达涉及"组合,"也被称为"二项式系数。"所以你需要一个计算这些的例程。 Here is a question有关如何计算这些数字的多个答案。简而言之,您可以使用scipy包或使用Python的factorial函数或使用迭代的自己的例程。

接下来,您会看到表达式涉及sums和products,并且被写为单个表达式。 Python有一个sum函数,它可以处理生成器表达式(以及列表和集合生成器以及其他迭代)。如果您知道如何设置这样的表达式,那么从数学到Python的转换会更容易。如果您不理解这些生成器/可迭代物以及如何对它们求和,请对此主题进行研究。这种方法不是必需的,因为你可以使用循环而不是生成器,但这种方法会更容易。学习,直到你能理解一个表达式(包括为什么range中的最终数字已添加1),例如

sum(N * f(x) for x in range(1, 5+1))

最后,你的表达式有产品,但Python没有内置的方法来获取可迭代的产品。这是Python 3中的这样一个函数。

from operator import mul
from functools import reduce

def prod(iterable):
    """Return the product of the numbers in an iterable."""
    return reduce(mul, iterable, 1)

所有这些,你想要的表达式看起来像这样(你需要用更有用的东西替换...来完成这项工作):

numerator = sum(N * prod(... for y in range(1, 1+1)) for x in range(1, 5+1))
denominator = prod(y + N for y in range(1, 5+1))
result = numerator / denominator

请注意,您的最终结果是N

的函数