Текст подпрограммы и версий ask8c_c.zip |
Тексты тестовых примеров task8c_c.zip |
Решение системы линейных алгебраических уравнений с клеточно - циркулянтной матрицей, все клетки которой суть клеточно - циркулянтные матрицы с теплицевыми клетками.
Решается система А*x = b с клеточно - циркулянтной матрицей А (см. [1]) клеточного размера К на К, с клетками размера (М*L) на (М*L); клетки матрицы А сами являются клеточно - циркулянтными матрицами клеточного размера L на L, с теплицевыми клетками размера М на М.
В основе алгорифма лежит подобное преобразование матрицы А к клеточно - диагональной матрице клеточного размера К на К, с клетками размера (М*L) на (М*L). Тем самым решение исходной системы порядка М на L на К сводится к решению К систем порядка М на L, матрицы которых - клеточно - циркулянтные, с теплицевыми клетками (см. [2]).
int ask8c_c (complex *a, complex *x, complex *r, integer *m, integer *l, integer *k)
Параметры
a - | комплексный одномерный массив длины (2*m - 1) на l на k, в котором задается матрица системы следующим образом. Массив a делится на k кусков длины (2*m - 1) на l. b i - ом куске, i = 1, ..., k, задается i - ая клетка первой клеточной строки исходной матрицы. Задание i - ой клетки в своем куске осуществляется следующим образом. Соответствующий кусок делится на l сегментов длины 2*m - 1. В j - ом сегменте, j = 1, ..., l, задается j - ая клетка первой клеточной строки i - ой клетки. Каждая внутренняя клетка в своем сегменте задается первой строкой, за которой следуют элементы первого столбца, начиная со второго элемента; |
x - | комплексный одномерный массив длины m на l на k, в котором задается правая часть. На выходе из подпрограммы в x получается решение; |
r - | комплексный одномерный рабочий массив длины max (2*m, l, k); |
m - | порядок внутренней клетки (тип: целый); |
l - | клеточный порядок клеток исходной матрицы (тип: целый); |
k - | клеточный порядок исходной матрицы (тип: целый). |
Версии: нет
Вызываемые подпрограммы
astac_c - | решение системы линейных алгебраических уравнений с теплицевой матрицей. |
ask5c_c - | решение системы линейных алгебраических уравнений с клеточно - циркулянтной матрицей, все клетки которой суть теплицевы матрицы. |
Замечания по использованию
В подпрограмме ask8c_c используются служебные подпрограммы ar01c_c, ar02c_c. |
int main(void) { /* Initialized data */ static complex a[12] = { {1.f,1.f},{2.f,2.f},{2.f,2.f},{2.f,2.f}, {4.f,4.f},{4.f,4.f},{2.f,2.f},{4.f,4.f},{4.f,4.f},{4.f,4.f}, {8.f,8.f},{8.f,8.f} }; static complex x[8] = { {27.f,27.f},{27.f,27.f},{27.f,27.f},{27.f,27.f}, {27.f,27.f},{27.f,27.f},{27.f,27.f},{27.f,27.f} }; /* Local variables */ extern int ask8c_c(complex *, complex *, complex *, int *, int *, int *); static int k, l, m, i__; static complex r__[4]; m = 2; l = 2; k = 2; ask8c_c(a, x, r__, &m, &l, &k); for (i__ = 0; i__ <= 6; 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.), (1., 0.), (1., 0.), (1., 0.), (1., 0.) )