страница 1страница 2
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Похожие работы
|
Матрицы и алгебраические действия над ними с точки зрения информатики - страница №1/2
Министерство Просвещения Республики Молдова КИШИНЕВСКИЙ ТРАНСПОРТНЫЙ КОЛЛЕДЖ Кафедра Точных Наук математики и информатики Павлов Андрей Confirmat la şedinţa catedrei Disciplini Reale din_______2010 Şefa catedrei ___________/V.Candu КИШИНЕВ 2011
Введение В последнее время матрицы, как математический объект, стали играть немаловажную роль в различных науках. Их уникальность в том, что они позволяют оперировать не одной цифрой, числом или группой чисел, а целыми массивами, которые могут описывать данные различной природы. Сегодня без матриц немыслима трёхмерная компьютерная графика, в которой необходимо приводить в действие сотни и тысячи объектов. В аналитической экономике матрицы также играют немаловажную роль при решении некоторых финансовых задач. Физика, астрономия, биология, химия, социология и множество других наук имеют свои понятии матриц и оперируют с ними. В работе с матрицами есть и свои интересы, и свои трудности. Конечно, при умножении матрицы 22 на подобную легко вычислить результат. А если даны две матрицы размерностью 5050? Можно вычислить, хотя процесс займет порядочную уйму времени. В таких случаях на помощь приходят программисты с их программными и техническими средствами. Данная методическая разработка призвана помочь учащимся, которые более или менее разбираются в компьютерной технике, облегчить работу с матрицами, ускорить процесс обработки информации, что в наше время является таким необходимым фактом. Считаю также, что данная работа должна заинтересовать как учителей математики, так и учителей информатики. Так как в данной работе описывается математическая база и постановка её на компьютере. §1. Матрица – различные определения. Само понятие матрицы является очень древним, восходящем к античной древности. До сих пор ученые лингвисты спорят матрица – слово, пришедшее из греческой или латинской лексики. Но так или иначе, все сходятся в одном, что матрица (в оригинале matrix) толкуется как «первопричина», «начало начал». В русский язык слово матрица пришло из английского и имеет ряд следующих переводов (в зависимости от словарей): matrix [ˊmeɪtrɪks] 1) спец. ма́трица; фо́рма 2) биол. межкле́точное вещество́ тка́ни 3) анат. ма́тка 4) геол. матери́нская поро́да; цементи́рующая среда́ 5) стр. раство́р, вя́жущее вещество́ Если заглянуть в словари различных наук, то можно найти следующие определения понятия матрица:
В следующих параграфах мы будем рассматривать матрицы в контексте математики и информатики. §2. Матрицы в математике. Понятие матрицы впервые появилось в середине XIX века в работах Уильяма Гамильтона и Артура Кэли. Фундаментальные результаты в теории матриц принадлежат Вейерштрассу, Жордану, Фробениусу. Термин «матрица» ввел Джеймс Сильвестр в 1850 г., под которой понималась некоторая таблица чисел. 2.1 Определение матрицы и их виды. Матрицей A размера n m называется совокупность n * m чисел, расположенных в виде таблицы, состоящей из n строк и m столбцов. Краткие обозначения матриц: A = ( a i , j ) A = [ a i , j ] ( i = 1 , 2 , ... , n; j = 1 , 2 , ... m ) Элемент матрицы a i , j - число, расположенное в i-й строке и j-ом столбце. Размерность матрицы определяется числом строк и столбцов, так если у матрицы две строки и три столбца, то мы имеем дело с матрицей два на три. Диагональная (все элементы матрицы за исключением главной диагонали равны нулю): D = diag ( d1 , d2 , ... , dn ) = Единичная (элементы главной диагонали равны единице, все остальные равны нулю): E = I = Верхняя треугольная (все элементы находящиеся ниже главной диагонали равны нулю): Нижняя треугольная (все элементы находящиеся выше главной диагонали равны нулю): Нулевая матрица О (матрица, все элементы которой равны нулю): Матрица-строка (вектор-строка) - матрица размером 1 x m A = [a1, a2, ... , am] Матрица-столбец (вектор-столбец) - матрица размером n x 1: Симметричная – квадратная матрица у которой элементы, симметричные относительно главной диагонали равны, т.е. i , j = 1, 2, ... , n a i , j = a j , i 2.2 Алгебраические операции над матрицами. Пусть дана матрица определитель данной матрицы равен Матрица A называется невырожденной (неособой), если DA 0. Если же DA = 0, то матрица A - особая (вырожденная). называется квадратной матрицей второго порядка, а матрица - квадратной матрицей третьего порядка. Для упрощения выкладок определения будут даваться для матриц третьего порядка. Если элементы квадратной матрицы удовлетворяют условию amn = anm, то матрица называется симметрической. Две матрицы считаются равными ( A = B ) если равны их соответственные элементы, т.е. когда anm = bnm ( m = 1, 2, 3; n = 1, 2, 3 ). Произведением числа m на матрицу A называется матрица, определяемая равенством Пример: Дано число а=2 и матрица . Требуется перемножить данное число и матрицу. Решение: Новая матрица С получится, исходя из формулы аВ, т.е. Суммой двух матриц A и B называется матрица, определяемая равенством Пример: Пусть заданы две матрицы и . Требуется найти сумму заданных матриц. Решение: Новая матрица С получится, исходя из формулы сi,j=ai,j+bi,j, где ai,j А, bi,j В, т.е. Произведение двух матриц A и B обозначается символом AB и определяется равенством т.е. элемент матрицы-произведения, стоящий в i-й строке и j-м столбце, равен сумме произведений соответствующих элементов i-й строки матрицы A и j-го столбца матрицы B. Произведение матриц АВ имеет смысл только тогда, когда число столбцов матрицы А равно числу строк матрицы В. В итоге получается матрица С, у которой число строк совпадает с числом строк матрицы А, а число столбцов с числом столбцов матрицы В. Пример: Матрицу можно умножить на матрицу , так как количество столбцов первой матрицы совпадает с числом строк второй матрицы. ABBA. Пример: Пусть требуется перемножить две матрицы и . Покажем также, что ABBA. Решение: Исходя из определения умножения двух матриц получим: Таким образом, исходя из сравнения элементов двух результирующих матриц, можно заключить, что произведение матриц АВ отличается от произведения ВА. Матрица-столбец имеет вид: Произведение AX определяется равенством Это означает, что матрицу можно умножать и на вектор. Этот факт широко применяется при решении систем линейных уравнений. §3. Матрицы в информатике. Так как матрицы в научно-технической жизни используются широко, то для ускорения работы с ними были разработаны компьютерные алгоритмы, которые реализуются по средствам вычислительной техники. В самом же мире программирования матрицы широко используются в трёхмерном моделировании и в системах слежения за объектами (так называемые службы GPS). 3.1 Определение матриц с точки зрения программирования. В информатике матрицы зачастую называют массивами. Различают одномерные массивы, содержащие элементы в одной строке и именуемые вектором, двумерные массивы, элементы которых располагаются по строкам и столбцам, которые и называются матрицами, и многомерные массивы сложной структуры. Массивы можно рассматривать как формальное объединение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое. К необходимости применения массивов мы приходим всякий раз, когда требуется связать и использовать целый ряд родственных величин. Например, результаты многократных замеров температуры воздуха в течение года удобно рассматривать как совокупность вещественных чисел, объединенных в один сложный объект - массив измерений. При описании массива необходимо указать общее число входящих в массив элементов и тип этих элементов. Структура имени массива следующая <�имя массива> : array [<диапазон(ы) индексов>] of <�тип элементов>; Например: Var A:array [1..10] of intefer; B:array [1..3,1..3] of char; Как видим, при описании массива используются зарезервированные слова ARRAY и OF (массив, из). За словом ARRAY в квадратных скобках указывается тип-диапазон, с помощью которого компилятор определяет общее число элементов массива. Тип-диапазон задается левой и правой границами изменения индекса массива, так что массив А состоит из 10 элементов, массив В - из двух диапозонов каждый из которых содержит по три значения. За словом OF указывается тип элементов, образующих массив. Доступ к каждому элементу массива в программе осуществляется с помощью индекса - целого числа (точнее, выражения порядкового типа, см. гл.4), служащего своеобразным именем элемента в массиве (если левая граница типа-диапазона равна 1, индекс элемента совпадает с его порядковым номером). При упоминании в программе любого элемента массива сразу за именем массива должен следовать индекс элемента в квадратных скобках, например: var b: array [0..40] of Char; begin b[17] := ' F ' ; end. В правильно составленной программе индекс не должен выходить за пределы, определенные типом-диапазоном. Например, можно использовать элементы В[38], но нельзя В[41]. Задание значений переменной типа массив может осуществляться с клавиатуры, путем генерирования случайным образом либо иным способом. Когда значения элементов задаются с клавиатуры или генерируются случайным образом, необходима организация цикла, в котором последовательно происходит обращение к каждому элементу массива. Вывод значений элементов массива на экран или в файл также происходит в цикле. При написании программ необходимо следить за тем, чтобы значения индексов не превышали границ, указанных при объявлении массива, так как выход индекса за границы массива приводит к сбою в работе программы. Контроль значений индексов массивов можно организовать при помощи директивы компилятора {$R+}, которая приводит к проверке всех индексных выражений на соответствие их значений диапазону индекса. Матрица, по сути, является двумерным массивом элементов, поэтому для работы с матрицей будем использовать двумерный массив. Правила создания, обработки двумерных массивов, в общем, остаются такими же, как и для одномерных массивов. Отличие состоит в количестве индексов. Объявление двумерного массива можно осуществлять двумя способами. Первый предполагает объявление одномерного массива, а затем использование этого типа для объявления типа-массива массивов: Однако проще сразу объявить тип-массив, описывающий матрицу, состоящую из 5 строк и 10 столбцов: Type matr = array[1..5,1..10] of integer; Var a: matr; Доступ к элементам двумерного массива также может осуществляться двумя способами: a[[1],[1]] или гораздо проще a[1,1] В обоих случаях первый индекс указывает номер строки, второй – номер столбца матрицы. В памяти элементы матрицы располагаются последовательно: a[1,1], a[1,2],…, a[1,10], a[2,1], a[2,2],…, a[5,10] однако последовательный доступ к элементам матрицы может быть организован как в порядке расположения их в памяти, так и иным способом. Для организации доступа последовательно ко всем элементам матрицы организуются два цикла, причем порядок «вложения» циклов определяется тем, как осуществляется перебор элементов: по столбцам или по строкам. Чаще используется проход по матрице по строкам, т. е. сначала в первой строке перебираются элементы всех столбцов, затем – во второй строке и т. д. В этом случае «внешним» будет цикл по строкам (т. е. по индексу i), а вложенным – цикл по столбцам (т. е. по j). Ниже представлен пример заполнения матрицы значениями, вводимыми с клавиатуры, причем элементы строк матрицы могут вводиться в строчку через пробел, а для ввода значений новой строки надо нажать клавишу
матрицами. Так как в основе программного определения матрицы лежит математическое, то алгоритм написания программ, выражающих действия над матрицами, также имеет математическую базу. Рассмотрим программы, реализующие действия над матрицами из пункта 2.2. Все программы будем записывать на языке программирования Турбо Паскаль, так как он является самым распространенным языком изучения в школах. Умножение числа на матрицу. Алгоритм:
b[i,j]=k*a[i,j];
Листинг программы Uses crt; var a,b:array [1..10,1..10] of real; {задаем двумерные массивы максимального размера 10Х10, элементы которого действительные числа} k: real; {действительное число для умножения} n,m:integer; {число строк и столбцов в массиве} i,j:integer; {счетчики для обработки строк и столбцов} begin clrscr; write('введите число k= '); readln(k); writeln ('введите размерность матрицы n*m'); write('введите число строк n<10: ');readln(n); write('введите число столбцов m<10: ');readln(m); writeln ('введите элементы матрицы ',n,'*',m); for i:=1 to n do begin writeln ; for j:=1 to m do read(a[i,j]); end; {вывод матрицы А на экран} writeln ('------Matrix A------'); for i:=1 to n do begin writeln; for j:=1 to m do write (a[i,j]:6:2); end; {операция умножения числа k на матрицу А} for i:=1 to n do for j:=1 to m do b[i,j]:=k*a[i,j]; writeln; {вывод матрицы B на экран} writeln ('------Matrix B------'); for i:=1 to n do begin writeln; for j:=1 to m do write(b[i,j]:6:2); end; readkey; end. Результаты
введите размерность матрицы n*m введите число строк n<10: 2 введите число столбцов m<10:2 введите элементы матрицы 2*2 1 2 3 4 Сложение матриц Алгоритм:
c[i,j]= b[i,j]+a[i,j];
Листинг программы Uses crt; var a, b, c:array [1..10,1..10] of real; {задаем двумерные массивы максимального размера 10Х10, элементы которого действительные числа} n, m:integer; {число строк и столбцов в массиве} i, j:integer; {счетчики для обработки строк и столбцов} begin clrscr; writeln ('введите размерность матрицы n*m'); write('введите число строк n<10: ');readln(n); write('введите число столбцов m<10: ');readln(m); writeln ('введите элементы матрицы А ',n,'*',m); {ввод матрицы А} for i:=1 to n do begin writeln ; for j:=1 to m do read(a[i,j]); end; writeln; writeln ('введите элементы матрицы В ',n,'*',m); {ввод матрицы В} for i:=1 to n do begin writeln ; for j:=1 to m do read(b[i,j]); end;writeln; writeln ('------Matrix A------'); {вывод матрицы А на экран} for i:=1 to n do begin writeln; for j:=1 to m do write (a[i,j]:6:2); end; writeln; writeln ('------Matrix B------'); {вывод матрицы В на экран} for i:=1 to n do begin writeln; for j:=1 to m do write (b[i,j]:6:2); end; {операция сложения двух массивов} for i:=1 to n do for j:=1 to m do c[i,j]:=a[i,j]+b[i,j]; writeln; writeln ('------Matrix C------'); {вывод матрицы С на экран} for i:=1 to n do begin writeln; for j:=1 to m do write(c[i,j]:6:2); end; readkey; end. Результаты введите размерность матрицы n*m введите число строк n<10: 3 введите число столбцов m<10:3 введите элементы матрицы А 3*3 1 2 3 3 4 5 5 6 7 введите элементы матрицы В 3*3 2 3 0 0 -1 2 -2 6 -1
Умножение матрицы на матрицу. следующая страница >> |
|