Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ_Матлаб Введение 120206.doc
Скачиваний:
4
Добавлен:
03.05.2019
Размер:
489 Кб
Скачать
☆
  1. Основы работы в среде Матлаб

Ориентация на матричные операции

Система MATLAB выполняет операции над векторами и матрицами. Одномерный массив называют вектором, а двумерный — матрицей:

[1 2 3 4]

или

[1 2 3 4]

Векторы из 4 элементов

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

Размер вектора — это число его элементов, а размер матрицы определяется числом ее строк т и столбцов п. Обычно размер матрицы указывают как т х п. Матрица называется квадратной, если т = n, то есть число строк матрицы равно числу ее столбцов; Многие элементы разреженных матриц — нули, поэтому для эффективной работы с такими матрицами имеется ряд специальных функций.

Векторы и матрицы могут иметь имена, например, V — вектор или М — матрица. В данной работе имена векторов и матриц набираются полужирным шрифтом. Элементы векторов и матриц рассматриваются как индексированные переменные. Например, V2 — второй элемент вектора V; М2,3 — третий элемент матрицы М, расположенный во второй строке. Интересно отметить, что даже обычные числа и переменные в MATLAB рассматриваются как матрицы размером 1х1, что дает единообразные формы и методы проведения операций над обычными числами и массивами. Это также означает, что большинство вычислительных функций могут работать с аргументами в виде векторов и матриц, вычисляя значения для каждого их элемента.

Файловая система МАТLАВ

Система MATLAB состоит из многих тысяч файлов, находящихся в множестве папок. Файл — это некоторая совокупность данных в широком понимании, хранящихся в памяти компьютера (обычно на дисковых накопителях) и объединенных под некоторым именем файла, после которого через точку указывается расширение файла. Файлы могут содержать машинные коды (исполняемые файлы), тексты (текстовые файлы), исходные данные для математических расчетов и результаты их выполнения.

В MATLAB особое значение имеют файлы двух типов — с расширениями .mat и .m. Первые являются бинарными файлами, представляющими запись сеанса (сессии) работы системы. Вторые представляют собой текстовые файлы, содержащие внешние определения команд и функций системы. Именно к ним относится большая часть команд и функций, в том числе задаваемых пользователем для решения своих специфических задач. Нередко встречаются и файлы с расширением .с (на языке С), файлы с откомпилированными кодами с расширением .mех и др. Исполняемые файлы имеют расширение .ехе.

Особое значение имеет директория МАТLАВ/TOOLВОХ/МАТLАВ. В ней содержится Тооlbох — набор m-файлов стандартного расширения системы. Просмотр этих файлов позволяет детально оценить возможности поставляемой конкретной версии системы. Ниже перечислены основные подкаталоги с этими файлами (деление условно, на самом деле все подкаталоги находятся в общем каталоге MATLAB).

Операции строчного редактирования

При работе с МАТLАВ в командном режиме действует простейший строчный редактор. Ниже перечислены его команды:

•  или Ctrl+b — перемещение курсора вправо на один символ;

•  или Ctrl+f — перемещение курсора влево на один символ;

• Ctrl +  или Сtг1+г — перемещение курсора вправо на одно слово;

• Ctrl+  или Сtгl+1 — перемещение курсора влево на одно слово;

• Ноmе или Ctrl+a — перемещение курсора в начало строки;

• Епd или Ctrl+e — перемещение курсора в конец строки;

•  и  или Ctrl+p и Ctrl+n — перелистывание предыдущих команд вверх

или вниз для подстановки в строку ввода;

• Del или Ctrl+d — стирание символа справа от курсора;

• Васkspace или Ctrl+h — стирание символа слева от курсора;

• Ctrl+k — стирание до конца строки;

• Ins — включение/выключение режима вставки;

• PgUp — перелистывание страниц сессии вверх;

• РgDn — перелистывание страниц сессии вниз;

• Еsс — очистка строки ввода.

Эти возможности кажутся примитивными, но позволяют пользователю быстро работать в стиле первых версий МАТLАВ для МS DOS.

Следует обратить особое внимание на применение клавиш  и  . Они используются для подстановки после маркера строки ввода ”»” ранее введенных строк, например для их исправления, дублирования или дополнения. При этом указанные клавиши обеспечивают перелистывание ранее введенных строк снизу вверх или сверху вниз. Такая возможность существует благодаря организации специального программного стека, хранящего строки с исполненными ранее командами.

Команды управления окном

Полезно сразу усвоить некоторые команды управления окном командного режима:

