取具有未知变量的阶乘的 Sigma(使用 sympy?)
Take the Sigma of a factorial with unknown variable (using sympy?)
美好的一天,
我正在尝试为以下等式编写函数:
其中给出了 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 的了解不足使我无法弄清楚如何解决它。
编辑:环顾四周,我将代码编辑为:
from sympy import *
A = symbols('A')
channels = raw_input("Enter the number of channels: ")
GOS = raw_input("Enter GOS: ")
Sigma = summation(A**i / factorial(i), (i, 0,channels))
print Sigma
# equation = Eq((A**channels / factorial(channels)) / Sigma)
现在我得到了NameError: name 'i' is not defined
提前致谢。
首先,错误(name 'i' not defined)是因为你没有定义它。所以你需要给 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
编辑:出于兴趣,我开始进一步研究你的问题(也是因为我意识到这个问题不会仅仅因为数据类型问题而停止)。
Solve 函数有 2 个输入,方程式和要计算的符号。
它求解方程 == 0。因此必须从方程中减去变量 B。 (我假设输入的GOS是函数中的B变量)
equation = (A**channels / factorial(channels)) / Sigma
print(solve(equation-int(GOS), A))
运行使用上面的代码(将它们添加到代码下)给出了这些输出:
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!
而不是 ΣA^i/i!
(您可以在 @Petrus1904 的答案的输出中看到有一个2*A
而不是 A
)。如果您想使用循环来计算总和,您应该将变量初始化为 0。
美好的一天,
我正在尝试为以下等式编写函数:
其中给出了 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 的了解不足使我无法弄清楚如何解决它。
编辑:环顾四周,我将代码编辑为:
from sympy import *
A = symbols('A')
channels = raw_input("Enter the number of channels: ")
GOS = raw_input("Enter GOS: ")
Sigma = summation(A**i / factorial(i), (i, 0,channels))
print Sigma
# equation = Eq((A**channels / factorial(channels)) / Sigma)
现在我得到了NameError: name 'i' is not defined
提前致谢。
首先,错误(name 'i' not defined)是因为你没有定义它。所以你需要给 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
编辑:出于兴趣,我开始进一步研究你的问题(也是因为我意识到这个问题不会仅仅因为数据类型问题而停止)。 Solve 函数有 2 个输入,方程式和要计算的符号。 它求解方程 == 0。因此必须从方程中减去变量 B。 (我假设输入的GOS是函数中的B变量)
equation = (A**channels / factorial(channels)) / Sigma
print(solve(equation-int(GOS), A))
运行使用上面的代码(将它们添加到代码下)给出了这些输出:
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!
而不是 ΣA^i/i!
(您可以在 @Petrus1904 的答案的输出中看到有一个2*A
而不是 A
)。如果您想使用循环来计算总和,您应该将变量初始化为 0。