|
Текст подпрограммы и версий ask9c_c.zip |
Тексты тестовых примеров task9c_c.zip |
Решение системы линейных алгебраических уравнений с клеточно - циркулянтной матрицей, все клетки которой суть клеточно - теплицевы матрицы с клетками общего вида.
Решается система А*x = b с клеточно - циркулянтной матрицей А (см. [1]) клеточного размера К на К, с клетками размера (М*L) на (М*L); клетки матрицы А являются клеточно - теплицевыми матрицами клеточного размера L на L, с клетками общего вида размера М на М.
В основе алгорифма лежит подобное преобразование матрицы А к клеточно - диагональной матрице клеточного размера К на К, с клетками размера (М*L) на (М*L). Тем самым решение исходной системы порядка М на L на К сводится к решению К систем порядка М на L, матрицы которых - клеточно - теплицевы с клетками общего вида (см. [2]).
int ask9c_c (complex *a, complex *x, complex *r, integer *m,
integer *l, integer *k)
Параметры
| a - | комплексный одномерный массив длины m2 на (2*l - 1) на k, в котором задается матрица системы следующим образом. Массив a делится на k кусков длины m2 на (2*l - 1). b i - ом куске, i = 1, ..., k, задается i - ая клетка первой клеточной строки исходной матрицы. Задание i - ой клетки в своем куске осуществляется следующим образом: соответствующий кусок делится на i - 1 сегментов длины m2. b j - ом сегменте, j = 1, ..., l, записывается j - ая клетка первой клеточной строки i - ой клетки. В l + j - ом сегменте, j = 1, ..., l - 1, записывается j + 1 - ая клетка первого клеточного столбца j - ой клетки. Все внутренние клетки в своих сегментах записываются по столбцам; |
| x - | комплексный одномерный массив длины m на l на k, в котором задается правая часть. На выходе из подпрограммы в x получается решение; |
| r - | комплексный одномерный рабочий массив длины max (2*m2*l + 4*m2 + m, k); |
| m - | порядок внутренней клетки (тип: целый); |
| l - | клеточный порядок клеток исходной матрицы (тип: целый); |
| k - | клеточный порядок исходной матрицы (тип: целый). |
Версии: нет
Вызываемые подпрограммы
| askac_c - | решение системы линейных алгебраических уравнений с клеточно - теплицевой матрицей с клетками общего вида. |
| asg1c_c - | обращение комплексной матрицы методом Жордана с выбором по столбцу. |
Замечания по использованию
| В подпрограмме ask9c_c используются служебные подпрограммы ar01c_c, ar02c_c, askbc_c. |
int main(void)
{
/* Initialized data */
static complex a[24] = { {1.f,1.f},{2.f,2.f},{2.f,2.f},{1.f,1.f},
{2.f,2.f},{4.f,4.f},{4.f,4.f},{2.f,2.f},{2.f,2.f},{4.f,4.f},
{4.f,4.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},{8.f,8.f},{8.f,8.f},{4.f,4.f},{4.f,4.f},{8.f,8.f},
{8.f,8.f},{4.f,4.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 ask9c_c(complex *, complex *, complex *, int *, int *, int *);
static int k, l, m, i__;
static complex r__[34];
m = 2;
l = 2;
k = 2;
ask9c_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.) )