Текст подпрограммы и версий
as08r_p.zip , as08e_p.zip
Тексты тестовых примеров
tas08r_p.zip , tas08e_p.zip

Подпрограмма:  AS08R (модуль AS08R_p)

Назначение

Нахождение частного решения неоднородной системы линейных алгебраических уравнений и фундаментальной системы решений соответствующей однородной системы методом Жордана с выбором главного элемента по строке.

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

Ищется частное решение неоднородной системы линейных алгебраических уравнений

(1)           B * U= b , 

и фундаментальная система решений соответствующей однородной системы

(2)           B * U = 0 , 

где В - прямоугольная матрица порядка (М - К) на М (ранг равен М - К), U,b - векторы длины М и (М - К), соответственно, 0 - нулевой вектор длины (М - К), - методом Жордана с выбором главного элемента по строке.

В.В.Воеводин, Численные методы алгебры. Теория и алгорифмы. Наука, М., 1966.

Использование

procedure AS08R(M :Integer; K :Integer; M1 :Integer;
                var B :Array of Real; var U :Array of Real;
                var IRAB :Array of Integer);

Параметры

M - число неизвестных в системе уравнений (тип: целый);
K - ранг фундаментальной системы решений (2) (тип: целый); если К = 0, то ищется только частное решение неоднородной системы (1), причем это решение единственное;
M1 - число уравнений в системе (1) М1 = М - К (тип: целый);
B - вещественный двумерный массив размера М1 на (М + 1), в котором задается расширенная матрица системы (1), расписанная по столбцам; при этом вектор b размещается в следующих элементах массива В: В (1, М + 1), В (2, М + 1), В (3, М + 1),...
U - двумерный вещественный массив размера М на (К + 1), в первых К столбцах которого запоминается вычисленная фундаментальная система решений однородной системы (2), а в (К + 1) - м столбце - часное решение неоднородной системы (1); если К = 0, то массив U содержит только решение неоднородной системы;
IRAB - вектор длины М, используемый в подпрограмме как рабочий (тип: целый).

Версии

AS08E - нахождение частного решения неоднородной системы линейных алгебраических уравнений, заданных с расширенной (Extended) точностью, и фундаментальной системы решений соответствующей однородной системы методом Жордана с выбором главного элемента по строке. При этом параметры В и U должны иметь тип Extended.

Вызываемые подпрограммы: нет

Замечания по использованию

  При работе подпрограммы значения параметров М, К и М1 сохраняются.

Пример использования

Использование подпрограммы иллюстрируется на примере:

          X1 + 3*X2 + 5*X3 + 7*X4  =  -9
      2*X1 + 4*X2 + 6*X3 + 8*X4  =  10.

Unit TAS08R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AS08R_p;

function TAS08R: String;

implementation

function TAS08R: String;
var
M,K,M1,_i :Integer;
JRАВ :Array [0..3] of Integer;
YR :Array [0..11] of Real;
const
B :Array [0..9] of Real = ( 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,-9.0,10.0 );
begin
Result := '';  { результат функции }
M := 4;
K := 2;
M1 := 2;
AS08R(M,K,M1,B,YR,JRAB);
Result := Result + Format('%s',[' YR' + #$0D#$0A]);
Result := Result + #$0D#$0A;
for _i:=0 to 11 do
 begin
  Result := Result + Format('%20.16f ',[YR[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TAS08R',Result);  { вывод результатов в файл TAS08R.res }
exit;
end;

end.

Результаты:

      YR(1, 1) = -0.3333333333
      YR(2, 1) = 0.
      YR(3, 1) = 1.
      YR(4, 1) = -0.6666666667
      YR(1, 2) = -0.6666666667
      YR(2, 2) = 1.
      YR(3, 2) = 0.
      YR(4, 2) = -0.3333333333
      YR(1, 3) = 23.66666667
      YR(2, 3) = 0.
      YR(3, 3) = 0.
      YR(4, 3) = -4.66666667