取具有未知变量的阶乘的Sigma(使用sympy?)

2024-09-28 19:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

再见

我试图为下面的等式写一个函数:

Eurlang B

其中B和N是给定的,我求A

我一直在读,似乎sympy是一种方法,所以我开始声明已知的变量,但是当涉及到阶乘的sigma表示法时,我不知道如何处理它,因为A是未知的。

我想到的是:

from sympy import Eq, var, solve
from math import *

A = var('A')
channels = raw_input("Enter the number of channels: ")
#GOS = raw_input("Enter GOS: ")

Sigma = A
for i in range(0,channels+1):
  Sigma += (A**i / factorial(i))

# equation = Eq((A**channels / factorial(channels)) / Sigma) 
# print solve(equation)

这给了我一个错误TypeError: cannot concatenate 'str' and 'int' objects

这对我来说是有道理的,但我对sympy缺乏了解,使我无法想出如何解决它。

编辑:再看看周围,我把代码编辑成这样:

^{pr2}$

现在我得到NameError: name 'i' is not defined

提前谢谢。


Tags: fromimport编辑inputrawvarsigmaeq
2条回答

首先,错误(名称'i'未定义)是因为您没有定义它。所以你需要给i一个初始值

第二,我试着让你的程序运行。使用以下代码获得无错误解决方案:

from sympy import *

A = symbols('A')
channels = raw_input("Enter the number of channels: ")
GOS = raw_input("Enter GOS: ")

# note that I convert the string 'channel' to an int
# convert to float if channel could also be a floating number
channels = int(channels) 
Sigma = A
for i in range(0,channels+1):
    Sigma += (A**i / factorial(i))
print Sigma

结果

输入:通道=3,GOS=1

输出:A**3/6 + A**2/2 + 2*A + 1

编辑:出于兴趣,我开始进一步研究您的问题(也因为我意识到这个问题不会仅仅因为数据类型问题而停止)。 求解函数有2个输入,方程和符号要计算。 它解出方程==0。所以必须从方程中减去变量B。(我假设输入的GOS是函数中的B变量)

^{pr2}$

运行上面的代码行(将它们添加到代码下)得到以下输出:

A**3/6 + A**2/2 + 2*A + 1
[-2 - sqrt(2), -2 + sqrt(2)]

我必须注意的是,如果GOS不与函数相交,它会给出带有附加参数I(大写I,可能表示假想I)的大结果。 我希望这有助于解决你的问题。在

也可以使用summation函数在SymPy中执行求和

i = symbols('i')
summation(A**i/factorial(i), (i, 0, N)

另一个注意事项:您从Sigma = A开始,这意味着您的最终结果是A + ΣA^i/i!,而不是{}(您可以在@Petrus1904的答案的输出中看到2*A而不是{})。如果要使用循环计算求和,则应将变量初始化为0。在

相关问题 更多 >