|
Текст подпрограммы и версий 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)