【问题标题】:Summation of function in for loopfor循环中的函数求和
【发布时间】:2021-12-30 18:37:38
【问题描述】:

我是 python 新手,如果这个问题很琐碎,请多多包涵。我正在努力解决的问题是绘制一个由许多函数组成的函数,这些函数的“模式”数字都不同,我称它们为 i 和 k。我认为解决此类问题最有效的方法是 for 循环。

我的第一个猜测是使用这样的代码:

# Define vectors and lists
chi = sc.jn_zeros(0, order)
om = np.zeros((order, order))
P = [[0]*order]*order


for i, k in itertools.product(range(order), range(order)):
    om[i][k] = c*(np.sqrt(chi[i]/R)**2 + (pi*k/L))
    P[i][k] = lambda t: (N  np.sin(om[i][k] * t / 2)** 2 )/(2*om[i][k])**2)
print()

# sum up list of functions to one function
def p(t): 
return sum(sum(P, []))

# plot
t1 = np.arange(0.0, 5.0 * 10**(-9), 0.001*10**(-9))
plt.figure()
plt.plot(t1, p(t1))
plt.show()

但是,我总是得到错误:

in p return sum(sum(P, []))
    TypeError: unsupported operand type(s) for +: 'int' and 'function'

我的第二个猜测是避免使用列表,而是使用 for 循环,例如:

def p(t):
    return 0*t

    for i, k in itertools.product(range(order), range(order)):
        om[i][k] = c*(np.sqrt(chi[i]/R)**2 + (pi*k/L))
      

       def p(t):
       return p(t) + (np.sin(om[i][k] * t ) ** 2 / (2*(om[i][k]) ** 2)
      
print()

t1 = np.arange(0.0, 5.0 * 10**(-9), 0.001*10**(-9))
plt.figure()
plt.plot(t1, p(t1))
plt.show()

尽管如此,代码并没有产生情节。只有输出:

Process finished with exit code -1073741571 (0xC00000FD)

我还没有发现关于两个以上函数求和的问题。因此,如果有人可以参考类似的问题,或者是否有人可以分享有关我的代码中出现的错误的一些信息,我将不胜感激。我已经检查了变量向量(omega、chi、...)是否计算正确。提前致谢。

【问题讨论】:

  • 您在此处粘贴的代码没有正确缩进并包含语法错误(如return sum(sum(P[])),因此与产生错误的代码明显不同。请提供minimal reproducible example

标签: python function for-loop plot sum


【解决方案1】:

没有办法像这样组合一组函数。您只需要每次都运行循环。即使你确实结合了这些功能,最终效果仍然是一样的。

# Define vectors and lists
chi = sc.jn_zeros(0, order)
om = np.zeros((order, order))

for i, k in itertools.product(range(order), range(order)):
    om[i][k] = c*(np.sqrt(chi[i]/R)**2 + (pi*k/L))
print()

def p(t): 
    return sum( 
        (np.sin(om[i][k] * t / 2)** 2 )/(2*om[i][k])**2)
        for i, k in itertools.product(range(order), range(order))
    )

# plot
t1 = np.arange(0.0, 5.0 * 10**(-9), 0.001*10**(-9))
pt = [p(t) for t in t1]
plt.figure()
plt.plot(t1, pt)
plt.show()

【讨论】:

  • 这非常有效。谢谢!
猜你喜欢
  • 2017-01-23
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多