Текст подпрограммы и версий ast5r_c.zip , ast5d_c.zip |
Тексты тестовых примеров tast5r_c.zip , tast5d_c.zip |
Решение разреженной линейной системы с нижней треугольной матрицей с единичной диагональю, представленной в виде верхней треугольной в формате RR (U) U .
Описание формата RR (U) U приведено в описании подпрограммы am21r_c (индекс 18.8.16).
Пусть разреженная верхняя треугольная матрица U порядка N с единичной диагональю задана в строчном формате RR (U) U. Требуется найти решение линейной системы UTX = B, где символ T означает операцию транспонирования. Следовательно, матрица UT является нижней треугольной.
Решение систем такого вида осуществляется прямой подстановкой по следующим расчетным формулам:
x1 = b1 i -1 xi = bi - ∑ uk i xk , i = 2, 3, ..., n k =1
int ast5r_c (integer *iu, integer *ju, real *un, real *x, integer *n, real *b)
Параметры
iu, ju, - un | заданные портрет и ненулевые элементы верхней треугольной матрицы U с единичной диагональю в формате RR (U) U; |
x - | вещественный одномерный массив длины n, содержащий компоненты вычисленного вектора решения; |
n - | заданный порядок системы (тип: целый); |
b - | вещественный одномерный массив длины n, содержащий компоненты вектора правой части системы. |
Версии
ast5d_c - | решение разреженной линейной системы с нижней треугольной матрицей с единичной диагональю, представленной в виде верхней треугольной в формате RR (U) U в режиме удвоенной точности; при этом параметры un, x и b должны иметь тип double. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Initialized data */ static int iu[5] = { 1,2,3,4,4 }; static int ju[3] = { 4,3,4 }; static float un[3] = { 1.f,1.f,1.f }; static float b[4] = { 1.f,1.f,1.f,1.f }; /* Local variables */ extern int ast5r_c(int *, int *, float *, float *, int *, float *); static int n; static float x[4]; n = 4; ast5r_c(iu, ju, un, x, &n, b); printf("\n %5.0f %5.0f %5.0f %5.0f \n", x[0], x[1], x[2], x[3]); return 0; } /* main */ Результаты: x = (1, 1, 0, 0)