尝试在 np.sum 中使用复数时,为什么会收到消息“TypeError: 'complex' object is not subscriptable”?

时间:2021-02-17 16:58:14

标签: python

我正在尝试为包含复数的方程编写代码,并将其放入辛普森规则的函数中。

import numpy as np
import cmath as cmp
import matplotlib.pyplot as plt

wavelength = 0.000001 #meters
Apw = 0.00002 # meters Apw taken as apeture width
z = 0.02 # meters
N = 100
permittivity = 0.00000000000885418783
c =  299792458 # m/s
k = (2*cmp.pi)/wavelength
j = 0 + 1j
n = 100



x = np.linspace(-0.005, 0.005, n, 1.1)

def simps (N, k, Apw, x):
  S = 0
  h = Apw / N
  for i in range(0, N + 1):
    for xprime in range(0, N+1):
        xprime = Apw*xprime/N
        f =  cmp.exp(((j*k)/(2*z))*(x-xprime)**2)
    if (i != 0) and (i != n):
      f *= (2 + (2 * (i % 2)))
    S = h/3 * np.sum(f[0:-1:2] + 4*f[1::2] + f[2::2])
  return S

x = np.linspace(-0.005, 0.005, n, 1.1)

I = np.zeros([n])

for i in range(0,n):


    E_0 = simps(N, k, Apw, x[i])[0]
    I[i] = permittivity*c*(E_0 * cmp.conj(E_0)).real

其中 j 是复数 j = 0 + 1j 我真的不知道我所做的是否接近正确,导致错误的行是第 46 行和第 36 行

1 个答案:

答案 0 :(得分:1)

在您的代码中,f 是一个复数。正如错误消息所说,您可以下标(在上面使用方括号)一个复数。因此,表达式 f[0:-1:2]f[1::2]f[2::2] 是产生此错误的非法操作。似乎您认为 f 是一个复杂值的列表,而不是单个值?

如果您确实知道 f 是单个复数值,那么我能想到的唯一操作就是使用 f.realf.imag 提取实部和虚部.