Сделай Сам Свою Работу на 5

Создание новых массивов на основе существующих

 

Индексация при помощи двоеточия удобна при выделении части из большого объема данных в новый массив. Пусть задан вектор W

>> W=[0.1 2.2 3.4 5.6 3.1 6.8 9.7]

W =

0.1000 2.2000 3.4000 5.6000 3.1000 6.8000 9.7000

Составим вектор P, состоящий из всех элементов вектора W, кроме третьего, используя двоеточие и сцепление строк:

>> P=[W(1:2) W(4:7)]

P =

0.1000 2.2000 5.6000 3.1000 6.8000 9.7000

Выделение блоков матриц также осуществляется индексацией с помощью двоеточия. Введем матрицу

>> P=[1 2 0 2;4 10 12 5;0 11 10 5;9 2 3 5]

P =

1 2 0 2

4 10 12 5

0 11 10 5

9 2 3 5

Выделим из нее матрицу размером 2×2, находящуюся в центре:

>> P1=P(2:3,2:3)

P1 =

10 12

11 10

Вставим на это же место матрицу F размером 2×2:

>> F=[3 -7;4 11]

F =

3 -7

4 5

>> P(2:3,2:3)=F

P =

1 2 0 2

4 3 -7 5

0 4 11 5

9 2 3 5

Для удаления отдельных столбцов и строк матрицы используются пустые квадратные скобки [ ]. Удалим второй столбец матрицы P:

>> P(:,2)=[]

P =

1 0 2

4 -7 5

0 11 5

9 3 5

А теперь удалим вторую строку:

>> P(2,:)=[]

P =

1 0 2

0 11 5

9 3 5

«Растянуть» матрицу Р в единый вектор-столбец V можно с помощью простой записи:

>> V=P(:)

V =

«Расширять» матрицу, составляя ее из отдельных заданных матриц («блоков»), можно тоже довольно просто. Если заданы несколько матриц - блоков A1, A2,…,AN с одинаковым числом строк, то из них можно «слепить» единую матрицу А, объединяя блоки в одну «строку» операцией горизонтального сцепления A=[A1,A2,…,AN]. Аналогично вертикальное сцепление матриц можно реализовать при условии, что все составляющие блоки - матрицы имеют одинаковое число столбцов, применяя для отделения блоков вместо запятой точку с запятой: A=[A1;A2;…,AN].

Пример горизонтального сцепления:

>> A1=[1 2 3;4 5 6;7 8 9]

A1 =

1 2 3

4 5 6

7 8 9

>> A2=[10;11;12]

A2 =

>> A3=[14 15;16 17;18 19]

A3 =

14 15

16 17

18 19

>> A=[A1,A2,A3]

A =

1 2 3 10 14 15

4 5 6 11 16 17

7 8 9 12 18 19

Пример вертикального сцепления:

>> B1=[1 2 3 4 5]

B1 =

1 2 3 4 5

>> B2=[6 7 8 9 10;11 12 13 14 15]

B2 =

6 7 8 9 10

11 12 13 14 15

>> B3=[17 18 19 20 21]

B3 =

17 18 19 20 21

>> B=[B1;B2;B3]

B =

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

17 18 19 20 21

Построение таблицы значений функции

Пусть требуется вывести в командное окно таблицу значений функции

y = 3e-0,5xsinx при изменении аргумента х от 0 до 5 с шагом 0,5. Вычисление массива значений этой функции в указанных условиях можно осуществить с помощью простых операторов:

>> a=3;h=0.5;x=0:.5:5;y=a*exp(-h*x).*sin(x);

>> x

x =

Columns 1 through 10

0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000

Column 11

5.0000

>> y

y =

Columns 1 through 10

0 1.1201 1.5311 1.4135 1.0035 0.5144 0.0945 -0.1829 -0.3073 -0.3091

Column 11

-0.2361

Результат, отображенный на экране, не похож на таблицу. Построим таблицу в виде столбцов значений переменной и функции, используя вертикальное сцепление:

>> disp([x' y'])

0 0

0.5000 1.1201

1.0000 1.5311

1.5000 1.4135

2.0000 1.0035

