|
Текст подпрограммы и версий asb1r_c.zip , asb1d_c.zip |
Тексты тестовых примеров tasb1r_c.zip , tasb1d_c.zip |
Решение системы линейных алгебраических уравнений с ленточной матрицей, заданной в компактной форме, c выбором ведущего элемента по столбцу.
Подпрограмма asb1r_c вычисляет решение системы N линейных алгебраических уравнений А*x = b, где А - ленточная матрица, заданная в компактной форме, b - вектор правой части. Решение вычисляется с выбором главного элемента по столбцу.
Дж.Х.Уилкинсон, Алгебраическая проблема собственных значений, "Наука", М., 1970.
int asb1r_c (real *a, real *b, real *x, integer *n, integer *
nlc, integer *nuc, integer *l, real *r, integer *ierr)
Параметры
| a - | вещественный двумерный массив размера n на (nlc + nuc + 1), в котором содержится заданная матрица, записанная в компактной форме; |
| b - | вещественный вектор длины n, в котором содержится правая часть исходной системы; |
| x - | вещественный вектор длины n, в котором содержится искомое решение исходной системы; |
| n - | заданный порядок матрицы (тип: целый); |
| nlc - | число ненулевых диагоналей, расположенных под главной диагональю (тип: целый); |
| nuc - | число ненулевых диагоналей, расположенных над главной диагональю (тип: целый); |
| l - | задает режим работы подпрограммы (тип: целый); при этом: |
| l = 1 - | если система с данной матрицей решается впервые; |
| l ≠ 1 - | если система с данной матpицей pешается повторно; |
| r - | вещественный двумерный массив размера n на (nlc + 1), используемый как рабочий; |
| ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
| ierr=65 - | если заданная матрица является сингулярной. |
Версии
| asb1d_c - | решение системы линейных алгебраических уравнений с ленточной матрицей, заданной в компактной форме, с удвоенной точностью (выбор ведущего элемента по столбцу). |
Вызываемые подпрограммы
| utbf10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы asb1r_c; |
| utbf11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы asb1d_c; |
| afb1r_c - | треугольное разложение ленточной матрицы, заданной в компактной форме, с выбором ведущего элемента по столбцу; |
| afb1d_c - | треугольное разложение ленточной матрицы, заданной в компактной форме, с удвоенной точностью (выбор ведущего элемента по столбцу). |
Замечания по использованию
|
При работе подпрограммы исходная матрица не сохраняется. На месте матрицы a помещается ее треугольное разложение, полученное подпрограммами afb1r_c или afb1d_c. Подпрограммы asb1r_c и asb1d_c позволяют использовать вместо параметра x параметр b. При использовании подпрограмм asb1r_c и asb1d_c в цикле значение параметра r должно оставаться неизменным (см. описание подпрограммы afb1r_c). Для подпрограммы asb1d_c параметры a, b, x и r должны иметь тип double. |
int main(void)
{
/* Initialized data */
static float b[3] = { 7.f,38.f,2.f };
static float a[9] /* was [3][3] */ = { 0.f,-1.f,10.f,1.f,22.f,18.f,3.f,
5.f,0.f };
/* Local variables */
static int ierr, i__;
extern int asb1r_c(float *, float *, float *, int *, int *,
int *, int *, float *, int *);
static float r__[6] /* was [3][2] */, x[3];
for (i__ = 1; i__ <= 9; ++i__) {
printf("\n %16.7e \n", a[i__-1]);
}
for (i__ = 1; i__ <= 3; ++i__) {
printf("\n %16.7e \n", b[i__-1]);
}
asb1r_c(a, b, x, &c__3, &c__1, &c__1, &c__1, r__, &ierr);
printf("\n %5i \n", ierr);
for (i__ = 1; i__ <= 3; ++i__) {
printf("\n %16.7e \n", x[i__-1]);
}
return 0;
} /* main */
Результаты:
x = (1., 2., -1.),
ierr = 0