• сlс — очищает экран и размещает курсор в левом верхнем углу пустого экрана;

• home — возвращает курсор в левый верхний угол окна;

• еcho<file name> оn — включает режим вывода на экран текста Script-файла (файла-сценария);

• еcho<file name> off — выключает режим вывода на экран текста Script-файла;

• еcho<file name> — меняет режим вывода на противоположный;

• есho оn аll — включает режим вывода на экран текста всех т-файлов;

• есho оff all — отключает режим вывода на экран текста всех т-файлов;

• more оn — включает режим постраничного вывода (полезен при просмотре больших т-файлов);

• more off — отключает режим постраничного вывода (в этом случае для просмотра больших файлов надо пользоваться линейкой прокрутки).

В версии МАТLАВ 5.3.1 обе команды, с1с и home, действуют аналогично - - очищают экран и помещают курсор в левый верхний угол окна командного режима работы. Команды еcho позволяют включать или выключать отображение текстов m-файлов при каждом обращении к ним. Как правило, отображение текста файлов сильно загромождает экран и часто не является необходимым. При больших размерах файлов начало их текста (листинга) убегает далеко за пределы области просмотра (текущего окна командного режима). Поэтому для просмотра длинных листингов файлов полезно включить постраничный вывод командой more on.

МАТLАВ как мощный калькулятор

Система МАТLАВ создана таким образом, что любые (подчас весьма сложные) вычисления можно выполнять в режиме прямых вычислении, то есть без подготовки программы. Это превращает МАТLАВ в необычайно мощный калькулятор, который способен производить не только обычные для калькуляторов вычисления, но и операции с векторами и матрицами, комплексными числами, рядами и полиномами. Можно почти мгновенно задать и вывести графики различных функций — от простой синусоиды до сложной трехмерной фигуры.

Работа с системой в режиме прямых вычислений носит диалоговый характер и происходит по правилу “задал вопрос, получил ответ”. Пользователь набирает на клавиатуре вычисляемое выражение, редактирует его (если нужно) в командной строке и завершает ввод нажатием клавиши Enter. В качестве примера на рис. 1 уже были показаны простейшие вычисления — выражения 2+3 и значения sin(1). Даже из таких простых примеров можно сделать некоторые поучительные выводы:

• для указания ввода исходных данных используется символ ”;

• данные вводятся с помощью простейшего строчного редактора;

• для блокировки вывода результата вычислений некоторого выражения после него надо установить знак ; (точка с запятой);

• если не указана переменная со значением результата вычислений, то МАТLАВ назначает такую переменную с именем ans;

• знаком присваивания является привычный математикам знак ра­венства =, а не комбинированный знак :=, как во многих других математических системах;

• встроенные функции (например, sin) записываются строчными буквами и их аргументы указываются в круглых скобках;

• результат вычислении выводится в строках вывода (без знака ”);

• диалог происходит в стиле “задал вопрос, получил ответ”.

Попробуем выполнить некоторые, простые вычисления:

» 2+3

ans

5

» x=sin(1)

x=

0,8415

» V=[1 2 3 4]

V =

1 2 3 4

» sin(V)

апs

0.9093 0.1411 -0.7568

» ехр(V)

аns

2.7183 7.3891 20.0855 54.5982

В такой форме ниже будет приводиться большая часть примеров. Исключения относятся к примерам, в которых желательно видеть на экране расчетную и графическую части одновременно.

Обратите внимание на форму ответов при выполнении простых операций без указания переменной, которой присваивается результат операции. В таких случаях МАТLАВ сам назначает переменную ans, которой присваивается результат и значение которой затем выводится.

Сообщения об ошибках и исправление последних

Важное значение при диалоге с системой МАТLАВ имеет диагностика ошибок. Вряд ли есть пользователь, помнящий точное написание тысяч операторов и функции, входящих и систему МАТЬАВ и пакеты прикладных программ. Поэтому никто не застрахован от ошибочного написания математических выражении или команд. МАТLАВ диагностирует вводимые команды и выражения н выдаст соответствующие сообщения об ошибках или предупреждения. Пример вывода сообщения об ошибке (деление на 0) только что приводился.

Рассмотрим еще ряд примеров. Введем, к примеру, ошибочное выражение

» sqr(2)

и нажмем клавишу Enter. Система сообщит об ошибке:

??? Undefined function or variable ‘sqr’.

Это сообщение говорит о том, что не определена переменная или функция, и указывает, какая именно — sqr. В данном случае, разумеется, можно просто набрать правильное выражение. Однако в случае громоздкого выражения лучше воспользоваться редактором. Для этого достаточно нажать клавишу для перелистывания строк. В результате появится выражение

