我不明白Givens旋转矩阵的系数在这里是如何编码的

时间:2019-04-09 20:25:27

标签: algorithm matrix fortran eigenvalue

我找到了这个fortran90代码,该代码使用Jacobi算法查找了实对称矩阵的特征值和特征向量。我了解一般概念,但是我不明白有3-4行。

下面是一段代码:

1   do while (b2.gt.abserr)
2    do i=1,n-1
3    do j=i+1,n
4       if (a(j,i)**2 <= bar) cycle  ! do not touch small elements
5        b2 = b2 - 2.0*a(j,i)**2
6        bar = 0.5*b2/float(n*n)
7    ! calculate coefficient c and s for Givens matrix
8        beta = (a(j,j)-a(i,i))/(2.0*a(j,i))
9        coeff = 0.5*beta/sqrt(1.0+beta**2)
10        s = sqrt(max(0.5+coeff,0.0))
11        c = sqrt(max(0.5-coeff,0.0))

因此,b2定义为非对角线条目的平方和; abserr是精度的阈值; bar是另一个阈值,用于获取我们要清零的绝对值的最大条目,而a(i,j)是初始矩阵的条目。

我不理解的是 9 10 11 < / strong>。在我阅读或观看的所有课程,视频,pdf等中,此处的系数coeff(大多数时间 t )从来没有这样定义。相反,它的定义类似于t = 1.0/(abs(beta) + sqrt(beta**2 + 1.0)),如果beta为负,则t = -t。因此,我也不确定 10 11 行,因为{{1} }和cs相关。

如果有人知道对称矩阵的Jacobi特征值方法并理解上面的代码,我将不胜感激。

0 个答案:

没有答案