如何正确使用分段求和中的值?

问题描述 投票:0回答:1

我在python中有一个sympy求和,我想将我的sympy符号当前的求和值添加到python中的一个变量中,这样它就可以使用数字来运行非符号函数。

我使用的代码是:

from sympy import symbols, summation, Piecewise, Eq

# Define the symbols
n = symbols('n', integer=True, nonnegative=True)
x = symbols('x')  # Example formula variable

# Define your formula (e.g., x = 2 * n)
def formula(count,symbol):
    first = count.to_bytes(32,byteorder='big')
    second = first.from_bytes(32, byteorder="big")
    third = second **2
    return third
# Define the number you're looking for (e.g., find first occurrence of 6)
target = 1

# Define a Piecewise condition to detect the first occurrence
piecewise_logic = Piecewise(
    (formula(0 + target ,n),Eq(n, target)),  # If the formula equals the target, use it
    (0, True)                        # Else, return 0
)

# Perform the summation (simulate finding the first occurrence)
result = summation(piecewise_logic, (n, 0, 10))  # Summing over range 0 to 10

print(result)

正如你在我的代码中看到的,sympy 求和是从 0 到 10。

在我的分段中,目标只是一个占位符,它应该是符号在 0 到 10 的总和中的任何值。

那么每次n改变其求和值时,它应该加0。

我不是在寻找任何循环,我希望一切都像这段代码一样即时。

所以基本上我的问题是如何在 n 的每一步使用求和的每个值并将其分段添加到 0?

python sympy
1个回答
0
投票

您将循环隐藏在求和代码中。避免这种情况的方法是将符号值放入分段中,用它生成表达式,然后替换为已知值。

首先,我输入具体值以表明分段求和将选择出正确的值

>>> from sympy import *
>>> var('x, y, z')
(x, y, z)

>>> p=Piecewise((1,Eq(x,2)),(2,Eq(x,3)),(0,True))
>>> summation(p,(x,0,4))
3

因此,当 x 为 2 时我们得到 1,当 x 为 3 时我们得到 2,总计为 3。x 上的循环通过求和透明地处理。现在我将使用 y 和 z 而不是 1 和 2。

>>> p=Piecewise((y,Eq(x,2)),(z,Eq(x,3)),(0,True))
>>> summation(p,(x,0,4))
y + z
>>> _.xreplace({y:1,z:2})
3

使用最终表达式,您可以稍后替换给定值,而无需循环(某种程度)——替换例程仍将循环遍历变量。

© www.soinside.com 2019 - 2024. All rights reserved.