|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/af_htm_p/afb1r_p.htm
Дата изменения: Thu Jun 23 11:48:51 2011 Дата индексирования: Mon Oct 1 22:56:12 2012 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий afb1r_p.zip , afb1e_p.zip |
Тексты тестовых примеров tafb1r_p.zip , tafb1e_p.zip |
Треугольное разложение ленточной матрицы, заданной в компактной форме, с выбором ведущего элемента по столбцу.
Заданная в компактной форме ленточная матрица А приводится к ленточной верхней треугольной матрице U при помощи элементарного преобразования L так, что LU = А. Матрица L является ленточной нижней треугольной с единичными диагональными элементами.
Дж.Х.Уилкинсон, Алгебраическая проблема собственных значений, "Наука", М., 1970.
procedure AFB1R(var A :Array of Real; N :Integer; NLC :Integer;
NUC :Integer; var R :Array of Real;
var IERR :Integer);
Параметры
| A - | вещественный двумерный массив размера N *(NLС + NUС + 1), в котором содержится заданная матрица, записанная в компактной форме; по окончании работы подпрограммы в массиве А запоминается также в компактной форме ленточная верхняя треугольная матрица U (в первых NUС + 1 столбцах); |
| N - | порядок матрицы (тип: целый); |
| NLC - | число ненулевых диагоналей, расположенных под главной диагональю (тип: целый); |
| NUC - | число ненулевых диагоналей, расположенных над главной диагональю (тип:целый); |
| R - | вещественный двумерный массив размера N * (NLС + 1), используемый как рабочий; по окончании работы подпрограммы в первых N*NLС компонентах массива R содержится нижняя треугольная ленточная матрица L; |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
| IЕRR=65 - | если заданная матрица является алгоритмически сингулярной. |
Версии
| AFB1E - | треугольное разложение ленточной матрицы, заданной в компактной форме с расширенной (Extended) точностью (выбор ведущего элемента по столбцу). |
Вызываемые подпрограммы
| UTBF10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы АFВ1R. |
| UTBF11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы АFВ1E. |
Замечания по использованию
| Для подпрограммы АFВ1E параметры А и R должны иметь тип Extended. |
Unit TAFB1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFB1R_p;
function TAFB1R: String;
implementation
function TAFB1R: String;
var
I,J,_i,IERR :Integer;
R :Array [0..5] of Real;
const
A :Array [0..8] of Real = ( 0.0,2.0,1.0,1.0,5.0,17.0,2.0,1.0,0.0 );
label
_8;
begin
Result := ''; { результат функции }
for I:=1 to 3 do
begin
for J:=1 to 2 do
begin
_8:
R[(I-1)+(J-1)*3] := 0.0;
end;
end;
Result := Result + Format('%s',
[' РАЗЛОЖЕНИЕ НЕОСОБЕННОЙ ЛЕНТОЧНОЙ MATPИЦЫ' + #$0D#$0A]) + #$0D#$0A;
Result := Result + Format('%s',[' ЗАДАННАЯ MATPИЦA:']);
Result := Result + #$0D#$0A;
for _i:=0 to 8 do
begin
Result := Result + Format('%20.16f ',[A[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
AFB1R(A,3,1,1,R,IERR);
Result := Result + Format('%s',[' PEЗYЛЬTAT:' + #$0D#$0A]);
Result := Result + #$0D#$0A;
for _i:=0 to 8 do
begin
Result := Result + Format('%20.16f ',[A[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
begin
Result := Result + Format('%20.16f ',[R[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[' IERR=']);
Result := Result + Format('%5d ',[IERR]) + #$0D#$0A;
UtRes('TAFB1R',Result); { вывод результатов в файл TAFB1R.res }
exit;
end;
end.
Результаты:
A = (1., 25., 16., 3., 5., 0., 0., 0., 0.),
R = (0., -1., 0.4, 1., 2., 3.),
IERR = 0