python矩阵对角化的条件_三对角对称稀疏矩阵的Python对角化

我有一个由Python代码计算的NxN对称的三对角矩阵,我想将它对角化。在

在具体的例子中,我处理的是N = 6000,但是矩阵可以变大。因为它是稀疏的,所以我假设最好的对角化方法是使用算法scipy.sparse.linalg.eigsh(),它在处理其他稀疏和对称矩阵(但不是三对角矩阵)时表现非常好。特别是,由于我只需要频谱的低端部分,所以我在函数中指定了k=2和{}。在

但是,在这种情况下,该算法似乎不起作用,因为经过大约20分钟的计算,我得到以下错误:ArpackNoConvergence: ARPACK error -1: No convergence (60001 iterations, 0/2 eigenvectors converged)

为什么会这样?这是一个与三对角矩阵的一些性质有关的问题吗?哪个Python(请,只有Python!)我能用一个有效的方法使矩阵对角化吗?在

以下是重现我的错误所需的最少代码:import scipy.sparse.linalg as sl

import numpy as np

dim = 6000

a = np.empty( dim - 1 )

a.fill( 1. )

diag_up = np.diag( a, 1 )

diag_bot = np.diag( a, -1 )

b = np.empty( dim )

b.fill( 1. )

mat = np.diag( b ) + diag_up + diag_bot

v, w = sl.eigsh(mat, 2, which = 'SM')

在我的个人电脑上,矩阵的构造需要364ms,而对角化得到报告的误差。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值