Текст подпрограммы и версий asv1r_c.zip , asv1d_c.zip |
Тексты тестовых примеров tasv1r_c.zip , tasv1d_c.zip |
Решение систем линейных алгебраических уравнений с матрицей Вандермонда.
asv1r_c вычисляет решение системы N линейных алгебраических уравнений с матрицей Вандермонда:
| 1 1 ... 1 | | y1 | | b1 | | x1 x2 ... xN | | y2 | | b2 | | x12 x22 ... xN2 | | y3 | = | b3 | . . . . . . . . . . . . . . . . . . . . . . . . | x1N-1 x2N-1 ... xNN-1 | | yN | | bN |
Решение системы данного вида с транспонированной матрицей осуществляется подпрограммой ip01r_c .
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
int asv1r_c (real *x, real *y, real *b, integer *n, real *rab, integer *ierr)
Параметры
x - | вещественный вектор длины n, компоненты которого равны коэффициентам x1, x2, ..., xn заданной матрицы системы; |
y - | вещественный вектор длины n, содержащий компоненты вычисленного вектора решения системы; |
b - | вещественный вектор длины n, в котором задаются компоненты вектора правой части системы; |
n - | порядок системы (тип: целый); |
rab - | вещественный вектор длины n, используемый в подпрограмме в качестве рабочего; |
ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом |
ierr=65 - | когда матрица системы вырождена. |
Версии
asv1d_c - | решение систем линейных алгебраических уравнений с матрицей Вандермонда в режиме удвоенной точности. При этом параметры x, y, b, rab должны иметь тип double. |
Вызываемые подпрограммы
utas10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы asv1r_c. |
utas11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы asv1d_c. |
Замечания по использованию: нет
int main(void) { /* Initialized data */ static float x[3] = { 0.f,-1.f,1.f }; static float b[3] = { 0.f,1.f,2.f }; /* Local variables */ static int ierr; extern int asv1r_c(float *, float *, float *, int *, float *, int *); static float y[3], rab[3]; asv1r_c(x, y, b, &c__3, rab, &ierr); printf("\n %16.7e %16.7e %16.7e \n", y[0], y[1], y[2]); return 0; } /* main */ Результаты: y = ( - 2.0, 0.5, 1.5 ) , ierr = 0