Объектно-ориентированный модуль для работы с матрицами

Основные операции с матрицами. Проектирование объектно-ориентированного модуля для работы с матрицами в среде Delphi 7. Разработка программы, которая позволяет выполнять различные действия над матрицами. Описание интерфейса программы, исходный код модуля.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 15.01.2013
Размер файла 1014,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Содержание

Введение

1. Теоретическая часть

1.1 Матрицы. Основные обозначения

1.2 Основные операции над матрицами

2. Проектирование и разработка программы

2.1 Среда программирования

2.2 Проектирование объекта матрицы

2.3 Описание интерфейса

Заключение

Литература

Приложение А

Введение

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

В данной курсовой необходимо выполнить следующие задачи:

Проанализировать литературу и выявить основные понятия теории матриц.

Выявить основные операции с матрицами.

Спроектировать объектно-ориентированный модуль для работы с матрицами.

Разработать программу, которая позволяет выполнять различные действия над матрицами.

1 Теоретическая часть

1.1 Матрицы. Основные обозначения

Прямоугольную таблицу чисел (1)

будем называть матрицей. Если m = n, то матрица называется квадратной, а число m, называется ее порядком. В общем же случае матрица называется прямоугольной (с размерами ) или -матрицей. Числа, составляющие матрицу, называются ее элементами.

При двухиндексном обозначении элементов первый индекс всегда указывает номер строки, а второй индекс -- номер столбца, на пересечении которых стоит данный элемент.

Наряду с обозначениями матрицы (1) употребляют и сокращенное обозначение:

Часто матрицу (1) обозначают также одной буквой, например матрица A. Если A -- квадратная матрица порядка n, то будем писать

Определитель квадратной матрицы  будем обозначать так:  или .

Введем сокращенные обозначения для определителей, составленных из элементов данной матрицы:

(2)

Прямоугольную матрицу, состоящую из одного столбца

мы будем называть столбцевой и обозначать так: .

Прямоугольную матрицу, состоящую из одной строки , мы будем называть строчной и обозначать так: 

Квадратную матрицу, у которой все элементы, расположенные вне главной диагонали, равны нулю,

мы будем называть диагональной и обозначать так:  или .

1.2 Основные операции над матрицами

Определим основные операции над матрицами: сложение матриц, умножение матрицы на число и умножение матриц.

Пусть величины  выражаются через величины  при помощи линейного преобразования

, (5)

а величины  -- через те же величины  при помощи преобразования

. (6)

Тогда

. (7)

В соответствии с этим мы устанавливаем

Суммой двух прямоугольных матриц и  одинаковых размеров  называется матрица  тех же размеров, элементы которой равны суммам соответствующих элементов данной матрицы:

,

Если

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

Пример

.

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

Из определения сложения матриц непосредственно следует, что эта операция обладает переместительным и сочетательным свойствами:

1° ,

2° .

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

Операция сложения матриц естественным образом распространяется на случай любого числа слагаемых.

2. Умножим в преобразовании (5) величины  на некоторое число  из . Тогда

.

В соответствии с этим имеет место

Произведением матрицы  на число  из  называется матрица  элементы которой получаются из соответствующих элементов матрицы  умножением на число :

,

Если

Операция нахождения произведения матрицы на число называется умножением матрицы на число.

Пример

Легко видеть, что

1° ,

2° ,

3° .

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

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

Если  -- квадратная матрица порядка , а  -- число из , то

.

3. Пусть величины выражаются через величины  при помощи преобразования

(8)

а величины  -- через те же величины  при помощи формул

. (9)

Тогда, подставляя эти выражения для  в формулы (8), мы выразим  через  при помощи «составного» преобразования:

. (10)

В соответствии с этим имеет место

Произведением двух прямоугольных матриц

,

называется матрица

,

у которой элемент, стоящий на пересечении -й строки и -го столбца, равен «произведению» -й строки первой матрицы  на -й столбец второй матрицы :

Операция нахождения произведения данных матриц называется умножением матриц.

Квадратную матрицу -го порядка, у которой на главной диагонали стоят единицы, а все остальные элементы равны нулю, будем называть единичной матрицей и обозначать через  или просто . Название «единичная матрица» связано со следующим свойством матрицы : для любой прямоугольной матрицы

имеют место равенства

.

Очевидно,

Квадратную матрицу будем называть особенной, если . В противном случае квадратная матрица  называется неособенной.

