Процедуры и функции, связанные с LU-разложением, содержатся в том же модуле UMatrix, который уже не раз рассматривался в этой и предыдущей главах. В листинге 2.7 приведены фрагменты этого файла, относящиеся к LU-разложению.

Листинг 2.7. Фрагменты файла UMatrix.pas, относящиеся к Ш-разложению

unit UMatrix; interface

type TMatrix = array of array of real;
TVector = array of real;
Tint = array of integer;
// ShowErrorMatrix - надо ли показывать окна с сообщениями об ошибках // Если ShowErrorMatrix = false, то ErrorMatrix показывает, были ли // ошибки, a MessageMatrix содержит последнее сообщение об ошибке var ShowErrorMatrix: boolean = false;
ErrorMatrix: boolean = false;
MessageMatrix: string;

У У ******************************************

// Операции с векторами

У У ******************************************

// Создание вектора размерностью N

function CreateVector(N: integer): TVector;
overload;

/у ******************************************

// Операции с матрицами у у ********************************** ********

// Создание матрицы М х N: М - число строк, N - число столбцов function CreateMatrix(М, N: integer): TMatrix;

// Произведение матрицы на вектор

// Размерность матрицы должна быть М х N, а вектора N

function MultMatrixVector(const A: TMatrix;
const V: TVector): TVector;

// LU разложение матрицы

// Matr - заданная матрица, заменяемая в результате разложенной // V - массив индексов, определяющих последовательность // уравнений с учетом перестановок в процессе LU-разложения procedure LU(var Matr: TMatrix;
var V: Tint);

// LU разложение матрицы с выбором главного элемента

// Matr - заданная матрица, заменяемая в результате разложенной

// V - массив индексов, определяющих последовательность

// уравнений с учетом перестановок в процессе LU-разложения

procedure LUMax(var Matr: TMatrix;
var V: Tint);

// Решение системы линейных уравнений

// с уже проведенным LU-разложением (результаты в Matr и V) // и с изменяющимся вектором правых частей В function LUVector(const В: TVector;
const Matr: TMatrix;
const V: Tint): TVector;

// Полное решение системы линейных уравнений

// с помощью LU-разложения без выбора главного элемента

function LUSystem(const A: TMatrix;
const VRight: TVector): TVector;

// Полное решение системы линейных уравнений

// с помощью LU-разложения с выбором главного элемента

function LUMaxSystem(const A: TMatrix;
const VRight: TVector): TVector;

у у ************************** implementation

uses Forms, // Для переменной Application

Windows, // Для обозначений флагов кнопок Application.MessageBox SysUtils, Math;// Для функции Abort

procedure LU (var Matr: TMatrix; var V: Tint); // LU разложение матрицы

// Matr - заданная матрица, заменяемая в результате разложенной // V - массив индексов, определяющих последовательность // уравнений с учетом перестановок в процессе LU-разложения var i, j, k, N: word;

Rtmp, Rtmp2: real; begin

ErrorMatrix := false; if (Length(Matr) = 0) then begin


|Следующая страница ⇒

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Февраль
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс