Говорухин В., Цибулин Б. Компьютер в математическом исследовании (1185927), страница 56
Текст из файла (страница 56)
Для редактирования вводимой команды могут быть использованы клавиши со стрелками и другие клавиши (Ногле, Бпб, Пе(е!е). Исполненные команды заносятся в стек, и их можно вызвать при помощи клавиш со стрелками вверх и вниз, а затем отредактировать. При ошибке в задании команды раздается звуковой сигнал и выводится сообщение об ошибке.
Очистить переменную ЧАС можно командой ЗОО Глава 11. Работа в МАТ1АВ Дадим примеры вывода числа а-12. 3456789 в различных форматах: » гогаат зьогЬ. а а 12.3457 » гогаа1 вьогс е, а а- 1.2346е+001 » Гогаа1 ЬаьГ. а а- 12.35 » Гогват гат. а а= 1000/81 » тагеат 1оьд, а а- 12.34567890000000 » тащат 1оьд е, а а- 1.234567890000000е+001 » Гьгеат Ьех, а а40280070032405а2 Команда магнат + дает компактный способ отображения структуры больших массивов. По умолчанию действуют формат зйогт и стиль 1ооае, который добавляет пустые строки при вьшоде результата Стиль сошраст подавляет вьшод пустых строк.
Команда 7огнат без параметров восстанавливает значения по умолчанию. Элементы языка МАТЮКАВ Изначально МАТ1АВ был реализован на Фортране, и, хотя современные версии пишутся на С, язык МАТ(.АВ или М-яэык конструкциями и отчасти синтаксисом напоминает Фортран. М-язык является языком высокого уровня и предоставляет достаточные возможности для реализации разнообразных вычислений, задач обработки данных и т. д. Этот язык сконструирован для решения математических задач и содержит специальные средства для эффективного выполнения математических операций. В этом разделе даны общие сведения о работе с матрицами, арифметических и логических операциях, структурах и операторах МАТВАВ, Синтаксис и данные Переменные в МАТЮКАВ не нужно предварительно описывать, указывая их тип.
Все данные хранятся в виде массивов: числовые переменные (внутренний тип пэпе г1 с), текстовые строки (сьз г), ячейки (се11) и структуры (э 1 гост), при помощи которых создаются пользовательские объекты (оэег оЬ)ест), Числовые массивы состоят из комплексных чисел с двойной точностью (тип бонЫ е) и могут храниться целиком или в упакованном виде в случае разреженной матрицы (тип ерзгэе). Двумерный массив — это матрица, одномерный — вектор, а скаляр — матрица размера 1х1, Кроме того, существует несколько форматов записи данных в файлы (1пт8, ц1пт8,...), отличакпцихся количеством используемых байтов. Схема типов МАТ(.АВ приведена на рис. 12.1.
Имя переменной должно начинаться с буквы, за ней могут идти буквы, цифры и символ подчеркивания. Допустимы имена любой длины, но МАТ) АВ идентифицирует их по первым 31 символам и различает большие и малые буквы. В МАТВАВ имеется ряд констант, описанных в табл. 12.1. Отметим, что имя нзн (Нос-э-НцвЬег) зарезервировано для результата операций 0/0, 0*1 пт, опт-1пт и т. п. Информацию об имеющихся константах можно получить, вызвав справку о разделе команд е!нас, 302 Глава 12. Элементы языка МАТОАВ АппАт и Папн1е Рис. 12.1. Типы МАТОАВ Буквы 1 и 3 можно использовать как обычные переменные, например в качестве счетчика цикла.
В этом случае мнимую единицу можно задать заново: ъ 33=5цгс(-1) Л 0 1.00001 Заметим, что для обозначения мнимой единицы применяется символ 1. Выражения н команды в МАТТ.АВ записываются с помощью различных символов, краткое описание которых дано в табл. 12.2. Таблица 12.1. Зарезервированные имена констант Мыя Описание Результат последней операции Мнимая единица Число к апз р1 Машинная точность ерз геа1иах Максимальное вещественное число Мини пал ьное вещественное число Бесконечность геа1и!п 1пг Нечисловая переиенная Наибольшее значение индекса разиерности пассива МаМ епе Приведем пример использования ряда зарезервированных слов и специальных символов для формирования матрицы размера 2хЗ: » А-Гзлгеа1иах, р1:6; -геа1и1п+1*ерз -1пт 1пт/1пт1 1 принер А 0 +1,7977е+3081 -2.2251е-300 -2.2204е-0161 3.1416е+000 4.1416е+000 -1пг Ман В этом примере точка с запятой отделяет строки матрицы, в качестве мнимой еди- ницы фигурируют символы! и 1, а в правой части строки знаком 1 отмечено нача- ло комментария.
Для вывода матрицы на экран использован формат звогс е, а если задать формат ввогт, то матрица А будет выглядеть следующим образом: хите, п1псэ, 1пт!Е, у1пт!е, зпта2, а1пта2 язп01е Попвте 1 ерагае Синтаксис н данные 303 » 1огмат зцогт, А А" 1.0е+308 * 0 + 1.7977! 0.0000 0.0000 + -1П1 0.0000 нан Обратим внимание, что второй и третий элементы первой строки и первый эле- мент второй строки не равны нулю, а просто произошло округление при выводе матрицы на экран. Таблица 12.2. Специальные символы Символ Назначение Квадратные скобки используются при задании матриц и векторов Пробел служит для разделения элементов матриц Запятая применяется для разделения элементов матриц и операторов в строке ввода Точка с запятой отделяет строки матриц, а точка с запятой в конце оператора (команды) отменяет вывод результата на экран Двоеточие используется для указания диапазона (интервала изменения величины) и в качестве знака групповой операции над элементами матриц Круглые скобки применяются для задания порядка выполнения математических операций, а также для указания аргументов функций и индексов матриц Точка отделяет дробную часть числа от целой его части, а также применяется в составе комбинированных знаков(.*,.",./,.т) Три тачки и более в конце строки отмечают продолжение выражения на следующей строке Знак процента обозначает начало комментария Восклицательный знак отмечает начала команды И5 005, например команда! си г выводит оглавление текущего каталога (директории) Апостроф указывает на символьные строки, а для включения самого апострофа в символьную строку нужно поставить два апострофа подряд Задание матриц По умолчанию все числовые переменные в МАТ(.АВ считаются матрицами с комплексными числами, так что скалярная величина есть матрица первого порядка, а векторы являются матрицами, состоящими из одного столбца или одной строки.
Матрицу можно ввести, задав ее элементы или считав данные из файла, а также в результате обращения к стандартной или написанной пользователем функции. Элементы матрицы в пределах строки отделяются пробелами или запятыми, поэтому при задании числа в зкспоненциальной форме (мантисса и порядок степени) никакие пробелы не допускаются. Матричные данные размещаются в памяти последовательно по столбцам.
Непосредственное задание матрицы можно осуществить несколькими способами. Например, вектор-столбец, то есть матрица, вторая размерность которой равна единице, может быль присвоена переменной а вводом одной строки: 304 Глава 12. Элементы языка МАТСАВ т Ввод вектора-столбца » а-Не-б+бт, 4; 3.2е11 а- 0.0000 + 5.00001 4.0000 32.0000 или вводом нескольких строк: » а-Г т Ввод вектора ио строкап Уе-6+51 4 3. 2еЦ; В качестве примера задания вектора при помощи функций МАТ1.АВ приведем команды 1тибрасе и 1ооврасе. Они позволяют создавать векторы со значениями, меняющимися соответственно в арифметической и геометрической прогрессии. Три параметра команды 1т ибрасе задают соответственно первый и последний члены арифметической последовательности, а также число членов.
Например: » 1тизрасе(1,-2.41 аив- 1 0 -1 -2 Параметры команды 1одбрасе задают соответственно десятичные порядки первого и последнего членов геометрической прогрессии, а также число членов. Например: » 1оозрасе(1. -1. 5) аив- 10.0000 3.1523 1.0000 0.31б2 0.1000 Векторы могут быть сформированы как диапазоны — при помощи двоеточий, разделяютцих стартовое значение, шаг и предельное значение. Если величина шага отсутствует, то по умолчанию его значение равно единице: и:в:с В результате будет сформирован вектор, последний элемент которого не больше к для положительного шага а, и не меньше — для отрицательного: Г и, и на, инпнп.
Например: » а-1:-2:-4 а- 1 -1 -3 Задание диапазона используется также при организации цикла, смотрите раздел «Элементы программирования» этой главы. Большую матрицу можно определить поэлементно при выполнении оператора цикла или набрать ее в обычном редакторе в виде АЯСП-файла(например, бата.ехС), а затем считать при помощи команды » 1оаб баев.екС В результате матрица будет присвоена переменной баса. Сйнтаксис и данные Э05 Для задания ряда матриц специального вида имеются команды МАТ[.АВ, аргументами которых являются размерности создаваемых матриц. Если указано одно число )(, то формируется квадратная матрица Мхц. Например, команда гали(п,м) создаст случайную матрицу размерности ила, а команда Ы1Ып) определит гильбертову матрицу п-го порядка.
Кроме того, для задания матрицы можно написать свою команду — функцию, сохранив ее в виде п)-файла (см. далее). Таблица 12.3. Функции описания матриц Иыя Назначение Единичная матрица Нулевая матрица Матрица из единиц Случайная иатрица со значенилии из интервала [0,11 Гильбертова матрица Матрица магического квадрата Создание диагональной матрицы или выделение диагонали Выделение верхней треугольной части матрицы Выделение нижней треугольной части матрицы еуе гегоз опез гало ЕЯ1Ь мад1с Озад сг!и Определение теплицевой матрицы имеет особый формат: » Т - тоер1)тз([1 2 3), [1 4 6)) Т- 1 2 3 1 О 1 О 1 1 В МАТЮКАВ имеется возможность, обратившись к команде да11егу, получить матрицу из подготовленного разработчиками набора стандартных матриц.
Чтобы посмотреть списокматриц,достаточно набрать 'ие1р да1)егу Чтобы вызвать нужную матрицу, нужно обратиться к функции да1! егу [Оит1, Оит2.... )-да11егу( МАНЕ, РАЙ1, Рдк2... ) Здесь НАНЕ имя матрицы из списка да11егу, а РАД1, РАД2 — дополнительные параметры. Например, разреженная матрица для задачи Пуассона при сетке бхб будет получена по команде: » Рот-да11егу("ротззоп",6); ззве(Ро)) апз- 36 36 Из стандартных блоков можно определить новую матрицу: » В-[тг(о(опез(2))легоз(2.1);опез(1.2).еуе(1В В 1 О 1 306 Глава 12. Элементы языка ИАТСАВ В результате получается матрица размерности ЗхЗ. Напомним, что при задании матрицы запятая отделяет элементы строки, а точка с запятой разделяет строки. Обращение к элементам матрицы Обращение к элементу матрицы производится по естественному правилу, — в круглых скобках после имени матрицы даются индексы, которые должны быть положительными целыми числами.
Например, А(2. 1) означает элемент из второй строки первого столбца матрицы А. Для дальнейших примеров введем матрицу 2х2; » А-(1 2+5*!: 4.бе-7 31: Если в качестве индекса задать комплексное число с дробной вещественной частью, то МАТ1.АВ выведет предупреждение, отбросит мнимую составляющую, произведет округление дроби и попытается выполнить операцию: » А(372»4*т) Нагптпй: Сомр)ех рагС от аггах воовсг(рС тв трпогеб.