Текст подпрограммы и версий
asv1r_c.zip , asv1d_c.zip
Тексты тестовых примеров
tasv1r_c.zip , tasv1d_c.zip

Подпрограмма:  asv1r_c

Назначение

Решение систем линейных алгебраических уравнений с матрицей Вандермонда.

Математическое описание

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