2.5000 0.5144

3.0000 0.0945

3.5000 -0.1829

4.0000 -0.3073

4.5000 -0.3091

5.0000 -0.2361

Вопросы для самопроверки

1. Как в MATLAB создать вектор с помощью операции сцепления строк, индексацией с помощью вектора, индексацией с помощью двоеточия?

2. Какие команды выдают размер и размерность массива?

3. Что называется порядком квадратной матрицы?

4. Какая команда выдает длину вектора?

5. С помощью какой команды можно упорядочить вектор по убыванию?

6. Как найти сумму всех элементов матрицы?

7. Какие команды создают массивы специального вида?

8. Какая команда осуществляет разворот матрицы на 90o против часовой стрелки?

9. Какая команда выделяет главную диагональ матрицы?

ГЛАВА 3 М-ФАЙЛЫ

M-файлы – это обыкновенные текстовые файлы (с расширением .m), содержащие команды системы MATLAB. Подготовленный и записанный на жесткий диск компьютера M-файл становится частью системы и его можно вызывать как из командной строки, так и из другого M-файла. Большая часть обширного набора готовых средств системы MATLAB – это внешние расширения в виде M-файлов. Благодаря текстовому формату M-файлов пользователь может ввести в систему любую новую команду, оператор или функцию и легко приспособить ее к решению нужных классов задач.

Различают два типа M-файлов: файл-программы (Script M-Files) и файл-функции (Function M-Files). Мы продемонстрируем использование обоих типов M-файлов ниже.

Для создания и редактирования M-файлов предназначен встроенный модуль Editor (Редактор), который можно запустить командой edit (для редактирования нового файла). Для запуска модуля Editor (Редактор) можно также использовать меню File (Файл) или два крайних слева значка на панели инструментов, как для создания нового файла, так и для открытия уже существующего.

Файл-программы

 

Файл-программы (их также называют сценариями или скриптами) являются простейшим типом M-файлов. Они содержат последовательность команд без входных и выходных параметров.

В качестве примера составим файл-программу нахождения длины d = радиус - вектора точки (x;y;z) трехмерного пространства с двумя фиксированными координатами y = 3, z = 4. В главном меню MATLAB выберем команду File => New => M-file (Файл=>Новый=>M-файл), в результате чего раскроется окно редактора M-файлов (рис. 3.1).

 

 

Рис.3.1

В этом окне введем следующие строки:

y=3;z=4;

d=sqrt(x^2+y^2+z^2)

Обратим внимание, что строка, задающая d, не завершена точкой с запятой, поэтому результат работы этой строки будет отображаться в командном окне.

Сохраним введенный файл-сценарий в текущем каталоге под именем, например, myprog.m. Для этого в окне редактора M-файлов выберем команду File => Save As(Файл=>Сохранить как). В появившемся диалоговом окне Save file as(Сохранить файл как) раскроется подкаталог work основного каталога MATLAB, который по умолчанию определен в качестве текущего рабочего каталога Current Directory. В поле File name(Имя файла) введем имя myprog вместо отобразившегося по умолчанию имени Untitled.m и щелкнем на кнопке Save (Сохранить). Расширение .m вводить не следует, система MATLAB добавит его автоматически.

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

в редакторе M-файлов выбрать команду Debug => Run (Отладка=>Запуск);

набрать в командной строке имя M-файла (без расширения) и нажать клавишу <Enter>, т. е. выполнить сценарий как команду MATLAB.

Выполним сценарий вторым способом:

>> x=2;

>> myprog

d =

5.3852

Ответом является длина 5,3852 радиус - вектора точки (2;3;4).

При работе с редактором M-файлов имеется возможность запуска только части команд, из которых состоит M-файл. Для этого надо выделить команды при помощи мыши и нажать клавишу <F9>. Выделенные команды выполняются последовательно, точно так же, как если бы они были набраны в командной строке. Очевидно, что работать в M-файле удобнее, чем в командной строке, поскольку можно сохранить программу, можно редактировать ее, используя обычные приемы редактирования, общие для Windows - приложений, в том числе с помощью мыши и клавиш <↑> и <↓>.

