Текст подпрограммы и версий
aig2r_c.zip  aig2d_c.zip  aig2c_c.zip 
Тексты тестовых примеров
taig2r_c.zip  taig2d_c.zip  taig2c_c.zip 

Подпрограмма:  aig2r_c

Назначение

Обращение вещественной матрицы методом Жордана с выбором ведущего элемента по всей матрице.

Математическое описание

Заданная матрица А  n - го порядка приводится к единичной матрице Е последовательностью элементарных преобразований Жордана  L1, L2, ... LN  и матрицами перестановок Р и Q так, что

     LNLN-1 ... L1PAQ = E , 

при этом  А- 1 = QLNLN-1 ... L1Р.  Матрицы Р и Q осуществляют соответственно перестановку строк и столбцов матрицы А и обеспечивают стратегию выбора ведущего элемента по всей матрице.

В.В.Воеводин, Р.В.Петрина, Комплекс алгоритмов, основанных на преобразованиях типа Гаусса, в пакете линейной алгебры, Сб. "Численный анализ на ФОPТPАНе", вып.3, Изд-во МГУ, 1973.

Использование

    int aig2r_c (real *a, integer *s, integer *n)

Параметры

a - двумерный n на n массив, в котором задается исходная матрица; по окончании работы подпрограммы в массиве a запоминается вычисленная обратная матрица (тип: вещественный);
s - двумерный n на 2 массив, используемый подпрограммой как рабочий (тип: целый);
n - заданный порядок матрицы (тип: целый).

Версии

aig2d_c - обращение матрицы, заданной с удвоенной точностью, методом Жордана с выбором ведущего элемента по всей матрице.
aig2c_c - обращение комплексной матрицы методом Жордана с выбором ведущего элемента по всей матрице.

Вызываемые подпрограммы : нет

Замечания по использованию

1. 

В подпрограмме aig2d_c массив a имеет тип double.

2.  В подпрограмме aig2c_c массив a имеет тип complex.

Пример использования

int main(void)
{
    /* Initialized data */
    static float a[16] /* was [4][4] */ = { 7.9f,8.5f,4.3f,3.2f,5.6f,-4.8f,
                      4.2f,-1.4f,5.7f,.8f,-3.2f,-8.9f,-7.2f,3.5f,9.3f,3.3f };
    /* Local variables */
    extern int aig2r_c(float *, int *, int *);
    static int s1[8] /* was [4][2] */;
    int i__;

    aig2r_c(a, s1, &c__4);

    for (i__ = 0; i__ <= 12; i__+=4) {
           printf("\n %15.5e %15.5e %15.5e %15.5e \n",
                   a[i__], a[i__+1], a[i__+2], a[i__+3]);
    }
    return 0;
} /* main */


Результат: 

                   |  0.0505   0.0542   0.0062    0.0350 |
                   |  0.0518  -0.0846   0.0721  -0.0003 |
      a-1  =   | -0.0084   0.0432   0.0202  -0.1211 |
                   | -0.0497   0.0279   0.0790  -0.0577 |