» sqr(2)

Теперь с помощью клавиши  следует установить курсор после буквы г и нажать клавишу Т, а затем клавишу Enter. Выражение примет следующий вид:

» sqrt(2)

ans =

1.4142

Теперь вычисления дают ожидаемый результат — значение квадратного корня из двух.

В системе МАТLАВ внешние определения используются точно так же, как и встроенные функции и операторы. Никаких указаний на их применение делать не надо. Достаточно лишь позаботиться о том, чтобы используемые определения действительно существовали в виде файлов с расширением .m. Впрочем, если вы забыли об этом или ввели имя несуществующего определения, то система отреагирует на это звуковым сигналом и выводом сообщения об ошибке:

» hsin(1)

??? Undefined or variable 'hsin'

» sinh(1);

аns =

1.1752

В этом примере мы забыли (нарочно), какое имя имеет внешняя функция, вычисляющая гиперболический синус. Система подсказала, что функция или переменная с именем hsin не определена ни как внутренняя, ни как m-функция. Зато далее мы видим, что функция с именем sinh есть в составе функций системы МАТLАВ — она задана в виде m-функции.

Иногда в ходе вывода данных вычислений появляется сокращение NаN (от слов Not a Number — не число). Как уже отмечалось, оно обозначает неопределенность, например вида 0/0 или Inf / Inf', где Inf — системная переменная со значением машинной бесконечности. Могут появляться и различные предупреждения об ошибках (на английском языке). Например, при делении на 0 конечного числа появляется предупреждение “Warning: Divide by Zero.” ( “Внимание: деление на ноль”). Диапазон чисел, представимых в системе, лежит от 10 -308 до 10 308.

Вообще говоря, в МАТLАВ надо отличать предупреждение об ошибке от сообщения о ней. Предупреждения (обычно после слова Warning) не останавливают вычисления и лишь предупреждают пользователя о том, что диагностируемая ошибка способна повлиять на ход вычислений. Сообщение об ошибке (после знаков ???) останавливает вычисления.

Операция

» М=[1 2 3 ; 4 5 6 ; 7 8 9];

задает квадратную матрицу, которую можно вынести:

» М

M=

1 2 3

4 5 6

7 8 9

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

» V= [2+2/(3+4) ехр(5) sqrt(10)];

» V

V =

2.2857 148.4132 3.1623

» М(8)

аns =

6

» М(9)

аns=

9

» М(5)=100;

» М

М = I

1 2 3

4 100 6

7 8 9

Возможно задание векторов и матриц с комплексными элементами, например:

» i=sqrt(-1):

» СМ = [ 1 2; 3 4 ] + i*[5 6; 7 8]

или

» СМ = [1+5*i 2+6*i; 3+7*i 4+8*]

Это создаст матрицу:

Наряду с операциями над отдельными элементами матриц и векторов система позволяет производить операции умножения, деления и возведения в степень сразу над всеми элементами, то есть над массивами. Для этого перед операцией ставится точка. Например, оператор * означает знак умножения для векторов или матриц, а оператор .* — почленное умножение всех элементов массива. Так, если М — матрица, то М.*2 даст матрицу, все элементы которой умножены на скаляр — число 2. Впрочем, для умножения матрицы на скаляр оба выражения — М*2 и М.*2 — оказываются равноценными.

Имеется также ряд особых функций для задания векторов и матриц. Например, функция magic(n) задает магическую матрицу размером п х п, у которой сумма всех столбцов, всех строк и даже диагоналей равна одному и тому же числу:

» М=magic(4)

» М =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

СЕССИЯ МАТLАВ

Сеанс работы с МАТLАВ принято именовать сессией. Сессия, в сущности, является текущим документом, отражающим работу пользователя с системой МАТLАВ. В ней имеются строки ввода, вывода и сообщений об ошибках. Входящие в сессию определения переменных и функций, расположенные в рабочей области памяти (но не саму сессию), можно записать на диск (в файл формата .mat), используя команду save. Команда load позволяет считать с диска дан­ные рабочей области. Фрагменты сессии можно оформить и виде дневника с помощью команды diary. Рассмотрим эти команды более подробно.

Сохранение рабочей области сессии

Переменные и определения новых функций в системе МАТLАВ хранятся в особой области памяти, именуемой рабочей областью. МАТLАВ позволяет сохранить значения всех переменных и определений и сессии, то есть рабочей области, в виде бинарных файлов с расширением .mat. Для этого служит команда save, которая может использоваться в ряде форм:

