豪斯霍德(Householder Reduction)转换成三对角形式(python,数值积分)

第三十一篇 豪斯霍德转换成三对角形式

三对角形式

三对角矩阵就是对角线、邻近对角线的上下次对角线上有元素,其他位置均为0的矩阵。

雅可比主对角化求特征值要求转化矩阵应该具有下面的性质
在这里插入图片描述
豪斯霍尔德技术要求选择p为
在这里插入图片描述
其中{w}是一个归一化的列向量,使其欧几里德范数等于单位,因此
在这里插入图片描述
例如,让
在这里插入图片描述
按照上面的乘积
在这里插入图片描述
然后可以得到
在这里插入图片描述
它具有下面的性质
在这里插入图片描述
为消去[A]在对角线外第一行的项,向量{w}应被取为
在这里插入图片描述
因此,假设[A]为3 × 3,对第一行的变换矩阵为
在这里插入图片描述
当乘积[P][A][P]被计算时,结果矩阵的第一行包含以下三项
在这里插入图片描述

在这里插入图片描述
上面方程的项可以写成
在这里插入图片描述
通过向量的点乘为点位1,得到
在这里插入图片描述
因此通过方程(1)后面两项的平方,再代换上面方程得到
在这里插入图片描述
然后可以写到
在这里插入图片描述
再取方程(2)的平方,然后把上面两个方程替换进去得到,
在这里插入图片描述
然后把向量写成用向量表示的形式
在这里插入图片描述
其中
在这里插入图片描述
于是,转化矩阵为
在这里插入图片描述
对于r的确定,根据之前的等式,应该选择r的符号与a12是相反的。
所以对于通常的第i行,{v}采取下面形式的向量
在这里插入图片描述
程序如下

#对称矩阵到三对角矩阵的豪斯霍德推导
import numpy as np
import B
n=4
v=np.zeros((n,1))
p=np.zeros((n,n))
a1=np.zeros((n,n))
a=np.array([[1,-3,-2,1],[-3,10,-3,6],[-2,-3,3,-2],[1,6,-2,1]],dtype=np.float)
print('对称矩阵到三对角矩阵的豪斯霍德推导')
print('系数矩阵A')
print(a[:])
for k in range(1,n-1):
    r=0
    for l in range(k,n):
        r=r+a[k-1,l]*a[k-1,l]
    r=r**0.5
    if r*a[k-1,k]>0:
        r=-r
    h=-1.0/(r*r-r*a[k-1,k])
    v[:]=0
    v[k,0]=a[k-1,k]-r
    for l in range(k+2,n+1):
        v[l-1,0]=a[k-1,l-1]
    p=np.dot(v,np.transpose(v))*h
    for l in range(1,n+1):
        p[l-1,l-1]=p[l-1,l-1]+1.0
    a1=np.dot(p,a)
    a=np.dot(a1,p)
print('转化后的主对角线')
for i in range(1,n+1):
    print('{:13.4e}'.format(a[i-1,i-1]),end='')
print()
print('转化后的非主对角线值')
for i in range(2,n+1):
    print('{:13.4e}'.format(a[i-2,i-1]),end='')

    
  

输出结果如下
在这里插入图片描述


版权声明:本文为seventonight原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。