Смекни!
smekni.com

Определитель произведения прямоугольных матриц. Теорема Коши-Бине (стр. 9 из 11)

Доказательство теоремы:

Так как

, то можно записать

Определитель-это аддитивная и однородная функция каждого из своих столбцов. Используя этот факт для каждого из

столбцов в
, выражаем
в виде суммы
определителей:

Те члены в суммировании, которые имеют совпадающие два или более индексов

, равны нулю, так как в этих случаях миноры будут иметь по крайней мере два совпадающих столбца. Таким образом, нужно рассматривать лишь те
членов суммирования, в которых индексы
различны. Мы распределяем эти остающиеся члены на
групп по
членов в каждой таким образом, чтобы в каждой группе члены отличаются лишь порядком индексов
. Отметим также, что можно написать

, где
. Следовательно, сумма по
членам, в которых
-перестановка чисел
, задается выражением:

Переставляя элементы

так, чтобы первые индексы в возрастающем порядке, приводим это выражение к виду:

где

-перестановка
чисел
, как очевидно
. Из определителя функции определителя теперь следует, что это выражение есть просто:

Следствие. Определитель произведения двух кратных матриц равен произведению определителй множителей.

Это следует из Теоремы при

Заключение

В данной работе рассмотрена основная теория матриц и доказательство теоремы Коши-Бине. Также представлено применение данной теоремы при нахождении определителя произведения двух прямоугольных матриц в программе написанной на языке программирования Дельфи с возможностью ввода матриц вручную и подгрузкой из файла.

Данная теорема Коши-Бине:

Пусть

,
-
и
-матрицы соответственно,
и

Тогда

На примере можно рассмотреть работу программы реализующей алгоритм нахождения определителя прямоугольных матриц на основе формулы Коши-Бине.

Будем искать миноры 2 порядка:

1)

Пусть A m = 2 n = 3

1 0 2

-1 1 1

B m = 3 n = 2

-1 -1

-2 0

1 1

получаем матрицу C m = 2 n = 2

1 1

0 2

Итого: Det C = 2

2)

Переборы:

1A) 1 2

1 0

-1 1

DetA = 1

1B) 1 2

-1 -1

-2 0

DetB = -2

2A) 1 3

1 2

-1 1

DetA = 3

2B) 1 3

-1 -1

1 1

DetB = 0

3A) 2 3

0 2

1 1

DetA = -2

3B) 2 3

-2 0

1 1

DetB = -2

C = (1)*(-2) + (3)*(0) + (-2)*(-2)

Итого по формуле Коши - Бине: 2

Данная программа наглядно показывает нахождение миноров порядка m, где m-это количество строк в матрице

.

Список литературы

1. Гантмахер Ф.Р. Теория матриц. – 4-е изд. – М.: Наука. Гл.ред. физ. – мат. мет., 1988. с. 13-32.

2. Фаддеев Д.К. Лекции по алгебре.- М.:Наука. Гл.ред. физ. – мат. мет., 1984.-с.216.

3. Курош А.Г. Курс высшей алгебры. – 14 - е изд. - Спб.: Лань, 2005. -с.322

4. Ланкастер П. Теория матриц– М.: Наука. Гл.ред. физ. – мат. мет., 1973, с.17-44

5. Маркус М., Минк Х. Обзор по теории матриц и матричных неравенств. – М.: Наука. Гл.ред. физ. – мат. мет. , 1972, с.232

6. Большакова И.В. Высшая математика - Учебное издание, 2003, с.5-10

Приложение

Внешний вид программы:

Исходныйкод:

unit MainUnit;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Menus, Math, cdet;

Const

MaxN = 10; //Максимальное число столбцов в массиве

MaxM = 10; //Максимальное число строк в массиве

DefValueMas = 3; //Значение по умолчанию (размерность)

type

TVS_MAssPerebor = Array of Real; //Массивпереборов

TVS_Mass = array of array of Real; //Описали 2х мерный динамический массив

TVS_MassData = Record //Создаем запись - массив, в котором:

Mass : TVS_Mass ; //Массив

M, //Строки массива

N : Integer; //Столцы массива

Name : Char; //Название матрицы для вывода информации (A, B, C)

end; {TVS_MassData = Record}

TMainForm = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

NMultiplication: TMenuItem;

N2: TMenuItem;

InputMassB: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

nDetA: TMenuItem;

NDetB: TMenuItem;

ResultMemo: TMemo;

N5: TMenuItem;

DetC: TMenuItem;

nmbn1: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

OpenDialog: TOpenDialog;

procedure InputMassAClick(Sender: TObject);

procedure NMultiplicationClick(Sender: TObject);

procedure VS_MultiplicMass (Var inMassA, InMassB, MassOut : TVS_MassData);

procedure InputMassBClick(Sender: TObject);

