|
Текст подпрограммы и версий as08r_p.zip , as08e_p.zip |
Тексты тестовых примеров tas08r_p.zip , tas08e_p.zip |
Нахождение частного решения неоднородной системы линейных алгебраических уравнений и фундаментальной системы решений соответствующей однородной системы методом Жордана с выбором главного элемента по строке.
Ищется частное решение неоднородной системы линейных алгебраических уравнений
(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