我正在尝试为包含复数的方程编写代码,并将其放入辛普森规则的函数中。
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 行
答案 0 :(得分:1)
在您的代码中,f
是一个复数。正如错误消息所说,您可以下标(在上面使用方括号)一个复数。因此,表达式 f[0:-1:2]
、f[1::2]
和 f[2::2]
是产生此错误的非法操作。似乎您认为 f
是一个复杂值的列表,而不是单个值?
如果您确实知道 f
是单个复数值,那么我能想到的唯一操作就是使用 f.real
和 f.imag
提取实部和虚部.