Текст подпрограммы и версий ask4c_c.zip |
Тексты тестовых примеров task4c_c.zip |
Решение системы линейных алгебраических уравнений с клеточно - циркулянтной матрицей, все клетки которой суть циркулянтные матрицы.
Решается система А*x = b с клеточно - циркулянтной матрицей А (см. [1]), состоящей из L на L клеток порядка М, являющихся циркулянтными матрицами. В основе алгорифма лежит подобное преобразование матрицы А к клеточно - диагональной матрице тех же размеров и также с циркулянтными клетками. Тем самым решение исходной системы порядка М на L сводится к решению L систем порядка М с циркулянтными матрицами (см. [2]).
int ask4c_c (complex *a, complex *x, complex *r, integer *m, integer *l)
Параметры
a - | комплексный одномерный массив длины m на l, в котором задается матрица системы своей первой строкой; |
x - | комплексный одномерный массив длины m на l, в котором задается правая часть; на выходе из подпрограммы в x получается решение; |
r - | комплексный одномерный рабочий массив длины max (m, l); |
m - | порядок клетки (тип: целый); |
l - | клеточный порядок исходной матрицы (тип: целый). |
Версии: нет
Вызываемые подпрограммы
asc0c_c - | решение системы линейных алгебраических уравнений с циркулянтной матрицей. |
Замечания по использованию
В подпрограмме ask4c_c используются служебные подпрограммы ar01c_c, ar02c_c. |
int main(void) { /* Initialized data */ static complex a[4] = { {1.f,1.f},{2.f,2.f},{2.f,2.f},{4.f,4.f} }; static complex x[4] = { {9.f,9.f},{9.f,9.f},{9.f,9.f},{9.f,9.f} }; /* Local variables */ extern int ask4c_c(complex *, complex *, complex *, int *, int *); static int l, m, i__; static complex r__[2]; m = 2; l = 2; ask4c_c(a, x, r__, &m, &l); for (i__ = 0; i__ <= 2; i__+= 2) { printf("\n %16.8e %16.8e %16.8e %16.8e \n", x[i__].r, x[i__].i, x[i__+1].r, x[i__+1].i); } return 0; } /* main */ Результат: x = ( (1., 0.), (1., 0.), (1., 0.), (1., 0.) )