• save fname — записывается рабочая область всех переменных в файле бинарного формата с именем fname и расширение .mat;

• save fname Х — записывается только значение переменной X;

• save fname Х Y Z — записываются значения переменных X, Y и Z.

После параметров команды save можно указать ключи, уточняющие формат записи файла:

• -mat — двоичный таЬ-формат, используемый по умолчанию;

• -ascci — АSС II -формат единичной точности (8 цифр);

• -ascci -double - АЗСII -формат двойной точности (16 цифр);

• - ascci -double -tabs — формат с разделителем и метками табуляции;

• -V4 — запись mat-файла в стандарте версии МАТLАВ 4.

• - append — добавление в существующий mat-файл.

Возможно задание записи в формате функции, например:

» save ('fname' , 'var1’ , 'var2')

В этом случае имена файлов и переменных задаются строковыми константами.

Ведение дневника

Следует отметить, что возможности сохранения всего текста сессии, формируемой в командном режиме, с помощью команды save нет. И не случайно! Дело в том, что сессия является результатом проб и ошибок и ее текст наряду с правильными определениями содержит сообщения об ошибках, переопределения функций и переменных и много прочей “шелухи”. Необходимости сохранять такое “творче­ство” обычно нет. А если есть, то для этого служит команда diary:

• diary file_name — ведет запись на диск в виде текстового файла с указанным именем всех команд в строках ввода и полученных результатов.

• diary off — приостанавливает запись в файл.

• diary on — вновь начинает запись в файл.

Таким образом, чередуя команды diary off и diary on, можно сохранять нужные фрагменты сессии в их формальном виде. Команду diary можно задать и в виде функции diary (‘file’), где строка ‘file’ задаст имя файла. Следующий пример поясняет технику применения команды diary:

» diary myfile.m

» 1+2

ans =

3

» diary off

» 2+3

аns= .

5

» diary on

» sin(1)

аns =

0.8415 ”

» diary off

Нетрудно заметить, что в данном примере первая операция — 1 +2=3 — будет записана в файл myfile, вторая — 2+3=5 — не 1 будет записана, третья операция — sin(1) = 0.8415 — снова будет записана. Таким образом, будет создан Script-файл следующего вида:

1+2

ans =

3

diary off

sin(1)

ans=

0,8415

diary off

Одна из распространенных ошибок начинающих пользователей — попытка запустить подобный файл в командной строке путем указания его имени:

» myfile

? ?? ans =

Missing variable or function.

Еггог iп => С:\МАТLАВ\myfile.m

On line 3 => ans =

Обычно это приводит к ошибкам, так как данный файл — это просто текстовая запись команд и результатов их выполнения, не проверяемая на корректность и содержащая ряд строк, ошибочных с позиций синтаксиса языка программирования МАТLAВ (например, выражение аns =). Зато команда type позволяет просмотреть текст такого файла со всеми записанными действиями:

» type myfile

1+2 |

ans =

3

diary off

sin(1)

аns =

0.8415

diary off

Во избежание отмеченных казусов рекомендуется записывать файл с расширением, иным чем .m, например .txt. Это позволит встраивать подобные текстовые файлы дневника сессии в документы, содержащие ее описание.

Загрузка рабочей области сессии

Для загрузки рабочей области ранее проведенной сессии (если она была сохранена) можно использовать команду load:

• load fname ... — загрузка ранее сохраненных в файле fname.mat определений со спецификациями, помещаемыми на месте многоточия, и подобными описанным для команды save, включая ключ .mat для загрузки файлов с расширением .mat обычного бинарного формата, используемого но умолчанию);

• load (‘fname’,…) — загрузка файла fname.mat в форме функции.

Если команда (или функция) load используется в ходе проведения сессии, то произойдет замена значении текущих переменных теми значениями, которые были сохранены в считываемом mat-файле.

Для задания имен загружаемых файлов может использоваться знак *, означающий загрузку всех файлов с определенными признаками. Например, load demo*.mat означает загрузку всех файлов с началом имени demo, например demo1, demo2, demoa, demob и т. д. Имена загружаемых файлов можно формировать с помощью операций над строковыми выражениями.

Завершение работы с системой

Для завершения работы с системой можно использовать команды quit, exit или комбинацию клавиш Ctrl+Q. Если необходимо сохранить значения всех переменных (векторов, матриц) системы, то перед этим следует дать команду save нужной формы. Команда load после загрузки системы считывает значения этих переменных и позволяет начать работу с системой с того момента, когда она была прервана.