Python中参数化的厄米矩阵的特征系统

时间:2020-03-04 22:25:03

标签: python scipy sparse-matrix lapack eigenvalue

假设我们对依赖参数t的埃尔米特矩阵h(t)的特征值和特征向量感兴趣。我的矩阵又大又稀疏,因此需要进行数值处理。

一种简单的方法是在离散参数值t_k处评估矩阵h(t_k)。是否可以根据“特征向量的特征”对特征向量和特征值进行排序?

让我通过以下简单示例(“ i代表虚部”)来说明“特征向量的特征”的含义。

h(t)= {{1,i t},{-i t,1}}

特征值是1-t和1 + t,具有对应的特征向量{-i,1}和{i,1}。因此,根据“特征向量特征”进行分类,特征值应在t = 0处交叉。但是,大多数特征求解器通过增加特征值来对其进行分类,从而将特征向量从负t转换为正t(请参见代码和输出图)。

import numpy as np
import scipy.sparse.linalg as sla
import matplotlib.pyplot as plt

def h(t):
    # parametrized hermitian matrix
    return np.array([[1, t*1j], [-t*1j, 1]])


def eigenvalues(t):
    # convert to tuple for np.vectorize to work
    return tuple(sla.eigsh(h(t), k=2, return_eigenvectors=False))

eigenvalues = np.vectorize(eigenvalues)

t = np.linspace(-1, 1, num=200)
ev0, ev1 = eigenvalues(t)

plt.plot(t, ev0, 'r')
plt.plot(t, ev1, 'g')
plt.xlabel('t')
plt.ylabel('eigenvalues')

plt.show()

output plot

想法 大多数特征求解器迭代地近似特征向量和特征值。通过将矩阵h(t_k)的本征系统作为对h(t_ {k + 1})的对角线化的初始猜测,输入求解器,可能会得到按“特征向量的特征”排序的结果。

是否可以通过scipy或更广泛地使用python来实现?最好将繁重的对角化工作委托给专用的编译库(例如scipy中的Lapack)。是否有合适的Lapack例程可能已经包装在scipy中?

是否有实现相同目的的替代方法?如何在python中实现?

0 个答案:

没有答案
相关问题