Каковы элементы вектора поворота в устранении Гаусса-Иордана

В числовых рецептах на стр. 39 (стр. 4 в pdf) был предложен следующий алгоритм для нахождения стержня:

void gaussj(float **a, int n, float **b, int m)
/* Linear equation solution by Gauss-Jordan elimination,
   equation (2.1.1) above. a[1..n][1..n] is the input matrix.
   b[1..n][1..m] is input containing the m right-hand side vectors.
   On output, a is replaced by its matrix inverse, and b is
   replaced by the corresponding set of solution vectors.  */
{
   int *indxc,*indxr,*ipiv;
   int i,icol,irow,j,k,l,ll;
   float big,dum,pivinv,temp;
   indxc=ivector(1,n); indxr=ivector(1,n); ipiv=ivector(1,n);
   /* The integer arrays ipiv, indxr, and indxc are used for
      bookkeeping on the pivoting. */
   for (j=1;j<=n;j++) ipiv[j]=0;
   // This is the main loop over the columns to be reduced.
   for  (i=1;i<=n;i++) {
       big=0.0;
       // The following is the outer loop of the
       // search for a pivot element.
       for (j=1;j<=n;j++)
           if (ipiv[j] != 1)
               for (k=1;k<=n;k++) {
                   if (ipiv[k] == 0) {
                       if (abs(a[j][k]) >= big) {
                           big=abs(a[j][k]);
                               irow=j;
                               icol=k;

                       }
                   }
               }
       ++(ipiv[icol]);

       // ... THE REST OF THE CODE ... (complete code in the link)

Я не понимаю, почему в какой-то момент мы имеем ipiv[j] != 1 и двумя строками позже ipiv[k] == 0, И тогда в конце элемент вектора увеличивается. Какова семантика этого вектора?

Просто, чтобы расширить это, есть ли причина, по которой одна строка сравнивает элемент ipiv в 1 и через две строки он сравнивается с 0, Кроме того, последняя строка увеличивает элемент, а не просто устанавливает его в 1, Так что это просто отсутствие последовательности и стиля при написании кода, или элемент ipiv может принимать значения, отличные от 0 а также 1?

Примечание: я ранее разместил этот вопрос в math.stackexchange здесь. После обмена несколькими комментариями, я чувствую, что это больше относится здесь.

0 ответов

Другие вопросы по тегам