Рассмотрим преобразование

.

Мы получили «обратное» преобразование для матрицы A. Матрицу коэффициентов этого преобразования

мы назовем обратной матрицей для матрицы .

Транспонирование матрицы (обозначение: AT) -- операция, при которой матрица отражается относительно главной диагонали, то есть

Если A матрица размера , то AT - матрица размера

2. Проектирование и разработка программы

2.1 Среда программирования

Данный курсовой проект был разработан в среде Delphi7 с базовым языком программирования Object Pascal. Эту среду удобно использовать для создания сложных приложений, базами данных, приложения масштаба предприятия. Delphi так же прост в обучении, как и многие другие, но при этом средства языка программирования Pascal позволяет использовать все современные возможности объектно-ориентированного программирования.

Delphi -- это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi -- строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.

Delphi прост и логичен. Основные конструкции языка четко выделяются в программе, что способствует хорошему восприятию написанного кода. Графический интерфейс Delphi отлично продуман, среда разработки предоставляет доступ только к тем участкам кода, с которыми необходимо работать, скрывая основную часть программы, которая создается автоматически самой разработкой.

2.2 Проектирование объекта матрицы

Для разработки программы мы применим объектный подход в программировании, т.е. матрица будет объектом, который содержит собственно сами элементы матрицы и операции над ними.

Элементы матрицы будут располагаться в массиве. Выберем для проектирования квадратные матрицы, так как найти определитель можно только для квадратных матриц.

Объект матрицу мы опишем в отдельном иодуле, и назовем его uMatrix.

Назовем наш класс объектов TMatrix.

Этот объект содержит такие данные как: размер матрицы, элементы матрицы.

Объект содержит следующие методы для работы с данными:

Загрузка данных из файла LoadFromFile(FName : string), в которую передается один параметр, имя файла.

Функция сложения Add(M2 : Tmatrix) : Tmatrix, результат которой передается как объект типа TMatrix. На вход функции вводится второе слагаемое.

Функция вычитания function Sub(M2 : Tmatrix) : TMatrix, на вход которой передается вычитаемое, а разность выводится как результат работы функции в виде объекта TMatrix

Функция умножения двух матриц function Mult(M2 : Tmatrix) : Tmatrix, которая принимает параметр, второй сомножитель, результат выводится в виде объекта TMatrix.

Функция вычисления обратной матрицы, не имеет параметров, выдает в результате обратную матрицу в виде объекта TMatrix. Обратная матрица вычисляется методом Гаусса.

Функция вычисления транспонированной матрицы Transp() : Tmatrix, без параметров, выдает в результате транспонированную матрицу, объект типа TMatrix.

Функция умножения матрицы на число NumMul(Num : Real) : TMatrix, принимает параметр, действительное число, на выходе объект матрица, типа TMatrix.

Функция вычисления определителя матрицы Det(M : Tmatrix): Real, принимает параметр, матрицу и выводит действительное число - определитель матрицы.

Процедура переставляющая местами строки Exchange_line(Nfirst, Nsecond: Integer) которая принимает два параметра номера строк, она переставляет строки в текущей матрице.

Функция getMatrix(M : TMatrix; Row, Col: Integer ):TMatrix, которая получает минор текущей матрицы по номеру строки и столбца.

Процедура инициализации элементов матрицы, массива Matrix, по умолчанию инициализируется матрица размером 3x3.

Объект TMatrix содержит массив элементов, который мы назовем Matrix.

2.3 Описание интерфейса

Интерфейс программы интуитивно понятный. При загрузке программы сразу же инициализируется и загружается из файла матрица размера 3x3. Программа представляет из себя окно, со вкладками, каждая вкладка содержит одну операцию с матрицей, элементы матрицы отображаются в TStringGrid, каждая ячейка содержит 1 элемент. рассмотрим по порядку все вкладки.

Первая вкладка позволяет загрузить матрицу из файла (рис.1 ). Файл находится в той же папке что и программа и называется input.txt. Можно выбрать размерность матрицы, позволяется выбрать значения от 2 до 8. По щелчку на кнопке загрузить, инициализируется и загружается матрица.

Рис. 1. Вкладка загрузки матрицы

Вторая вкладка позволяет рассчитать транспонированную матрицу. Матрица строится на основе исходной, загруженной на 1-й вкладке. Расчет происходит по щелчку по кнопке. Результат выводится во вторую таблицу как показано на рисунке 2.

