Гурский Д., Турбина Е. - Вычисления в MathCad 12 (1077322), страница 30
Текст из файла (страница 30)
Поэтому в этой1 2 2 • Глава 3. Матричные вычисленияглаве матричные функции рассматриваются не по отдельности, а функциональнымигруппами.3.3.1. Задание матриц специального видаСуществует целый ряд матриц так называемого специального вида (верхние и нижниетреугольные, единичные, трапециевидные, скалярные, нулевые и некоторые другие).В Mathcad имеются функции, которые позволяют быстро и просто задавать матрицыспециального вида.• identity(N). Эта функция служит для задания единичной матрицы размерности N.Пример 3.30.
Создание единичной матрицы(\ О (Лidentity(3) = О 1 Оv0 0 1,• diag(V). Функция создает диагональную матрицу, элементы главной диагонали которой равны соответствующим элементам вектора V.3.3.2. Функции определения размерности матрицы•Функции rows(M) и cols(M). Служат для определения количества строк и соответственно столбцов некоторой матрицы М.Пример 3.31. Определение размерности матрицыМ:=rows(M) = 22 3 46 7 6cols(M) = 3• length(V). Функция определяет количество элементов вектора.• last(V). Функция служит для определения индекса последнего элемента некотороговектора V. По умолчанию last(V)=length(V)-l.
Эти две функции очень важны прирешении задач программными методами, поэтому мы с ними еще не раз встретимся.Пример 3.32. Определение размерности вектора' 2 Ъ\V:=length (V) = 3М:=last(4 5=23.3.3. Функции сортировки матрицПри решении очень многих задач возникает необходимость отсортировать полученные векторы или матрицы исходя из величины их элементов или по какому-то дру-3.3. Использование матричных функций.> 1 2 3гому принципу. При решении большинства сложных задач с помощью программирования, как правило, приходится использовать функции сортировки.
Поэтому их значение очень велико и функции эти нужно постараться запомнить.• sort(V). Сортировка элементов вектора по возрастанию. Одна из наиболее важныхи часто используемых на практике матричных функций. Может быть использованаи в том случае, если часть элементов вектора определена комплексными числами.При этом сортировка проводится исходя из действительной части числа, а мнимаячасть просто игнорируется.Пример 3.33. Сортировка элементов вектора' -31-3V:=5-8-i•1sort(V) =45-8iycsort(M,i). Функция выполняет сортировку по возрастанию элементов i-ro столбцанекоторой матрицы М.Пример 3.34. Сортировка выбранного столбца квадратной матрицыUМ:=1Ч5Л03(2 -41 2csort(M,l)=2 -41 2)103\А51Также очень просто можно отсортировать все столбцы матриц.
Для этого следуетзадать цикл с помощью ранжированных переменных. Обратите внимание на использование функции Last(V) в этом примере.Пример 3.35. Сортировка столбцов матрицы/4М:=51 ОV2i:=0..1ast(M)-41(\ -41Ml:=sortMl =05• rsort(M,i). Функция сортирует в порядке возрастания элементы i-й строки матрицыМ за счет перестановки соответствующих столбцов. В своем роде абсолютно идентична функции csort(M,i).Пример 3.36.
Сортировка выбранной строки матрицыМ:=5Г03(\4rsort(M ,0) = 3 15 ^0,2 2 -4\;Если необходимо отсортировать все строки матрицы, то проще всего действоватьисходя из следующего алгоритма.411 2 4 • Глава 3. Матричные вычисленияПример 3.37. Сортировка строк матрицыТранспонируем исходную матрицу:5ОМ:=VМ:=М2 -41 2 ,Задаем с помощью ранжированной переменой цикл.
Задействовав функцию sort( V), поочередносортируем все столбцы транспонированной матрицы:i := 0.. last'Ml:=sortТранспонируем полученную матрицу (при этом отсортированные столбцы становятся строками)и получаем необходимый результат:4 5М1:=МГМ1 =1 3-41 2 2Если же попытаться отсортировать матрицу, задав цикл непосредственно для функции rsort(M,i), то в результате получится вложенный массив, содержащий в качестве элементов матрицы, у которых отсортировано только по одной строке. Конечно, проблему эту обойти можно — но решение при этом очень усложнится. Так чтов таких случаях лучше создавать алгоритмы, подобные вышеописанному.•reverse(V). Эта функция переставляет элементы вектора в обратном порядке.
Используется, как правило, в том случае, если элементы отсортированного вектораили матрицы должны располагаться по принципу «чем ниже — тем меньше». Использование же reverse(V) в данном случае необходимо, поскольку функции сортировки расставляют их в противоположном порядке.В основе работы функций sort(V), csort(M,i) и rsort(M,i) лежит алгоритм так называемойпирамидальной сортировки.
Суть его заключается в представлении массива в виде бинарного сортирующего дерева — пирамиды (рис. 3.6).a. ) ( a ,Рис. 3.6. Бинарное дерево последовательности, состоящей из 15 элементов3.3. Использование матричных функций .;• 1 2 5Любое бинарное дерево содержит только один корневой узел, не имеющий предшественников. Другие же узлы имеют одного предшественника и одного или двух преемников.
Бинарное дерево будет являться пирамидой в том случае, если выполняетсяследующее условие: a>a 2i и a>a 2i+1 . Другими словами, каждый элемент пирамиды должен быть меньше своего предшественника, либо равняться ему. Тогда максимальныйэлемент массива будет помещен в корневой узел. Любой же фрагмент «хвостовой» части пирамиды также является пирамидой.Алгоритм пирамидальной сортировки требует порядка N-log2N операций (где N — размер массива) и включает в себя реализацию двух этапов: построение бинарной пирамиды и непосредственно сортировка ее элементов. Обсудим детально каждый их них.Начнем построение пирамиды с элементов а^.-.а^ поскольку часть массива при i>N/2удовлетворяет свойству пирамиды, так как его элементы не имеют преемников.
Будемнаращивать пирамиду, добавляя на каждом шаге по одному элементу, стоящему передуже готовой частью. Допустим, что построение пирамиды началось с элемента а8(см. рис. 3.6). В этом случае нам необходимо рассмотреть предшественника — элемента4 — и двух его преемников — элементы а8 и а9, из которых выбираем наибольший.
Еслиэтот преемник (предположим, а 8 ) оказывается больше своего предшественника а4, тоих меняют местами («просеивают» а4 к основанию пирамиды). Таким образом, элемента8 попадает на предыдущий уровень. Аналогичные операции проводятся с оставшимися элементами массива а,^ ,2...\. Далее переходим к следующему шагу — повторяем всевышеописанные действия с элементами на уровне, находящемся перед рассмотренным, а «опустившиеся» элементы «просеиваем» по веточке бинарного дерева к основанию до тех пор, пока весь массив не превратится в пирамиду (то есть пока не будетсоблюдаться условие а>а 2] и а^а^,).После того как пирамида построена, переходим к следующему этапу — непосредственной сортировке ее элементов.
Как вы помните, первый элемент, находящийся в корневом узле, — максимальный. Меняем его местами с последним элементом пирамидыа ^ ^ и больше не возвращаемся к нему. Затем «просеиваем» новый верхний элементи получаем пирамиду а,...^ ,, с которой повторяем ту же операцию до тех пор, пока размер массива не уменьшится до одного элемента.
Таким образом, на каждом шаге в конце массива оказывается максимальный элемент текущей пирамиды. В результате формируется упорядоченная последовательность элементов по возрастанию.3.3.4. Функции слияния и разбиения матрицВыделение части матрицыДля выбора из матрицы элемента с известными индексами в Mathcad существует специальная функция htookup(i,M,j), где i — номер строки, j — номер столбца, М — некоторая матрица.При решении многих задач возникает необходимость выделить в отдельные пары соответствующие элементы двух матриц.
Наиболее быстро и просто сделать это можнос помощью специальной функции lookup(r,M,N), где г — известный скаляр, М и N — соразмерные матрицы. Функция эта выводит значение того элемента матрицы N, которыйзанимает в ней такое же положение, как скаляр г в матрице М. При этом, если несколько элементов матрицы М равны г, то в качестве ответа выдается вектор с соответствующими всем им значениями элементов матрицы N.1 2 6 •:• Глава 3. Матричные вычисленияПример 3.38. Выделение элементов из матриц1 2 3М:=(\3 2 52 3'N:= 4 5 65 6 7Ч7 8 9,hlookup(3,M,l)=(5)lookup(2,M,N) =Очень часто на практике возникает задача, обратная рассмотренной: по известномуэлементу определить его положение в матрице. Так как иногда приходится работатьс очень большими матрицами, визуальный поиск нельзя считать универсальным.
Поэтому для выполнения такой задачи в Mathcad существует специальная функцияmatch(z,M), где z — скаляр, положение которого определяется, М — матрица, в которойведется поиск.Пример 3.39. Определение положения элемента матрицыМ:=1 2match(3,M) щ3 4Для выделения из матрицы произвольной подматрицы в Mathcad существует специальная функция submatrix(M,rl,r2,cl,c2), где М — некоторая матрица, rl и г2 — верхняяи нижняя граничные строки, cl и с2 — соответственно граничные столбцы извлекаемой подматрицы. С помощью этой функции, правильно определив границы, можновыделить отдельные строки или столбцы матрицы.Пример 3.40.
Использование функции submatrix'2 3М:=6 7 8б 7 А)Ml :=submatrix(M, 0,1,0,1)Ml =2 36 7Выделение отдельного столбца или строки:Col := submatrix(M ,0,2,1,1)Col=Row: = submatrix(M ,0,0,0,2)Row = ( 2 3 4)Функции слияния матрицИногда при решении задач возникают проблемы, требующие слияния нескольких векторов или матриц. На практике функции слияния матриц используются очень часто,поэтому их нужно постараться запомнить.3.3. Использование матричных функций • 1 2 7•augment(A,B,...), где А, В — некоторые матрицы.
Функция эта служит для слиянияматриц слева направо. Естественно, соединяемые матрицы должны иметь одинаковое количество строк.•stack(A,B,.. •)• Функция отвечает за слияние матриц сверху вниз. В случае ее использования матрицы должны иметь равное число столбцов.Пример 3.41. Слияние матрицА:=N:=1augment (A, N) =1 1222 221 1stack (А, N) =2 2Ч2 2У3.3.5. Функции вычисления матричных нормОдной из важнейших характеристик матрицы является ее норма.