用于"拟合"复数的 for 循环



我需要计算折射率类似ref_I=n+ik的东西,所以它是一个复数。然后,我将结果与给定的数据进行比较。但我不知道如何以有效的方式测试所有可能的复数组合。现在我只做真正的部分:

n = 0.1
step = 0.001
for i in range (1,8000):
calculation()
compare()
n = n + step

而n可以是在0.1和8之间的任何值,k可以是0-20。它们之间没有特殊的联系,所以每种组合都是允许的。有没有一种聪明的方法可以把复数放进去?还是我必须计算两者的每一个可能的组合?

查看numpy.linspacenumpy.meshgrid:

import numpy
lsp_re = numpy.linspace(0.1, 8, 8000)
lsp_im = numpy.linspace(0, 20, 20001)
re, im = numpy.meshgrid(lsp, lsp, copy=False)
matrix = 1j * im + re
for c in matrix.flat:
dosomething(c)

然而,通过这种方式,您可以获得8000×8000=64000000个组合,所以如果你担心数据在步骤发生的地方可能会有不同的表现,那么减少步骤或使用蒙特卡罗算法可能会更有效。

顺便说一句,如果你想让点是整数,不要提供整数作为范围,而是像<一些整数>+1:

>>> numpy.linspace(0, 10, 10)
array([  0.        ,   1.11111111,   2.22222222,   3.33333333,
4.44444444,   5.55555556,   6.66666667,   7.77777778,
8.88888889,  10.        ])
>>> numpy.linspace(0, 10, 11)
array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.])

最新更新