Министерство Просвещения Республики Молдова КИШИНЕВСКИЙ ТРАНСПОРТНЫЙ КОЛЛЕДЖ Кафедра Точных Наук Методическая разработка по математике и информатике на тему: «Матрицы и алгебраические действия над ними с точки зрения информатики» Разработал преподаватель математики и информатики Павлов Андрей Confirmat la şedinţa catedrei Disciplini Reale din_______2010 Şefa catedrei ___________/V.Candu КИШИНЕВ 2011 Содержание 2 Введение §1. Матрица – различные определения. 3 §2. Матрицы в математике 6 2.1 Определение матрицы и их виды. 2.2 Алгебраические операции над матрицами. §3. Матрицы в информатике. 3.1 Определение матриц с точки зрения программирования. 3.2 Программы, реализующие алгебраические действия над матрицами. §4. Использование специализированных математических пакетов для работы с матрицами. 4.1 Использование MathCAD при работе с матрицами. 4.2 Встроенные функции MS Excel для умножения матриц. Некоторые задачи экономики. 4.3 Калькулятор для умножения матриц. 6 8 12 12 15 22 22 24 28 Заключение 29 Литература 30 Интернет-ресурсы 31 Программное обеспечение 31 2 Введение В последнее время матрицы, как математический объект, стали играть немаловажную роль в различных науках. Их уникальность в том, что они позволяют оперировать не одной цифрой, числом или группой чисел, а целыми массивами, которые могут описывать данные различной природы. Сегодня без матриц немыслима трёхмерная компьютерная графика, в которой необходимо приводить в действие сотни и тысячи объектов. В аналитической экономике матрицы также играют немаловажную роль при решении некоторых финансовых задач. Физика, астрономия, биология, химия, социология и множество других наук имеют свои понятии матриц и оперируют с ними. В работе с матрицами есть и свои интересы, и свои трудности. Конечно, при умножении матрицы 22 на подобную легко вычислить результат. А если даны две матрицы размерностью 5050? Можно вычислить, хотя процесс займет порядочную уйму времени. В таких случаях на помощь приходят программисты с их программными и техническими средствами. Данная методическая разработка призвана помочь учащимся, которые более или менее разбираются в компьютерной технике, облегчить работу с матрицами, ускорить процесс обработки информации, что в наше время является таким необходимым фактом. Считаю также, что данная работа должна заинтересовать как учителей математики, так и учителей информатики. Так как в данной работе описывается математическая база и постановка её на компьютере. 3 §1. Матрица – различные определения. Само понятие матрицы является очень древним, восходящем к античной древности. До сих пор ученые лингвисты спорят матрица – слово, пришедшее из греческой или латинской лексики. Но так или иначе, все сходятся в одном, что матрица (в оригинале matrix) толкуется как «первопричина», «начало начал». В русский язык слово матрица пришло из английского и имеет ряд следующих переводов (в зависимости от словарей): matrix [ˊmeɪtrɪks] 1) спец. ма́трица; фо́рма 2) биол. межкле́точное вещество́ тка́ни 3) анат. ма́тка 4) геол. матери́нская поро́да; цементи́рующая среда́ 5) стр. раство́р, вя́жущее вещество́ Если заглянуть в словари различных наук, то можно найти следующие определения понятия матрица: Матрица (искусство и техника) — образец, модель, штамп, шаблон, форма, инструмент в серийном производстве объектов искусства и техники. Матрица (диск) — название специального диска, служащий образцом для создания дисков (CD, DVD и др.) с записью (музыки, фильмов и т.п.) при их серийном или массовом производстве. Матрица (издательское дело) — вогнутая часть формы, в которой пластическое тело формуется давлением, служащее типографским шрифтом. Матричная киноплёнка (в плёночной фотографии и кинематографе) — рельефное фотографическое изображение, получаемое в желатиновом слое специального фотоматериала. 4 Матрица (математика)— система элементов aij, расположенных в виде прямоугольной таблицы. Матрица (программирование) в программировании — двумерный индексный массив. Матрица (электроника) — набор вертикальных Y и горизонтальных (условно) X линий (проводников), с возможностью замыкания в точках их пересечений, выводы которых подключены к выводам контроллера, который осуществляет их периодический опрос. Замыкание (скажем, при нажатии) какой-либо линии X на линию Y означает подачу команды контроллеру на исполнение. Применяется для экономии выводов контроллеров, используется в основном в различных клавиатурах. Матрица (экономика) в экономике — таблицы, предназначенные для диагностики состояния. В следующих параграфах мы будем рассматривать матрицы в контексте математики и информатики. 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-ом столбце. Размерность матрицы определяется числом строк и столбцов, так если у матрицы две строки и три столбца, то мы имеем дело с матрицей два на три. Если у матрицы число строк и столбцов одинаково ( n = m ), то такая матрица называется квадратной. Типы квадратных матриц. Диагональная (все элементы матрицы за исключением главной диагонали равны нулю): D = diag ( d1 , d2 , ... , dn ) = 6 Единичная (элементы главной диагонали равны единице, все остальные равны нулю): E=I= Верхняя треугольная (все элементы находящиеся ниже главной диагонали равны нулю): Нижняя треугольная (все элементы находящиеся выше главной диагонали равны нулю): Нулевая матрица О (матрица, все элементы которой равны нулю): Матрица-строка (вектор-строка) - матрица размером 1 x m A = [a1, a2, ... , am] Матрица-столбец (вектор-столбец) - матрица размером n x 1: Симметричная – квадратная матрица у которой элементы, симметричные относительно главной диагонали равны, т.е. i , j = 1, 2, ... , n a i , j = a j , i 7 2.2 Алгебраические операции над матрицами. Пусть дана матрица определитель данной матрицы равен Матрица A называется невырожденной (неособой), если DA 0. Если же DA = 0, то матрица A - особая (вырожденная). Матрица называется квадратной матрицей второго порядка, а матрица - квадратной матрицей третьего порядка. Для упрощения выкладок определения будут даваться для матриц третьего порядка. Если элементы квадратной матрицы удовлетворяют условию amn = anm, то матрица называется симметрической. Две матрицы считаются равными ( A = B ) если равны их соответственные элементы, т.е. когда anm = bnm ( m = 1, 2, 3; n = 1, 2, 3 ). 8 Произведением числа m на матрицу A называется матрица, определяемая равенством 2 3 0 Пример: Дано число а=2 и матрица B 1 2 1 . Требуется перемножить 0 3 2 данное число и матрицу. Решение: Новая матрица С получится, исходя из формулы аВ, т.е. 2 3 2 0 4 6 0 2 3 0 2 2 C aB 2 1 2 1 2 1 2 2 2 1 2 4 2 0 3 2 2 0 2 3 2 2 0 6 4 Суммой двух матриц A и B называется матрица, определяемая равенством 3 4 2 2 3 0 Пример: Пусть заданы две матрицы A 1 3 0 и B 1 2 1 . 5 2 0 3 2 1 Требуется найти сумму заданных матриц. Решение: Новая матрица С получится, исходя из формулы сi,j=ai,j+bi,j, где ai,j А, bi,j В, т.е. 3 4 2 2 3 0 3 2 4 3 2 0 5 7 2 C A B 1 3 0 1 2 1 1 1 3 2 0 1 0 1 1 5 2 1 2 5 5 1 0 3 2 5 0 2 3 3 9 Произведение двух матриц A и B обозначается символом AB и определяется равенством т.е. элемент матрицы-произведения, стоящий в i-й строке и j-м столбце, равен сумме произведений соответствующих элементов i-й строки матрицы A и j-го столбца матрицы B. Произведение матриц АВ имеет смысл только тогда, когда число столбцов матрицы А равно числу строк матрицы В. В итоге получается матрица С, у которой число строк совпадает с числом строк матрицы А, а число столбцов с числом столбцов матрицы В. 1 2 3 Пример: Матрицу 0 1 2 можно умножить на матрицу 4 3 1 1 4 2 3 , так как 1 0 количество столбцов первой матрицы совпадает с числом строк второй матрицы. По отношению к произведению двух матриц переместительный закон не выполняется: ABBA. 10 Пример: Пусть требуется перемножить две матрицы 2 1 3 0 1 2 A 0 3 1 и B 1 2 3 . 4 5 2 1 0 2 Покажем также, что ABBA. Решение: Исходя из определения умножения двух матриц получим: 2 1 3 0 1 2 2 0 ( 1) ( 1) 3 1 2 1 ( 1) 2 3 0 2 2 ( 1) 3 3 2 AB 0 3 1 1 2 3 0 0 3 ( 1) 1 1 0 1 3 2 1 0 0 2 3 3 1 2 4 5 2 1 0 2 4 0 5 ( 1) 2 1 4 1 5 2 2 0 4 2 5 3 2 2 0 7 4 AB 2 6 11 3 14 27 0 ( 1) 1 3 2 5 0 3 11 2 2 0 1 2 2 1 3 0 2 1 0 2 4 BA 1 2 3 0 3 1 ( 1) 2 2 0 3 4 ( 1) ( 1) 2 3 3 5 ( 1) 3 2 1 3 2 1 0 2 4 5 2 1 2 0 0 2 4 1 ( 1) 0 3 2 5 1 3 0 1 2 2 8 13 3 BA 10 22 5 10 9 7 Таким образом, исходя из сравнения элементов двух результирующих матриц, можно заключить, что произведение матриц АВ отличается от произведения ВА. Матрица-столбец имеет вид: Произведение AX определяется равенством Это означает, что матрицу можно умножать и на вектор. Этот факт широко применяется при решении систем линейных уравнений. 11 §3. Матрицы в информатике. Так как матрицы в научно-технической жизни используются широко, то для ускорения работы с ними были разработаны компьютерные алгоритмы, которые реализуются по средствам вычислительной техники. В самом же мире программирования матрицы широко используются в трёхмерном моделировании и в системах слежения за объектами (так называемые службы GPS). 3.1 Определение матриц с точки зрения программирования. В информатике матрицы зачастую называют массивами. Различают одномерные массивы, содержащие элементы в одной строке и именуемые вектором, двумерные массивы, элементы которых располагаются по строкам и столбцам, которые и называются матрицами, и многомерные массивы сложной структуры. Массивы можно рассматривать как формальное объединение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое. К необходимости применения массивов мы приходим всякий раз, когда требуется связать и использовать целый ряд родственных величин. Например, результаты многократных замеров температуры воздуха в течение года удобно рассматривать как совокупность вещественных чисел, объединенных в один сложный объект - массив измерений. При описании массива необходимо указать общее число входящих в массив элементов и тип этих элементов. Структура имени массива следующая <имя массива> : array [<диапазон(ы) индексов>] of <тип элементов>; Например: Var A:array [1..10] of intefer; B:array [1..3,1..3] of char; Как видим, при описании массива используются зарезервированные слова ARRAY и OF (массив, из). За словом ARRAY в квадратных скобках указывается 12 тип-диапазон, с помощью которого компилятор определяет общее число элементов массива. Тип-диапазон задается левой и правой границами изменения индекса массива, так что массив А состоит из 10 элементов, массив В - из двух диапозонов каждый из которых содержит по три значения. За словом OF указывается тип элементов, образующих массив. Доступ к каждому элементу массива в программе осуществляется с помощью индекса - целого числа (точнее, выражения порядкового типа, см. гл.4), служащего своеобразным именем элемента в массиве (если левая граница типадиапазона равна 1, индекс элемента совпадает с его порядковым номером). При упоминании в программе любого элемента массива сразу за именем массива должен следовать индекс элемента в квадратных скобках, например: var b: array [0..40] of Char; begin b[17] := ' F ' ; end. В правильно составленной программе индекс не должен выходить за пределы, определенные типом-диапазоном. Например, можно использовать элементы В[38], но нельзя В[41]. Задание значений переменной типа массив может осуществляться с клавиатуры, путем генерирования случайным образом либо иным способом. Когда значения элементов задаются с клавиатуры или генерируются случайным образом, необходима организация цикла, в котором последовательно происходит обращение к каждому элементу массива. Вывод значений элементов массива на экран или в файл также происходит в цикле. При написании программ необходимо следить за тем, чтобы значения индексов не превышали границ, указанных при объявлении массива, так как выход индекса за границы массива приводит к сбою в работе программы. Контроль значений индексов массивов можно организовать при помощи директивы компилятора {$R+}, которая приводит к проверке всех индексных выражений на соответствие их значений диапазону индекса. 13 Матрица, по сути, является двумерным массивом элементов, поэтому для работы с матрицей будем использовать двумерный массив. Правила создания, обработки двумерных массивов, в общем, остаются такими же, как и для одномерных массивов. Отличие состоит в количестве индексов. Объявление двумерного массива можно осуществлять двумя способами. Первый предполагает объявление одномерного массива, а затем использование этого типа для объявления типа-массива массивов: Type mas = array[1..10] of integer; matr = array[1..5] of mas; Var a: matr; Однако проще сразу объявить тип-массив, описывающий матрицу, состоящую из 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). Ниже представлен пример заполнения матрицы значениями, вводимыми с клавиатуры, причем элементы строк матрицы могут 14 вводиться в строчку через пробел, а для ввода значений новой строки надо нажать клавишу <Enter> for i:=1 to 5 do begin for j:=1 to 10 do read(a[i,j]); readln end; 3.2 Программы, реализующие алгебраические действия над матрицами. Так как в основе программного определения матрицы лежит математическое, то алгоритм написания программ, выражающих действия над матрицами, также имеет математическую базу. Рассмотрим программы, реализующие действия над матрицами из пункта 2.2. Все программы будем записывать на языке программирования Турбо Паскаль, так как он является самым распространенным языком изучения в школах. Умножение числа на матрицу. Алгоритм: 1) Введем все данные; 2) Запишем блок, реализующий умножение числа на матрицу. Т. е. если у нас есть двумерный массив А и его элементы необходимо умножить на некоторое заданное число k, то мы берем новый массив B с элементами b[i,j]=k*a[i,j]; 3) Выведем результат. 15 Листинг программы 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. элементы Результаты введите введите введите введите введите 1 2 3 4 ---Matrix A--- число k=3 размерность матрицы n*m число строк n<10: 2 число столбцов m<10:2 элементы матрицы 2*2 1.00 3.00 16 2.00 4.00 ---Matrix B--3.00 9.00 6.00 12.00 Сложение матриц Алгоритм: 4) Введем все данные; 5) Запишем блок, реализующий сложение матриц. Т. е. если у нас есть двумерные массивы А и В (причем размерности матриц должны совпадать), элементы которых нам надо сложить, то мы берем новый массив С с элементами c[i,j]= b[i,j]+a[i,j]; 6) Выведем результат. Листинг программы 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; 17 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. Результаты введите введите введите введите 1 2 3 3 4 5 5 6 7 введите 2 3 0 0 -1 2 -2 6 -1 размерность матрицы n*m число строк n<10: 3 число столбцов m<10:3 элементы матрицы А 3*3 элементы матрицы В 3*3 ---Matrix A--1.00 3.00 5.00 2.00 4.00 6.00 3.00 5.00 7.00 ---Matrix B--2.00 3.00 0.00 0.00 -1.00 2.00 -2.00 6.00 -1.00 18 ---Matrix С--3.00 5.00 3.00 3.00 3.00 12.00 3.00 7.00 6.00 Умножение матрицы на матрицу. Алгоритм Элемент матрицы-результата, расположенный на I-й строке и J-м столбце, вычисляется так: 1. Берем I-ю строку 1-й матрицы и J-й столбец 2-й матрицы (считая слеванаправо и сверху-вниз). И вычисляем их скалярное произведение. То есть произведение 1-го элемента строки на 1-й элемент столбца плюс произведение 2-го элемента строки на 2-й элемент столбца и т.д. То есть результат есть сумма произведений элементов строки и элементов столбца с одинаковыми номерами. 2. Количество элементов строки и столбца должно быть одинаково, иначе умножение этих матриц невозможно. То есть число строк 2-й матрицы должно равняться числу столбцов 1-й (K). 3. Обозначим число строк 1-й матрицы: N, число столбцов 2-й: M. Матрицарезультат будет иметь N строк и M столбцов. Чтобы вычислить все элементы матрицы-результата, нужно пробежать все значения I (от 1 до N) и J (от 1 до M). 4. При вычислении суммы произведений нужна вспомогательная переменная. Назовем её Summa. Листинг программы Uses CRT; Const Max=50; Var AA,BB,CC: array [1..Max,1..Max] of Double; {то есть место для матриц выделяем с запасом} ii,jj,kk,nn,mm,ll : integer; Summa: double; begin writeln ('Программа умножает матрицу A на матрицу B'); write('Введите число строк 1-й матрицы - A (<=50)-> ');readln(NN); write('Введите число столбцов 1-й матрицы - A (<=50)->'); readln(KK); write('Введите число столбцов 2-й матрицы - B (<=50)-> '); readln(MM); {Вспомним, что число столбцов матрицы А равно числу строк матрицы В} writeln('Введите 1-ю матрицу (A):'); for ii:=1 to nn do for jj:=1 to kk do begin write('Введите A[',ii,',',jj,'] --> '); readln(AA[ii,jj]); 19 end; writeln('Введите 2-ю матрицу (B):'); for ii:=1 to kk do for jj:=1 to mm do begin write('Введите B[',ii,',',jj,'] --> '); readln(BB[ii,jj]); end; {Вычисляем элементы матрицы-результата} for ii:=1 to nn do for jj:=1 to mm do begin Summa:= 0; for ll:= 1 to kk do Summa:= Summa + AA[ii,ll]*BB[ll,jj]; CC[ii,jj] := Summa; end; {Выводим матрицу-результат:} writeln('---- Результат: -----'); for ii:=1 to nn do begin for jj:=1 to mm do write(CC[ii,jj]:8:2); writeln; end; readln; end. ---- Результат: ---7 3 2 2 3 2 29 50 2 4 6 1 * 2 6 = 20 57 1 1 4 5 1 4 9 49 0 5 20 Для умножения матрицы на вектор используют следующую программу. uses crt; var A:array[1..50,1..50] of real; b,Ab:array[1..50]of real;n,i,j:integer; begin clrscr; randomize; write('Vvedite razmernost n='); readln(n); writeln('Matrica A:'); for i:=1 to n do begin for j:=1 to n do begin A[i,j]:=random(10)+random-3; write(A[i,j]:6:2); end; writeln; end; writeln('Vector b:'); for i:=1 to n do begin if odd(i) then b[i]:=1/(i*i+2) {если нечетное} else if not odd(i) then b[i]:=1/i; {если четное} write(b[i]:6:2); end; writeln; writeln('Vector Ab:'); for i:=1 to n do begin Ab[i]:=0; for j:=1 to n do Ab[i]:=Ab[i]+A[i,j]*b[j]; {произведение матрицы на вектор} write(Ab[i]:6:2); end; readln end. 21 §4. Использование специализированных математических пакетов для работы с матрицами. Итак, выше были рассмотрены программы которые реализуют действия над матрицами. Однако, одних программ для решения задач прикладного характера недостаточно. Ведь, не каждый из нас программист или обладатель программных компиляторов (как, то Турбо Паскаль или Си плюс). Но вот MS Excel или MathCAD найдется, если не у каждого, то у каждого второго точно. Я уже не говорю о всевозможных калькуляторах, которых в Интернете бесчисленное множество. Само собой не все программы показывают математический аппарат вычислений, а сразу выдают ответ. Но поверьте мне, что биологу или социологу и дела нет до расчетов им сразу необходим ответ. В этом параграфе мы рассмотрим некоторые программные средства в которые встроен матричный аппарат. 4.1 Использование MathCAD при работе с матрицами. Для тех кто забыл, или не знает, напомним MathCAD является математическим редактором, позволяющим проводить разнообразные научные и инженерные расчеты, начиная от элементарной арифметики и заканчивая сложными реализациями численных методов. Так, с помощью данного математического редактора можно выполнять действия над матрицами. Для работы с матрицами, после запуска необходимо программы активизировать панель Матрицы, кнопки Панель нажатием векторов и матриц с панели инструментов Математические (см. рисунок), или из опций меню Вставить 22 выбираем команду Матрица (сочетание клавиш Ctrl+M). После вызова команды Матрица (необходимо нажать на кнопку или набрать сочетание Ctrl+M). Далее на экране появиться диалоговое окно Вставить матрицу, в котором необходимо указать число строк и число столбцов. Таким образом, вводятся матрицы. Далее, применяя знаки алгебраических действий и клавишу ввода, можно обрабатывать данные математические элементы высшей алгебры. Программа выдает ответ сразу после нажатия равно. На нижнем рисунке приведены примеры сложения и умножения матриц, при этом программа сама указывает пользователю на ошибки (первый и третьи примеры Размерность матрицы задана неверно) 23 4.2 Встроенные функции MS Excel для умножения матриц. В MS Excel умножение матриц реализуется с помощью функции МУМНОЖ (в английской версии MMULT). Данная функция имеет следующую структуру: МУМНОЖ (массив1;массив2) где массив1, массив2 — перемножаемые массивы. Примечания. Количество столбцов аргумента массив1 должно быть таким же, как количество сток аргумента массив2, и оба массива должны содержать только числа. Массив1 и массив2 могут быть заданы как интервалы, массивы констант или ссылки. Если хотя бы одна ячейка в аргументах пуста или содержит текст или если число столбцов в аргументе массив1 отличается от числа строк в аргументе массив2, то функция МУМНОЖ возвращает значение ошибки #ЗНАЧ!. Массив a, который является произведением двух массивов b и c определяется следующим образом: n aij bik ckj k 1 где I — номер строки, а j — номер столбца. Формулы, которые возвращают массивы, должны быть введены как формулы массива. Пример. Чтобы этот пример проще было понять, скопируйте его на пустой лист. Инструкции 1. Создайте пустую книгу или лист. 2. Выделите пример в разделе справки. Не выделяйте заголовок строки или столбца. Выделение примера в справке. 3. Нажмите сочетание клавиш CTRL+C 24 4. На листе выделите ячейку A1 и нажмите сочетание клавиш CTRL+V. 5. Чтобы переключиться между просмотром результатов и просмотром формул, возвращающих эти результаты, нажмите сочетание клавиш CTRL+` (апостроф) или в меню Сервис укажите на пункт Зависимости формул и выберите режим Режим проверки формул. A Массив 1 1 7 Массив 2 2 0 Формула =МУМНОЖ(A2:B3;A5:B6) B Массив 1 3 2 Массив 2 0 2 Формула Примечание. Формулу в этом примере необходимо ввести как формулу массива. После копирования этого примера на пустой лист выделите диапазон A8:B9, начиная с ячейки, содержащей формулу. Нажмите клавишу F2, а затем нажмите клавиши CTRL+SHIFT+ENTER. Если формула не будет введена как формула массива, единственное значение будет равно 2. Ниже на рисунке представлен ещё один пример перемножения матриц: В затененных областях у нас находятся искомые матрицы, а в выделенной прямоугольной зоне матрица результат. Данный факт умножения матриц в MS Excel широко используется в экономике. С помощью матриц удобно записывать некоторые экономические зависимости. 25 Например, таблица распределения ресурсов по отдельным отраслям экономики (усл. ед.): Отрасли экономики Промышленность Сельское хозяйство Электроэнергия 5,3 4,1 Трудовые ресурсы 2,8 2,1 Водные ресурсы 4,8 5,1 Ресурсы может быть записана в компактной форме в виде матрицы распределения ресурсов по отраслям: || 5,3 4,1 || A = || 2,8 2,1 || . || 4,8 5,1 || В данной записи, например, матричный элемент а11 = 5,3 показывает, сколько электроэнергии употребляет промышленность, а элемент а22 = 2,1 сколько трудовых ресурсов потребляет сельское хозяйство. Рассмотрим несколько задач. Задача 1. Предприятие выпускает продукцию трех видов: P1, P2, P3 и использует сырье двух типов: S1 и S2. Нормы расхода сырья характеризуются матрицей: || 2 3 || A = || 5 2 || , || 1 4 || где каждый элемент аij (i = 1,2,3; j = 1,2) показывает, сколько единиц сырья j-го типа расходуется на производство единицы продукции i-го вида. План выпуска продукции задан матрицей-строкой С = (100 80 130), стоимость единицы каждого типа сырья (ден. ед.) - матрицей столбцом: B= || 30 || || 50 || Решение. Затраты 1-го сырья составляют S1 = 2 х 100 + 5 х 80 + 1 х 130 = 730 ед. и 2-го - S2 = 3 х 100 + 2 х 80 + 4 х 130 = 980 ед., поэтому матрица-строка затрат сырья S может быть записана как произведение: || 2 3 || S = C x A = || 100 80 130 || || 5 2 || = || 730 980 || . || 1 4 || 26 Тогда общая стоимость сырья Q = 730 х 30 + 980 х 50 = 70900 ден. ед. может быть записана в матричном виде: Q = S x B = (CA)B = (70900). Общую стоимость сырья можно вычислить и в другом порядке: вначале вычислим матрицу стоимостей затрат сырья на единицу продукции, т.е. матрицу: || 2 3 || || 30 || = || 210 || R = A x B = || 5 2 || || 50 || = || 250 || , || 1 4 || || 230 || а затем общую стоимость сырья: || 210 || Q = C x R = || 100 80 130 || || 250 || = || 70900 || . || 230 || На этом примере мы убедились в выполнении ассоциативного закона произведения матриц: (СА)В = С(АВ). Задача 2. Предприятие производит продукцию трех видов и использует сырье двух типов. Нормы затрат сырья на единицу продукции каждого вида заданы матрицей: A= || 2 1 3 || || 1 3 4 || . Стоимость единицы сырья каждого типа задана матрицей B = (10 15). Каковы общие затраты предприятия на производство 100 единиц продукции первого вида, 200 единиц продукции второго вида и 150 единиц продукции третьего вида? Решение. Вычислим матрицу стоимостей затрат сырья на единицу продукции: || 2 1 3 || || 10 x 2 + 15 x 1 || || 35 || R = B x A = || 10 15 || || 1 3 4 || = || 10 x 1 + 15 x 3 || = || 55 || . || 10 x 3 + 15 x 4 || = || 90 || План выпуска продукции, очевидно, задан матрицей C = (100 200 150). Общие затрата предприятия составляют: || 35 || Q = C x R = || 100 200 150 || || 55 || = || 100 x 35 + 200 x 55 + 150 x 90 || = || 28000 || . || 90 || Ответ: 28000. 27 4.3 Калькулятор для умножения матриц. Ну, и пожалуй для самых ленивых, можно предложить калькулятор который производит умножение двух матриц. Причём, данная программа производит умножение двух матриц, каждая из которых может иметь размеры от 1х1 до 99х99. Данная программа является исполнительным файлом (.ехе) и поэтому не требует суперусловий от вашего компьютера или каких-либо дополнительных программных продуктов. Обратите внимание, что первые две строки данного калькулятора описывают имена столбцов матриц, а первый столбец номера строк. Остается только задать число строк и столбцов первой и второй матриц, ввести в необходимые ячейки элементы матриц и получить ответ, который появляется автоматически. Вот уж поистине рай для лентяев! 28 Заключение. Пока сегодня и незаметно бурное развитие матричного аппарата, но это не отрицает того факта, что в недалеком будущем эти сложные математические элементы по праву займут место среди первых. Расцвет трёхмерной анимации (и в частности 3D кино), развитие различных экономических отраслей на транскорпоративных уровнях, зарождение новых технических наук (кибертроника и робототехника) – всё это невозможно без изучения матричного анализа в купе с программированием. Что касается транспорта (в частности наземного), то здесь, в связи с бурным развитием навигационной техники (координаты которых представляются массивами), мы станем очевидцами расцвета беспилотных автомобилей, что на мой взгляд должно сделать движение более безопасным. Вам кажется это фантастикой? Но ведь когда-то в математике XIX века матрица Джеймса Сильвестра тоже была понятием из ряда вон выходящим. И несмотря на это его детище живёт и развивается до сих пор, помогая другим наукам. 29 Литература. 1. Мак-Кракен Д. Дорн У., Численные методы и программирование на ФОРТРАНЕ, Москва, Мир, 1977. 2. Блох А.Ш., Кузнецов А.Т., Вычислительная математика и программирование, Минск, Народная асвета, 1972. 3. Пулькин С.П., Вычислительная математика, Москва, Просвещение, 1972. 4. Левин М.Г., Программное обеспечение для решения задач численного анализа на СМ ЭВМ, Кишинев, Лумина, 1991. 5. Зубов B.C., Программирование на языке Turbo Pascal, Москва, Филин, 1997. 6. Марченко Л.А., Марченко А.И., Программирование в среде Turbo Pascal, Москва, Бином Универсал, Киев, Юниор, 1977. 7. Выгодский М.Я., Справочник по высшей математике, Москва, Наука, 1972. 8. Гутер Р.С., Овчинский Б.В., Резниковский П.Т., Программирование и вычислительная математика, Москва, Наука, 1965. 9. Мину М. Математическое программирование: Теория и алгоритмы. М.: Наука, 1990. 10. Ивановский Р.И. Компьютерные технологии в науке и образовании. Практика применения систем MathCAD Pro. Учеб. пособие. М.: Высшая школа, 2003. 30 Интернет-ресурсы 1. Интернет-сайт издательского дома «Первое сентября» www.1september.ru/ 2. Интернет-сайт «Фестиваль педагогических идей» festival.1september.ru 3. Интернет-портал: allmath.ru 4. Соросовский образовательный журнал: journal.issep.rssi.ru/ Программное обеспечение 1. Пакет компьютерной математики: MathCAD 14. Продукт компании MathSoft. 2. Программа MS Excel входящая в пакет программ MS Office. Продукт компании Microsoft. 3. Программный компилятор Турбо Паскаль версии 7.0. Продукт компании Borderland International. 31