Текст подпрограммы и версий asc0c_c.zip |
Тексты тестовых примеров tasc0c_c.zip |
Решение системы линейных алгебраических уравнений с циркулянтной матрицей.
Решается система А*x = b, где А - циркулянтная матрица порядка М. В основе алгорифма лежит подобное преобразование матрицы А к диагональной матрице на базе дискретного преобразования Фурье.
С.Н.Воеводина. Решение системы уравнений с клеточно - теплицевыми матрицами. В Сб. Вычислительные методы и программирование, вып. 24, Изд-во МГУ, 1975.
int asc0c_c (complex *a, complex *x, complex *r, integer *m)
Параметры
a - | комплексный одномерный массив длины m, в котором матрица системы задается своей первой строкой; |
x - | комплексный одномерный массив длины m, в котором задается правая часть. На выходе из подпрограммы в x получается решение; |
r - | комплексный одномерный рабочий массив длины m; |
m - | порядок матрицы (тип: целый). |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Initialized data */ static complex a[4] = { {1.f,1.f},{2.f,2.f},{3.f,3.f},{4.f,4.f} }; static complex x[4] = { {10.f,10.f},{10.f,10.f},{10.f,10.f},{10.f,10.f} }; /* Local variables */ extern int asc0c_c(complex *, complex *, complex *, int *); static int m, i__; static complex r__[4]; m = 4; asc0c_c(a, x, r__, &m); 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.) )