Если вы захотите изменить созданный M-файл (например, зафиксировать координаты y = 4, z = 5), внесите соответствующие изменения в текст программы

y=4;z=5;

d=sqrt(x^2+y^2+z^2)

сохраните эти изменения и вновь запустите файл-сценарий:

>> x=2;

>> myprog

d =

6.7082

Теперь сценарий myprog.m вычислил длину 6,7082 радиус - вектора точки (2;4;5).

Сценарийmyprog.m обрабатывает как свои собственные переменные y, z, так и переменную x, определенную до вызова сценария в командном окне системы MATLAB и хранящуюся в ее рабочем пространстве. Это возможно потому, что переменные, определяемые в сценариях, и переменные, определяемые в командном окне, составляют единое рабочее пространство системы MATLAB. В свою очередь, все переменные, созданные во время работы сценария, остаются в рабочем пространстве MATLAB и после окончания его выполнения, т. е. являются глобальными. Можно убедится в этом, выполнив команду who:

>> who

Your variables are:

d x y z

Справочную информацию по M-программам можно получить, введя команду doc script.

Файл-функции

 

Подобно файл-сценарию, файл-функция представляет собой файл с простым текстом, который может находится в вашем текущем либо в любом другом каталоге. Файл-функции отличаются от сценариев тем, что позволяют задавать входные параметры, когда вы их запускаете из командной строки MATLAB или из другого M-файла.

Ниже представлен M-файл-функция с именем rad.m, созданный для нахождения длины d = радиус - вектора точки (x;y;z) трехмерного пространства:

function d=rad(x,y,z)

%Вычисление длины d=sqrt(x^2+y^2+z^2) радиус-вектора точки (x;y;z)

d=sqrt(x^2+y^2+z^2);

Структура M-файлов-функций следующая.

Первая строка в M-файле-функции называется строкой определения функции и начинается со слова function. В окне редактора M-файлов это зарезервированное слово выделяется синим цветом. Первая строка M-файла задает имя функции, а также количество аргументов (или параметров) ввода и вывода. В этом примере функция называется rad. Имя файла (за исключением расширения .m) и имя функции должны совпадать. Когда вы создаете этот новый M-файл-функцию в безымянном окне редактора и выбираете команду Save (Сохранить), модуль Editor (Редактор) сам присваивает файлу имя rad.m. Функция в нашем примере имеет для ввода три элемента, которые внутри M-файла обозначены как x, y, z. В качестве результата возращаетсяодин элемент – значение d, появляющееся в конце выполнения функции.

За строкой определения функции может следовать несколько строк - комментариев, начинающихся со знака процента %. Эти строки называются текстом справки об используемой функции и отображаются при вводе команды help. В M-файле rad.m присутствует только одна строка текста справки; она отображается при введении команды help rad.

Остальные строки содержат выражения системы MATLAB, которые производят вычисление значений функции. Строки комментариев (строки, начинающиеся со знака процента %) могут быть в любой области M-файла. Они не являются исполняемыми инструкциями. Цель их размещения в тексте программы – пояснить смысл той или иной части программного кода. Все выражения в M-файле-функции, которые обычно производят вывод результатов, должны оканчиваться точкой с запятой с целью пресечения вывода результатов промежуточных вычислений.

Покажем, как используется файл-функция rad.m для вычисления длины радиус - вектора точки (2;3;4):

>> rad(2,3,4)

ans =

5.3852

Ответ 5,3852 будет возвращен и сохранен под именем ans независимо от того, заданы или нет x, y, z и d в вашей рабочей области. Переменные, которые используются в файл-функции, такие как x, y, z и d в файле rad.m, являются локальными переменными. Запуск M-файла-функции не задает эти переменные в рабочей области и не изменяет их параметры, если переменные с такими же именами в рабочей области были заданы ранее. Система MATLAB не запоминает значения этих переменных после того, как M-файл-функция будет выполнен, а область оперативной памяти, в которой они хранились, освобождается. Убедимся в этом, выполнив команду who:

>> who

Your variables are:

ans

