Текст подпрограммы и версий as08r_c.zip , as08d_c.zip |
Тексты тестовых примеров tas08r_c.zip , tas08d_c.zip |
Нахождение частного решения неоднородной системы линейных алгебраических уравнений и фундаментальной системы решений соответствующей однородной системы методом Жордана с выбором главного элемента по строке.
Ищется частное решение неодн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