Текст подпрограммы и версий aih1r_c.zip aih1d_c.zip |
Тексты тестовых примеров taih1r_c.zip taih1d_c.zip |
Обращение положительно определенной симметричной матрицы с компактной формой представления методом квадратного корня (методом Холецкого).
Подпрограмма aih1r_c вычисляет матрицу B (симметричную в компактной форме), такую, что А*В = Е, где А - исходная положительно определенная симметричная матрица порядка N, заданная в компактной форме, а Е - единичная матрица. Используется метод квадратного корня (метод Холецкого).
В.В. Воеводин, Численные методы алгебры (теория и алгорифмы), Наука, М., 1966 г.
int aih1r_c (real *a, real *ainv, integer *n, integer *ierr)
Параметры
a - | вектор длины n на (n+1)/2, в котором содержится заданная матрица, записанная в компактной форме (тип: вещественный); |
ainv - | вектор длины n на (n+1)/2, в котором запоминается вычисленная обратная матрица в компактной форме (тип: вещественный); |
n - | порядок матрицы (тип: целый); |
ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
ierr=65 - | если заданная матрица не является положительно определенной. |
Версии
aih1d_c - | обращение положительно определенной симметричной матрицы, записанной в компактной форме, методом квадратного корня (методом Холецкого) с повышенной точностью. |
Вызываемые подпрограммы
utai10_c - | подпрограмма печати диагностических сообщений при работе подпрограммы aih1r_c. |
utai11_c - | подпрограмма печати диагностических сообщений при работе подпрограммы aih1d_c. |
Замечания по использованию
При работе подпрограммы исходная матрица A не сохраняется. На место матрицы A помещается ее треугольное разложение, полученное методом квадратного корня (методом Холецкого). Для подпрограммы aih1d_c параметры a, ainv должны иметь тип double. |
int main(void) { /* Initialized data */ static float a[6] = { 1.f,2.f,6.f,1.f,1.f,2.f }; /* Local variables */ static int ierr, i__; extern int aih1r_c(float *, float *, int *, int *); static float a2[6]; for (i__ = 1; i__ <= 6; ++i__) { printf("\n %16.7e \n", a[i__-1]); } aih1r_c(a, a2, &c__3, &ierr); for (i__ = 1; i__ <= 6; ++i__) { printf("\n %16.7e \n", a2[i__-1]); } printf("\n %5i \n", ierr); return 0; } /* main */ Результаты: b = (11., -3., 1., -4., 1., 2.), ierr = 0.