python 取未知变量的阶乘的Sigma(使用symsy?)

li9yvcax  于 2022-12-28  发布在  Python
关注(0)|答案(3)|浏览(203)

你好,
我试着写出下面方程的函数:

这里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
这对我来说是有道理的,但是我对症状的了解不足,使我无法找出如何修复它。
编辑:再看了一下,我将代码编辑为:

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
先谢了。

wztqucjr

wztqucjr1#

为了描述与页面顶部类似的总和,当我使用asmeurer的建议summation时,我得到了错误-TypeError:“Symbol”对象不可订阅。”导致此错误的可能原因是什么?我导入了下面的库。代码有一个延续部分,但为了避免混淆,我没有添加它。

import sympy as sympy 
from sympy import *       
from sympy import summation, symbols

class FQ(): 
def integrate(self):
   for k in range(1, self.Nt):
      i = symbols('i', integer=True)
      self.Sigma = summation(self.u[i+1][j], (i, 0, k - 1))

第二次尝试次数

def integrate(self, alpha, Nt, Nx, L):
    
    for k in range(1, self.Nt):   
      for j in range(1, self.Nx-1):  
        #define sum
        for i in range(1, self.Nt):
          Sigma = summation(u[i+1][j], (i, 0, k-1))
2nc8po8w

2nc8po8w2#

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

wqlqzqxt

wqlqzqxt3#

首先,错误(名称'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
编辑:出于兴趣,我开始进一步研究你的问题(也因为我意识到这个问题不会仅仅因为数据类型问题而停止)。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)的较大结果。

相关问题