|
Текст подпрограммы и версий 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