РРис. 2. Вычисление транспонированной матрицы

Для умножения матрицы на число используется третья вкладка рисунок 3. Выбирается число, на которое необходимо умножить элементы матрицы, во второй таблице отображается результат.

Рис. 3. Умножение матрицы на число

Вычисление обратной матрицы происходит на следующей вкладке рисунок 4. При нажатии на кнопку вычисляется результат - обратная матрица.

Рис. 4. Вычисление обратной матрицы

На пятой вкладке происходит вычисление определителя матрицы рисунок 5. При нажатии на кнопку вычисляется определитель и записывается в компонент TLabel.

Рис. 5. Вычисление определителя

Суммирование матриц выполняется в следующей вкладке рисунок 6. Второе слагаемое (вторая матрица) загружается из файла input2.txt. По нажатию на кнопку происходит вычисление суммы матриц.

Рис. 6. Суммирование матриц

Разность матриц аналогична суммированию, данные для второй матрицы загружаются из файла input2.txt. Как показано на рисунке 7 результат отображается в третьей таблице.

Рис. 7. Вычитание матриц

Последняя, седьмая вкладка позволяет умножить две матрицы. Вторая матрица загружается из файла input2.txt. Результат отображается в третьей таблице рисунок 7.

Рис. 7. Вычисление произведения матриц

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

Заключение

В ходе работы над курсовой были выполнены следующие задачи. Был произведен анализ литературы и выявлены основные понятия теории матриц. Были выбраны основные операции с матрицами. Для реализации программы взяли квадратные матрицы, так как они более удобны для демонстрации возможностей работы с матрицами.

Спроектирован объект для хранения матрицы и выполнения операций с ней. Подготовлены функции и процедуры, реализующие эти операции.

Разработан модуль действий над матрицами, продуман интерфейс программы а так же реализована сама программа.

Литература

Гантмахер Ф.Р. Теория матриц. - М.: Наука, 1968. - 576 с.

Валентин Озеров «Советы по Delphi», 1999

Зуев Е.А. Программирование на языке Turbo Pascal 6.0,7.0. - М.: Радио и связь, Веста, 1993.

Фаронов В.В. Turbo Pascal 7.0. Начальный курс. - М.: Нолидж, 2000.

Фаронов В.В. «DELPHI. Программирование на языке высокого уровня». - Питер, 2005.

Бобровский С.И. Delphi 7. Учебный курс - Питер, 2007

Иллюстрированный онлайн учебник по Borland Delphi 7 с примерами, http://delphi.support.uz/

Приложение А

матрица модуль программа

Исходный код модуля для работы с матрицами

unit umatrix;

interface

uses Classes;

type

TMatrix = class(TComponent)

private

N : Integer; // Размерность матрицы

public

Matrix : array of array of Real; // Элементы матрицы

property Razmer : Integer read N;

procedure Init(Num : Integer = 3);

procedure ShowScreen;

procedure LoadFromFile(FName : string);

function Add(M2 : Tmatrix) : Tmatrix;

function Sub(M2 : Tmatrix) : TMatrix;

function Mult(M2 : Tmatrix) : tmatrix;

function Obrat(): Tmatrix;

function Transp() : Tmatrix;

function NumMul(Num : Real) : TMatrix;

function Det(M : Tmatrix): Real;

procedure Exchange_line(Nfirst, Nsecond: Integer);

function getMatrix(M : TMatrix; Row, Col: Integer ):TMatrix;

end;

implementation

procedure TMatrix.Init(Num : Integer = 3);

var i : Integer;

begin

N := Num;

SetLength(Matrix, N);

for i:=0 to N-1 do

SetLength(Matrix[i], N);

end;

procedure TMatrix.ShowScreen;

var i, j: Integer;

begin

for i := 0 to N-1 do

for j := 0 to N - 1 do

Writeln(Matrix[i,j]);

end;

procedure TMatrix.LoadFromFile(FName : string);

var

i,j : Integer;

F : TextFile;

begin

AssignFile(F, FName);

Reset(F);

for i := 0 to N - 1 do

begin

for j := 0 to N - 1 do

begin

Read(F, Matrix[i,j]);

end;

Readln(F);

end;

CloseFile(F);

end;

function TMatrix.Add(M2 : Tmatrix) : TMatrix;

var

i, j : Integer;

Msum : TMatrix;

