Доказательство теоремы:
Так как
, то можно записатьОпределитель-это аддитивная и однородная функция каждого из своих столбцов. Используя этот факт для каждого из
столбцов в , выражаем в виде суммы определителей:Те члены в суммировании, которые имеют совпадающие два или более индексов
, равны нулю, так как в этих случаях миноры будут иметь по крайней мере два совпадающих столбца. Таким образом, нужно рассматривать лишь те членов суммирования, в которых индексы различны. Мы распределяем эти остающиеся члены на групп по членов в каждой таким образом, чтобы в каждой группе члены отличаются лишь порядком индексов . Отметим также, что можно написать , где . Следовательно, сумма по членам, в которых -перестановка чисел , задается выражением:Переставляя элементы
так, чтобы первые индексы в возрастающем порядке, приводим это выражение к виду:где
-перестановка чисел , как очевидно . Из определителя функции определителя теперь следует, что это выражение есть просто:Следствие. Определитель произведения двух кратных матриц равен произведению определителй множителей.
Это следует из Теоремы при
В данной работе рассмотрена основная теория матриц и доказательство теоремы Коши-Бине. Также представлено применение данной теоремы при нахождении определителя произведения двух прямоугольных матриц в программе написанной на языке программирования Дельфи с возможностью ввода матриц вручную и подгрузкой из файла.
Данная теорема Коши-Бине:
Пусть
, - и -матрицы соответственно, иТогда
На примере можно рассмотреть работу программы реализующей алгоритм нахождения определителя прямоугольных матриц на основе формулы Коши-Бине.
Будем искать миноры 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; //