Смекни!
smekni.com

Вычисление определителя матрицы прямым методом (стр. 3 из 3)

Инструкция if (stringgrid1.cells [c,r] > stringgrid1.cells [c-1,r]) and (stringgrid1.cells [c,r] < stringgrid1.cells [c+1,r]) thenbegink := k+1; end; используется для выбора одного из вариантов развития программы, т.е. в случае выполнения данного условия число «особых» элементов увеличивается на 1 (k := k+1), если нет, то цикл повторяется до предпоследнего элемента матрицы. Реализует этот выбор стандартная инструкция for … to … do begin … end. Так как переменная detAдействительное число, то для ее преобразования в строковый вид используется инструкция FloatToStrF(detA,fffixed,6,3). Функция zam mod 2 – проверка на четность количества замен строк, если число нечетное, то определитель умножается на -1.

Выход из программы осуществляется нажатием кнопки

.

3.2 Текст программы на языке Pascal

unitUnit1;

interface

uses

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

Dialogs, StdCtrls, Grids, Menus, Buttons;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

Edit1: TEdit;

Label1: TLabel;

Label3: TLabel;

Button2: TButton;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure FormCreate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

const

Nmax=10;

Type

Massiv1 = array[1..Nmax,1..Nmax] of extended;

var

Form1: TForm1;

A : Massiv1;

N, r, c: integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

N := 4;

Edit1.Text := FloatToStr(N);

StringGrid1.RowCount := N+1;

StringGrid1.ColCount := N+1;

Label3.Caption := 'для вычисления определителя матрицы нажмите расчет';

StringGrid1.Cells [0,0] := 'МатрицаА';

for r := 1 to N do begin

StringGrid1.Cells [0,r] := ' строка ' + IntToStr(r);

end;

for c := 1 to N do begin

StringGrid1.Cells [c,0] := ' столбец ' + IntToStr(c);

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

N:=StrToInt(Edit1.Text);

StringGrid1.RowCount:=N+1;

StringGrid1.ColCount:=N+1;

for r := 1 to N do begin

StringGrid1.Cells [0,r] := ' строка ' + IntToStr(r);

end;

for c := 1 to N do begin

StringGrid1.Cells [c,0] := ' столбец ' + IntToStr(c);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

detA, k, buf: extended;

max, j, z, p, s, zam:integer;

begin

max:= 1;

detA := 1;

zam:=0;

for c := 1 to N do

for r := 1 to N do

A[c,r]:=StrToFloat(StringGrid1.Cells[c,r]);

for c := 1 to N-1 do begin

for z := c to N-1 do begin

max:=z;

for j := z+1 to N do begin

if abs(A[c,j]) > abs(A[c,max]) then

max:=j;

end;

for p := 1 to N do begin

buf:=A[p,z]; A[p,z]:=a[p,max]; A[p,max]:=buf;

end;

end;

for r := c+1 to N do begin

k := A[c,r]/A[c,c];

for s := 1 to N do begin

A[s,r]:= A[s,r]-A[s,c]*k;

end;

end;

if c<>max then begin

zam := zam+1;

end;

end;

for c := 1 to N do

detA := detA*A[c,c];

if zam mod 2 <> 0 then

detA := (-1)*detA;

label3.Caption := 'Детерминантматрицыравен: ' + FloatToStrF(detA,fffixed,6,3);

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

MessageDlg(Программа вычисляет детерминант (определитель) матрицы методом Гаусса с выбором главного элемента. Внимание!!! Матрицадолжнабытьквадратной!',mtInformation,[mbOK],0);

end;

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

begin

case Key of

#8,'0'..'9', '-' : ;

'.',',':

begin

if Key <> DecimalSeparator then

Key := DecimalSeparator;

end;

else

key := Chr(0)

end;

end;

end.


4. ТЕСТОВАЯ ЗАДАЧА

4.1 Математическое решение задачи

В матрице вида

Определить детерминант.

Решение:

Вычисление определителя данной матрицы вручную целесообразно производить с помощью разложения элементов по 1-й строке по формуле (1). В итоге получится:

(7)

Воспользовавшись правилом Саррюса (правилом треугольников), вычисляются определители третьего порядка входящие в состав выражения (7):

detA = 4(10∙7∙2+(-20) ∙3∙5+5∙7∙10-5∙7∙10-10∙7∙3-5∙(-20) ∙2)-7∙(7,5∙7∙2+(-20) ∙3∙2+7∙3∙10-10∙7∙2-(-20)∙3∙2-7,5∙7∙3)+5∙(7,5∙5∙2+10∙3∙2+3∙5∙10-10∙5∙2-10∙3∙2-3∙5∙7,5)-6∙(7,5∙5∙7+3∙5∙(-20)+10∙7∙2-(-20) ∙5∙2-10∙3∙7-7,5∙7∙5)

detA = 4∙(140-300+350-350-210+200)-7∙(105-120+210-140+120-157,5)+5∙(75+60+150-100-60-112,5)-6∙(262,5-300+140+200-210-262,5)

detA = 4∙(-170)-7∙17,5+5∙12,5-6∙(-170)

detA = 280

Ответ: определитель матрицы равен 280

4.2 Решение, полученное с использованием разработанного программного обеспечения

Введя исходные данные в программу получим следующий результат: «Определитель матрицы равен: 280». Результат, полученный с использованием разработанной программы соответствует результату, вычисленному математически.

Вывод: разработанное программное обеспечение верно вычисляет определитель произвольной матрицы.


5. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЮ

Для запуска программы необходимо запустить файл Determinant.exe, дважды щелкнув по нему мышью. В появившемся окне при необходимости изменить порядок матрицы, введя значение в поле напротив надписи «Порядок матрицы» и нажав на кнопку «Изменить порядок матрицы». В ячейках таблицы ввести значения элементов матрицы. Вводимые данные должны являться действительными числами, содержать только цифры, знак « - » и разделитель целой и дробной части. После заполнения ВСЕХ элементов матрицы нажать кнопку «Расчет». Ответ будет написан под таблицей в формате: «Детерминант матрицы равен: -280,000»

Выход из программы осуществляется с помощью кнопки

.

Внешний вид окна программы представлен на рисунке 5.

Рис. 5. Внешний вид окна программы


ЗАКЛЮЧЕНИЕ

В данной работе были изучены численные методы нахождения определителя матрицы и выбран наиболее оптимальный, с точки зрения реализации его на компьютере – метод исключения с выбором главного элемента. Написана программа с использованием массивов. Данная программа позволяет определить детерминант матрицы размером N×N, размер матрицы задается пользователем, вводимые данные – действительные числа. Вычисление определителя матрицы является второй главной задачей линейной алгебры, и применяется при решении сложных систем линейных уравнений с несколькими неизвестными.


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Методические указания по выполнению курсовых работ по дисциплине «программирование» для студентов дневной формы обучения, обучающихся по программе направлений подготовки бакалавров 550200, 553000, 552800. Разработал О.С. Середин, к.ф.-м.н., доцент каф. АТМ. Тула 2003 г.

2. Бахвалов Н.С., Жидков Н.П. Кобельков Г.М. Численные методы. – М.: Лаборатория Базовых Знаний, 2000, – 624с.

3. Волосевич А.А. Язык ObjectPascal и система программирования Delphi. Учебное пособие. Минск: Белорусский государственный университет информатики и радиоэлектроники, 2003, - 61с.

4.

Курс лекций по дисциплине "вычислительная математика
. Тула 2007, - 162с.