begin

Msum := TMatrix.Create(Self);

Msum.Init(Razmer);

for i := 0 to N-1 do

for j := 0 to N-1 do

begin

Msum.Matrix[i,j] := Matrix[i,j] + M2.Matrix[i,j];

end;

Result := Msum;

end;

function TMatrix.Sub(M2 : Tmatrix): TMatrix;

var

M : TMatrix;

i, j : Integer;

begin

M := TMatrix.Create(Self);

M.Init(Razmer);

for i := 0 to N-1 do

for j := 0 to N-1 do

begin

M.Matrix[i,j] := Matrix[i,j] - M2.Matrix[i,j];

end;

Result := M;

end;

function TMatrix.Mult(M2 : Tmatrix) : TMatrix;

var

M : TMatrix;

i, j, k : Integer;

begin

M := TMatrix.Create(Self);

M.Init(M2.Razmer);

for i := 0 to M2.Razmer - 1 do

begin

for j := 0 to M2.Razmer - 1 do

begin

for k := 0 to M2.Razmer - 1 do

begin

M.Matrix[i,j] := M.Matrix[i,j] + Self.Matrix[i,k] * M2.Matrix[k,j];

end;

end;

end;

Result := M;

end;

function TMatrix.NumMul(Num : Real) : TMatrix;

var i, j : Integer;

M : TMatrix;

begin

M := TMatrix(Self);

M.Init(Razmer);

for i := 0 to N-1 do

begin

for j := 0 to N-1 do

begin

M.Matrix[i,j] := Num * Matrix[i,j];

end;

end;

Result := M;

end;

function TMatrix.Transp : TMatrix;

var

M : TMatrix;

i, j : Integer;

begin

M := TMatrix.Create(Self);

M.Init(Razmer);

for i := 0 to Razmer - 1 do

begin

for j := 0 to Razmer - 1 do

begin

M.Matrix[i,j] := Matrix[j,i];

end;

end;

Result := M;

//

end;

procedure TMatrix.Exchange_line(Nfirst, Nsecond: Integer);

var

temp : Real;

i : Integer;

begin

for i := 0 to Razmer -1 do begin

temp := Matrix[Nfirst, i];

Matrix[Nfirst, i] := Matrix[Nsecond, i];

Matrix[Nsecond, i] := temp;

end;

end;

function TMatrix.getMatrix(M : TMatrix; Row, Col: Integer ):TMatrix;

var

Res : TMatrix;

i, j : Integer;

ii, jj : Integer;

begin

Res := TMatrix.Create(nil);

Res.Init(M.Razmer - 1);

ii := 0; jj := 0;

for i := 0 to Res.Razmer - 1 do

begin

if i >= Row then ii := i + 1 else ii := i;

for j := 0 to Res.Razmer - 1 do

begin

if j >= Col then jj := j + 1 else jj := j;

Res.Matrix[i,j] := M.Matrix[ii, jj];

end;

end;

Result := Res;

end;

function TMatrix.Det(M : TMatrix): Real;

var

i, j, znak : Integer;

begin

if M.Razmer = 1

then Result := M.Matrix[1,1]

else

if M.Razmer = 2 then Result := M.Matrix[0,0]*M.Matrix[1,1] - M.Matrix[0,1] * M.Matrix[1,0]

else

begin for i :=0 to M.Razmer -1 do begin

if Odd(i+1) then znak := -1 else znak := 1;

Result := Result + znak * M.Matrix[i, 1] * Self.Det(M.getMatrix(M, i, 1));

end;

end;

end;

function TMatrix.Obrat(): TMatrix;

var

dop, Temp : TMatrix;

i, j, k : Integer;

koef, koefStr : Real;

begin

dop := TMatrix.Create(Self);

dop.Init(Self.Razmer);

for i := 0 to dop.Razmer - 1 do

begin

For j := 0 to dop.Razmer - 1 do begin

if (i <> j) then dop.Matrix[i,j] := 0

else dop.Matrix[i,j] := 1;

end;

end;

Temp := TMatrix.Create(self);

Temp.Init(Razmer);

For i := 0 to Razmer -1 do

for j := 0 to Razmer - 1 do

Temp.Matrix[i, j] := Matrix[i, j];

For i := 0 to Razmer - 2 do

begin

if Temp.Matrix[i,i] = 0 then

begin

Temp.Exchange_line(i, i+1);

