Запись разложения Холецкого на языке Сигма

Материал из Алговики
Перейти к: навигация, поиск

Для старой программы, использующей компактную укладку нижнего треугольника исходной матрицы в одномерный массив

      subroutine AFCER (a,n)
      integer      n,ip,iq,ir,ip1,j,i,k
      real a,x,sqrt
      dimension a(1)
      do 50 i=1,n
        do 50 j=1,i
           x = a( (i**2-i)/2+j )
           if (j.eq.1) goto 20
           do 10 k=1,j-1
              x = x - a( (i**2-i)/2+k ) * a( (j**2-j)/2+k )
 10        continue
 20        if (i.ne.j) goto 30
            a( (i**2+i)/2 ) = sqrt(x)
           goto 50
 30         a( (i**2-i)/2+j ) = x / a( (j**2+j)/2 )
 50   continue
      return
      end

выполнена запись графа алгоритма на языке Сигма в сжатом виде:

AFCER (A: R, N: II)
1| I, J | I: 1..N, J: 1..I
 2 = { A @ (I**2-I)/2+J }
3| I, J, K | I: 2..N, J: 2..I, K: 1..J-1
 4 = { K=1 : 2 @ I, J !: 4 @ I, J, K-1 } + { 8 @ I, K } * { 8 @ J, K }
5| I, J | 1#1, I=J
 6 = SQRT ({ I=1 : 2 @ I, J !: 4 @ I, I, I-1 })
7| I, J | 3#1, J: 1..I-1
 8 = { J=1 : 2 @ I, 1 !: 4 @ I, J, J-1 } / { 6 @ J, J }
.