Текст подпрограммы и версий
as08r_c.zip , as08d_c.zip
Тексты тестовых примеров
tas08r_c.zip , tas08d_c.zip

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

Назначение

Нахождение частного решения неоднородной системы линейных алгебраических уравнений и фундаментальной системы решений соответствующей однородной системы методом Жордана с выбором главного элемента по строке.

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

Ищется частное решение неоднopoдной системы линейных алгебраических уравнений

(1)           B * U= b , 

и фундаментальная система решений соответствующей однородной системы

(2)           B * U = 0 , 

где В - прямоугольная матрица порядка (М - К) на М (ранг равен М - К), U,b - векторы длины М и (М - К), соответственно, 0 - нулевой вектор длины (М - К), - методом Жордана с выбором главного элемента по строке.

В.В.Воеводин, Численные методы алгебры. Теория и алгорифмы. Наука, М., 1966.

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

    int as08r_c (integer *m, integer *k, integer *m1, real *b,
            real *u, integer *irab)

Параметры

m - число неизвестных в системе уравнений (тип: целый);
k - ранг фундаментальной системы решений (2) (тип: целый); если k = 0, то ищется только частное решение неоднородной системы (1), причем это решение единственное;
m1 - число уравнений в системе (1) m1 = m - k (тип: целый);
b - вещественный двумерный массив размера m1 на (m + 1), в котором задается расширенная матрица системы (1), расписанная по столбцам; при этом вектор b размещается в следующих элементах массива b: b (1, m + 1), b (2, m + 1), b (3, m + 1),...
u - двумерный вещественный массив размера m на (k + 1), в первых k столбцах которого запоминается вычисленная фундаментальная система решений однородной системы (2), а в (k + 1) - м столбце - часное решение неоднородной системы (1); если k = 0, то массив u содержит только решение неоднородной системы;
irab - вектор длины m, используемый в подпрограмме как рабочий (тип: целый).

Версии

as08d_c - нахождение частного решения неоднородной системы линейных алгебраических уравнений, заданных с удвоенной точностью, и фундаментальной системы решений соответствующей однородной системы методом Жордана с выбором главного элемента по строке. При этом параметры b и u должны иметь тип double.

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

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

  При работе подпрограммы значения параметров m, k и m1 сохраняются.

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

Использование подпрограммы иллюстрируется на примере:

          x1 + 3*x2 + 5*x3 + 7*x4  =  -9
      2*x1 + 4*x2 + 6*x3 + 8*x4  =  10.

int main(void)
{
    /* Initialized data */
    static float b[10] /* was [2][5] */ = { 1.f,2.f,3.f,4.f,5.f,6.f,7.f,8.f,
                                           -9.f,10.f };
    /* Local variables */
    static int jrab[4];
    extern int as08r_c(int *, int *, int *, float *, float *, int *);
    static int k, m, m1, i__;
    static float yr[12]  /* was [4][3] */;

    m = 4;
    k = 2;
    m1 = 2;
    as08r_c(&m, &k, &m1, b, yr, jrab);

    for (i__ = 0; i__ <= 10; i__+= 2) {
         printf("\n  %16.7e %16.7e \n", yr[i__], yr[i__+1]);
    }
    return 0;
} /* main */


Результаты:

      yr(1, 1) = -0.3333333333
      yr(2, 1) = 0.
      yr(3, 1) = 1.
      yr(4, 1) = -0.6666666667
      yr(1, 2) = -0.6666666667
      yr(2, 2) = 1.
      yr(3, 2) = 0.
      yr(4, 2) = -0.3333333333
      yr(1, 3) = 23.66666667
      yr(2, 3) = 0.
      yr(3, 3) = 0.
      yr(4, 3) = -4.66666667