dop.Exchange_line(i, i+1);

end;

koef := Temp.Matrix[i,i];

for j := 0 to Razmer - 1 do

begin

Temp.Matrix[i, j] := Temp.Matrix[i, j] / koef ;

dop.Matrix[i, j] := dop.Matrix[i, j] / koef ;

end;

for j := i + 1 to Razmer -1 do begin

koefStr := Temp.Matrix[j, i];

for k := 0 to Razmer - 1 do begin

Temp.Matrix[j,k] := Temp.Matrix[j,k] - koefStr*Temp.Matrix[i,k];

dop.Matrix[j,k] := dop.Matrix[j,k] - koefStr*dop.Matrix[i,k];

end;

end;

end;

koef := Temp.Matrix[Razmer - 1, Razmer - 1];

for k := 0 to Razmer - 1 do begin

Temp.Matrix[Razmer - 1, k] := Temp.Matrix[Razmer - 1, k] / koef;

dop.Matrix[Razmer - 1, k] := dop.Matrix[Razmer - 1, k] / koef;

end;

{}

for i := Razmer - 1 downto 1 do begin

for j := i - 1 downto 0 do begin

koefStr := Temp.Matrix[j, i];

for k := 0 to Razmer -1 do begin

Temp.Matrix[j, k] := Temp.Matrix[j,k] - Temp.Matrix[i,k]* koefStr;

dop.Matrix[j, k] := dop.Matrix[j,k] - dop.Matrix[i,k]* koefStr;

end;

end;

end;

{}

Result := dop;

end;

end.

Размещено на www.allbest.


Подобные документы

  • Обзор некоторых сведений о матрицах. Описание этапов работы с функциями. Проектирование программы для выполнения вычислений над матрицами в среде программирования MSVisualStudio 2008, при помощи языка программирования C++. Проверка результатов в Mathcad.

    курсовая работа [182,0 K], добавлен 06.04.2013

  • Проектирование программы для работы с матрицами, обладающей некоторым уровнем защиты, интуитивно понятным интерфейсом и легкостью управления. Набор функций в программе. Класс хранения матричных данных. Описание интерфейса, форма входа и главное окно.

    курсовая работа [2,0 M], добавлен 22.03.2015

  • Понятие матриц и операции, выполняемые с ними. Разработка программы для вычислений над матрицами в среде MS Visual Studio Express с применением языка программирования C++. Работа с библиотекой математического типа vector. Реализация перегрузки операций.

    курсовая работа [107,3 K], добавлен 22.12.2010

  • Принципы разработки и пример работы программы, реализующей основные операции алгебры матриц: сложение, вычитание, умножение, транспонирование, а также умножение матрицы на число. Функциональные модели и блок-схемы решения задачи операций над матрицами.

    курсовая работа [956,7 K], добавлен 25.01.2010

  • Основные типы модулей, использующиеся в среде программирования Delphi 6. Концепция объектно-ориентированного программирования. Разработка эскизного и технического проектов программы. Алгоритм выполнения операций сложения, вычитания и умножения матриц.

    курсовая работа [559,1 K], добавлен 03.01.2011

  • Основные действия над матрицами. Последовательность умножения вектора на матрицу. Спецификаторы доступа, которые используют для ограничения доступа к элементам класса. Перегрузка операций. Создание программы, реализующей работу с классом Matrix.

    курсовая работа [321,7 K], добавлен 26.01.2013

  • Анализ исходных данных. Определение структуры модуля для работы файлом. Разработка объектно-ориентированного приложения, использующего массив объектов, в среде Delphi. Модульная структура программного комплекса. Процедура сортировки методом вставки.

    курсовая работа [2,2 M], добавлен 20.09.2014

  • Процедура сложения и вычитания матриц (с учетом коэффициента перед матрицами). Основные концепции языка Turbo Pascal. Фортран как один из пионеров программирования Дейкстрой. Первый компилятор Паскаля на платформах DEC. Основные стандарты языка.

    контрольная работа [21,6 K], добавлен 08.03.2011

  • Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.

    отчет по практике [296,1 K], добавлен 19.04.2015

  • Предмет объектно-ориентированного программирования и особенности его применения в средах Паскаль, Ада, С++ и Delphi. Интегрированная среда разработки Delphi: общее описание и назначение основных команд меню. Процедуры и функции программы Delphi.

    курсовая работа [40,8 K], добавлен 15.07.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.