类型错误:尝试对 sympy 求和时,“分段”对象不可迭代。分段结果

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

我正在 python 中使用 sympy 进行编码,并且尝试对元组进行一些计算,但是每次我尝试在下一个结果中使用上一个结果时,都会出现错误:

TypeError: 'Piecewise' object is not iterable.

到目前为止我使用的代码是:

from sympy import symbols, Piecewise,Eq,summation,Mod

def math_func(k):
    result = Piecewise(

        ((1,1), Eq(Mod(k,3),1)),  # Mod(k,3) does k % 3
        ((1,2), Eq(Mod(k,3),2)),
        ((3,3), Eq(Mod(k,3),3)),  # No change if k % 3 == 0
 
    )
    #print(result.args)

    result2 = Piecewise(
        (sum(result), Eq(Mod(k,3),1)),
        (sum(result), Eq(Mod(k,3),2)),
        (sum(result), Eq(Mod(k,3),3)),  # No change if k % 3 == 0
    # Default case to keep result unchanged
    )
    return result2

x = symbols('x')
total = summation(math_func(x), (x, 2, 2))
print(total)

当我运行这段代码时,它给了我上面所说的错误。问题是

Eq()
。它正在评估一个符号,当我执行
print(result.args)
时,它会分段返回结果中的所有节。自己尝试一下吧。

我需要以这种方式使用我的代码,因为这是评估符号的唯一方法,如果我这样做

k %3 == number
Mod(k,3) == number
它不起作用,它只适用于数字。

我不想要任何循环。有人可以告诉我如何修复此代码吗?

python sympy
2个回答
0
投票

total = summation(math_func(x), (x, 2, 2))
错了。 函数名称是
sum
,而不是
summation


0
投票

有一些事情可能是错误的。

  1. 你应该使用 sum() 而不是求和
  2. 你的分段表达应该是这样的: (1,条件) 其中条件是布尔表达式
  3. 你的函数设置方式是错误的,当你只使用 1 的结果时,现在有理由有两个结果部分。如果你想要两个结果部分,你必须在结果中指定它
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.