我在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?
您将循环隐藏在求和代码中。避免这种情况的方法是将符号值放入分段中,用它生成表达式,然后替换为已知值。
首先,我输入具体值以表明分段求和将选择出正确的值
>>> 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
使用最终表达式,您可以稍后替换给定值,而无需循环(某种程度)——替换例程仍将循环遍历变量。