M-файлы-функции могут иметь множество аргументов ввода и вывода. Ниже представлен пример файла с именем rad2.m с тремя входными и двумя выходными параметрами, вычисляющего длину d и квадрат длины d2 радиус - вектора точки трехмерного пространства (x; y; z):

function [d,d2]=rad2(x,y,z)

d2=x^2+y^2+z^2;

d=sqrt(d2);

Если вы введете rad2(2,3,4), то только первый аргумент вывода будет возвращен и сохранен под именем ans:

>> rad2(2,3,4)

ans =

5.3852

Чтобы увидеть оба результата вывода, надо присвоить эти результаты переменным, заключенным квадратные скобки:

>> [d,d2]=rad2(2,3,4)

d =

5.3852

d2 =

Введя d=rad2(2,3,4), вы можете присвоить первый аргумент вывода переменной d:

>> d=rad2(2,3,4)

d =

5.3852

При вводе d2=rad2(2,3,4) нельзя получить второй аргумент вывода, т. к. переменной d2 будет также присвоен первый результат:

>> d2=rad2(2,3,4)

d2 =

5.3852

Передача информации из командного окна MATLAB в файл-функцию осуществляется с помощью параметров функции. Другой механизм передачи информации – глобальные переменные. Файл-функция может и не иметь входных или выходных параметров, заголовки таких файл-функций приведены ниже:

function noout(a,b), function [v,u]=noin, function noarg().

Для того чтобы рабочая область MATLAB и файл-функция могли совместно использовать некоторую переменную с заданным именем, ее всюду нужно объявить как глобальную с помощью команды global.

Приведем пример файл-функции rad3 без входных параметров:

function [d,d2]=rad3

global x y z

d2=x^2+y^2+z^2;

d=sqrt(d2);

Вызов ее осуществляется следующим образом:

>> global x y z

>> x=2;y=3;z=4;

>> [m,n]=rad3

m =

5.3852

n =

Параметрами файл-функций могут быть не только числа или скалярные переменные, но и массивы требуемых размеров. Поэтому желательно создавать векторизованные версии М-файлов вместо операторов <^>, <*>, </> следует применять операторы <.^>, <.*>, <./>. Векторизация осуществляется командой vectorize (см. разд. 1.7).

Созданный M-файл можно сохранить не только в текущем, но и в любом другом каталоге. В этом случае перед запуском M-файла на выполнение нужно установить пути поиска, ведущие к нему. По умолчанию текущим является подкаталог work основного каталога MATLAB. Для того, чтобы увидеть его содержимое, в главном меню MATLAB выберите команду View => Current Directory (Вид=>Текущий каталог). В результате раскроется окно, в котором отобразится список файлов и вложенных папок активного в данный момент каталога.

Чтобы изменить текущий каталог, введите путь к новому каталогу в поле Current Directory либо выберите его в раскрывающемся списке этого поля. Или же щелкните на кнопке справа от от поля Current Directory, и отыщите нужную папку в раскрывшемся диалоговом окне Обзор папок.

Справочную информация по M-функциям можно получить, введя команду doc function.

 

Вопросы для самопроверки

1. Как вызвать редактор M-файлов?

2. Что такое сценарий?

3. Что такое файл-функция?

4. Какова структура M-файла, содержащего файл-функцию?

5. Какую роль играют строки комментариев, располагаемые сразу за заголовком файл-функции?

6. Как осуществляется передача информации из командного окна MATLAB в файл-функцию?

7. Что такое локальные, глобальные переменные?

8. Как получить справку по M-файлам?

ГЛАВА 4 ПРОГРАММИРОВАНИЕ

Для освоения методов программирования в MATLAB не нужно обладать какими-то специальными знаниями. Встроенный язык программирования MATLAB (М-язык) достаточно прост, он содержит необходимый минимум конструкций. Все команды, операторы и функции, с которыми вы уже ознакомились ранее при работе в «режиме калькулятора», являются типичными инструментами М-языка. Примерами программ в системе MATLAB служат M-файлы.

К основному набору конструкций М-языка относятся также операторы отношения, логические операторы, операторы ветвления и цикла, рассматриваемые в этой главе.



©2015- 2017 stydopedia.ru Все материалы защищены законодательством РФ.