在 python 代码中插入复杂函数

Inserting complex functions in a python code

我一直在尝试插入 $e^ix$ 作为矩阵元素。 主要目的是找到具有许多复杂函数作为元素的矩阵的特征值。任何人都可以帮助我如何插入它吗?我失败的尝试如下:

for i in range(0,size):
                    
            H[i,i]=-2*(cmath.exp((i+1)*aj))
            H[i,i+1]=1.0
            H[i,i-1]=1.0

'a' 是在程序的前面定义的。标记的错误表明未定义 aj。我认为使用 cmath 可以将复数表示为 (x+yj)。不幸的是,我想不出正确的使用方法。任何帮助将不胜感激

定义一个小型浮点数组:

In [214]: H = np.eye(3)
In [215]: H
Out[215]: 
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

创建复数:

In [216]: 1+3j
Out[216]: (1+3j)
In [217]: np.exp(1+3j)
Out[217]: (-2.6910786138197937+0.383603953541131j)

正在尝试将其分配给 H:

In [218]: H[1,1]=np.exp(1+3j)
<ipython-input-218-6c0b228d2833>:1: ComplexWarning: Casting complex values to real discards the imaginary part
  H[1,1]=np.exp(1+3j)
In [219]: H
Out[219]: 
array([[ 1.        ,  0.        ,  0.        ],
       [ 0.        , -2.69107861,  0.        ],
       [ 0.        ,  0.        ,  1.        ]])

现在创建一个复杂的 dtype 数组:

In [221]: H = np.eye(3).astype( complex)
In [222]: H[1,1]=np.exp(1+3j)
In [223]: H
Out[223]: 
array([[ 1.        +0.j        ,  0.        +0.j        ,
         0.        +0.j        ],
       [ 0.        +0.j        , -2.69107861+0.38360395j,
         0.        +0.j        ],
       [ 0.        +0.j        ,  0.        +0.j        ,
         1.        +0.j        ]])

编辑

对于值数组:

In [225]: a = np.array([1,2,3])
In [226]: np.exp(a+1j*a)
Out[226]: 
array([  1.46869394+2.28735529j,  -3.07493232+6.7188497j ,
       -19.88453084+2.83447113j])

In [228]: H[:,0]=np.exp(a+1j*a)
In [229]: H
Out[229]: 
array([[  1.46869394+2.28735529j,   0.        +0.j        ,
          0.        +0.j        ],
       [ -3.07493232+6.7188497j ,  -2.69107861+0.38360395j,
          0.        +0.j        ],
       [-19.88453084+2.83447113j,   0.        +0.j        ,
          1.        +0.j        ]])