Lanczos过程 Python实现

import numpy as np
from sklearn.datasets import make_spd_matrix
def Lanczos(A,r,m):
    '''
    当A时对称正定矩阵时,上Hessenberg矩阵化为三对角阵
    :param r: 列向量 
    :param A: 矩阵
    :param m: 迭代次数
    :return: 返回一个标准正交基
    '''
    v = []
    n1 = A.shape[0]
    v0 = np.zeros(n1)
    v.append(v0)
    beta0 = 0
    beta = []
    beta.append(beta0)
    v1 = r / np.linalg.norm(r,2)
    v.append(v1)
    for j in range(m-1):
        z = np.dot(A,v[j+1])
        alpha = np.inner(v[j+1],z)
        z = z - alpha*v[j+1] - beta[j]*v[j]
        '''修正'''
        alpha = np.inner(v[j+1],z)
        z = z - alpha * v[j+1]
        betaj = np.linalg.norm(z,2)
        beta.append(betaj)
        if betaj == 0:
            break
        v2 = z / betaj
        v.append(v2)
    return v[1::]


A =make_spd_matrix(10, random_state=42)#随机生成对阵正定矩阵
m = 10
r = [3,9,1,9,7,6,5,9,10,7]
print(A)
print(Lanczos(A,r,m))


当A为对称正定矩阵时,Arnoldi过程可化简为Lanczos过程 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值