procedure VS_InputMass(Var InMass : TVS_MassData);

procedure VS_ShowMass (inCaption : String; inMass: TVS_MassData);

procedure FormShow(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure nDetAClick(Sender: TObject);

function VS_Det(InMass : TVS_MassData): Real;

procedure NDetBClick(Sender: TObject);

procedure VS_ShowMassToMemo(Caption : String; InMass : TVS_MassData; ShowRazm : Boolean = True);

procedure N5Click(Sender: TObject);

procedure DetCClick(Sender: TObject);

Procedure AssignMass(InMAss : TVS_MassData; Var OutMass : TVS_MassData);

Procedure VS_VerMass(Var Massin1, MAssIn2: TVS_MassData);

Procedure VS_LoadData(Var InMAss : TVS_MassData);

Procedure VS_GetRazmOnFile(FileName : String; Var Col, Row : Integer);

Function VS_GetColOnFile(InStr: String): Integer;

//Миноры

function VS_Minor(II, Jj: Integer; InMass : TVS_MassData): REal;

Procedure VS_InitMassInStr(InStr: String; CurRow : Integer; Var InMass: TVS_MassData);

Procedure VS_InitMassPErebor;

Procedure VS_Init2xMassPerebot;

Procedure VS_SortMassPerebor;

Procedure VS_GetMAssForDet;

Function VS_IfMassEq(Massin1, MAssIn2: TVS_MassData) : Boolean;

Function VS_GetKoshi_Bine : Real;

procedure VS_GenerateColMinorData(CurCol, Col : Integer; Var inMass : TVS_MassData);

procedure VS_GenerateRowMinorData(CurCol, Col : Integer; Var InMass : TVS_MassData);

Procedure VS_MinorMass(InMass : TVS_MassData; Var OutMass : TVS_MassData);

procedure N6Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure lll1Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure N10Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

MassP : TVS_MAssPerebor;

MassPer,

MassA,

MassB, MassC : TVS_MassData;

DetB,

DetA : TVS_MAssPerebor; //МассивдетерминантА

implementation

uses InRazmUnit, InMassUnit;

{$R *.dfm}

function TMainForm.VS_Det(InMass : TVS_MassData): Real;

var

Temp, A: TVS_MassData;

Cols, Rows, Count: Word;

i, j, k: Integer;

begin

Result := 1; //Результат функции по умолчанию

If InMass.N <> InMass.M Then Exit; //если матрица не квадратная - уходим, так как решение методом диагонали

Count := InMass.M ; // Получили размерность исходного массива

SetLength(A.Mass, Count, Count);//Установили размер матрицы

SetLength(Temp.Mass, 1, Count); //Установили размер мартицы

AssignMass(InMass, A); //Во временный массив заносим данные из исходного, чтобы не портить исходный массив

//Поиск и решение

for i := 0 to Count - 2 do {Начало преобразования к верхнему треугольному виду}

begin

for j := i to Count - 1 do {* Поиск }

begin {* нулевых }

Rows := 0; {* строк }

Cols := 0; {* и }

for k := i to Count - 1 do {* столбцов }

begin {* в }

Rows := Rows + Ord(A.Mass[j, k] = 0); {* матрице }

Cols := Cols + Ord(A.Mass[k, j] = 0); {* }

end;{for k := i to Count - 1 do} {* }

if Rows + Cols = 0 then {* }

Break; {* }

if (Cols = Count - i) or (Rows = Count - i) then {* }

begin {* }

Result := 0; {* }

Exit {* }

end {if (Cols = Count - i) or (Rows = Count - i) then }

end; {for j := i to Count - 1 do } {* }

if A.Mass[i, i] = 0 then

for j := i + 1 to Count - 1 do

if A.Mass[j, i] <> 0 then

begin

Result := -Result; {* меняемстроку }

Temp.Mass[0] := A.Mass[i]; {* настрокус }

A.Mass[i] := A.Mass[j]; {* первым }

A.Mass[j] := Temp.Mass[0]; {* ненулевым }

Break {* элементом }

end;

for j := i + 1 to Count - 1 do

if A.Mass[j, i] <> 0 then

begin

for k := i + 1 to Count - 1 do

A.Mass[j, k] := A.Mass[j, k] - A.Mass[i, k] * A.Mass[j, i] / A.Mass[i, i];

A.Mass[j, i] := 0

end

end; {Конецпреобразования}

for i := 0 to Count - 1 do { Определитель как произведение }

Result := Result * A.Mass[i, i]; { элементов на главной диагонали}

end;

procedure TMainForm.InputMassAClick(Sender: TObject);

begin

If InRazmForm = Nil Then Application.CreateForm(TInRazmForm, InRazmForm);

With InRazmForm do

Begin

Caption := 'ВводразмерностирядаА';

Hint := Caption; //