首页 文章

采用具有未知变量的阶乘的西格玛(使用sympy?)

提问于
浏览
1

美好的一天,

我正在尝试为以下等式编写函数:

Eurlang B

给出B和N的地方,我正在解决A.

我正在读书,看起来是同情的方式,所以我开始宣布已知的变量,但当涉及到阶乘的西格玛符号时,我不知道如何处理它,因为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

这对我来说很有意义,但是我缺乏对知识的了解让我无法弄清楚如何解决它 .

编辑:环顾四周,我编写了我的代码:

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

提前致谢 .

2 回答

  • 0

    首先,错误(名称'我'未定义)是因为你没有定义它 . 所以你需要给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)的大结果 . 我希望这有助于解决你的问题 .

  • 1

    您还可以使用 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 .

相关问题