Текст подпрограммы и версий asv1r_p.zip , asv1e_p.zip |
Тексты тестовых примеров tasv1r_p.zip , tasv1e_p.zip |
Решение систем линейных алгебраических уравнений с матрицей Вандермонда.
ASV1R вычисляет решение системы 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 .
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
procedure ASV1R(var X :Array of Real; var Y :Array of Real; var B :Array of Real; N :Integer; var RAB :Array of Real; var IERR :Integer);
Параметры
X - | вещественный вектор длины N, компоненты которого равны коэффициентам x1, x2, ..., xN заданной матрицы системы; |
Y - | вещественный вектор длины N, содержащий компоненты вычисленного вектора решения системы; |
B - | вещественный вектор длины N, в котором задаются компоненты вектора правой части системы; |
N - | порядок системы (тип: целый); |
RAB - | вещественный вектор длины N, используемый в подпрограмме в качестве рабочего; |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом |
IERR=65 - | когда матрица системы вырождена. |
Версии
ASV1E - | решение систем линейных алгебраических уравнений с матрицей Вандермонда в режиме расширенной (Extended) точности. При этом параметры X, Y, B, RAB должны иметь тип Extended. |
Вызываемые подпрограммы
UTAS10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы ASV1R. |
UTAS11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы ASV1D. |
Замечания по использованию: нет
Unit TASV1R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, ASV1R_p; function TASV1R: String; implementation function TASV1R: String; var _i,IERR :Integer; Y :Array [0..2] of Real; RАВ :Array [0..2] of Real; const X :Array [0..2] of Real = ( 0.0,-1.0,1.0 ); B :Array [0..2] of Real = ( 0.0,1.0,2.0 ); begin Result := ''; { результат функции } ASV1R(X,Y,B,3,RAB,IERR); Result := Result + #$0D#$0A; for _i:=0 to 2 do begin Result := Result + Format('%20.16f ',[Y[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TASV1R',Result); { вывод результатов в файл TASV1R.res } exit; end; end. Результаты: Y = ( - 2.0, 0.5, 1.5 ) , IERR = 0