Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб_практикум_ОВИ_03_06_13

.pdf
Скачиваний:
61
Добавлен:
14.04.2015
Размер:
4.1 Mб
Скачать

восстановить стандартные установки, a Revert предназначена для возврата к сохраненным.

Команды для установки путей

Действия по установке путей в MATLAB 6.x дублируются командами. Текущий каталог устанавливается командой cd, например cd c:\users\igor. Команда cd, вызванная без аргумента, выводит путь к текущему каталогу. Для установки путей служит команда path,

вызываемая с двумя аргументами:

path (path, 'c:\users\igor') добавляет каталог c:\users\igor с низшим приоритетом поиска;

path ('с: \users\igor',path) добавляет каталог c:\users\igor с высшим приоритетом поиска.

Использование команды path без аргументов приводит к отображению на экране списка путей поиска. Удалить путь из списка можно при помощи команды rmpath:

rmpath ('с:\users\igor') удаляет путь к каталогу c:\users\igor из списка путей.

Замечание 3

Не удаляйте без необходимости пути к каталогам, особенно к тем, в

назначении которых вы не уверены. Удаление может привести к тому, что часть функций, определенных в MATLAB, станет недоступной.

Пример 6.1. Создайте в корневом каталоге диска D (или любом другом диске или каталоге, где студентам разрешено создавать свои каталоги) каталог со своей фамилией, например, WORK_IVANOV и

запишите туда М-файл mydemo.m под именем mydemo3.m. Установите

111

пути к файлу и продемонстрируйте доступность файла из командной

строки. Результаты приведите в отчете по лабораторной работе.

Вариант решения:

1.В корневом каталоге диска D создается каталог WORK_IVANOV.

2.В каталог WORK_IVANOV записывается М-файл mydemo.m под именем mydemo3.m.

3.Открывается диалоговое окно Set Path меню File рабочей среды

MATLAB.

4. Нажимается кнопка Add Folder, и в появившемся диалоговом окне

Browse for Path выбирается каталог WORK_IVANOV.

5.Добавление каталога со всеми его подкаталогами осуществляется при нажатии на кнопку Add with Subfolders. Путь к добавленному каталогу появляется в поле MATLAB search path.

6.Для запоминания пути нажимается клавиша Save диалогового окна

Set Path.

7. Выполняется проверка правильности всех действий путем набора команды mydemo3 из командной строки. На экране появится графическое окно Figure No.1, содержащее графики функций.

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

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

112

6.1.4. Файл-функции Файл-функции с одним входным аргументом

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

e x

x2 1

.

 

 

x4 0,1

Целесообразно один раз написать файл-функцию, а потом вызывать её всюду, где необходимо вычисление этой функции. Откройте в редакторе М-файлов новый файл и наберите текст листинга

function f = myfun(x)

f= ехр(-х)*sqrt((х^2+1)/(х^4+0.1));

Слово function в первой строке определяет, что данный файл содержит файл-функцию. Первая строка является заголовком функции, в

которой размещается имя функции и списки входных и выходных аргументов. В примере, приведенном в листинге, имя функции myfun, один входной аргумент х и один выходной f. После заголовка следует тело функции (оно в данном примере состоит из одной строки), где и вычисляется ее значение. Важно, что вычисленное значение записывается в f. Точка с запятой поставлена для предотвращения вывода лишней информации на экран.

Теперь сохраните файл в рабочем каталоге. Обратите внимание, что выбор пункта Save или Save as меню File приводит к появлению диалогового окна сохранения файла, в поле File name которого уже содержится название myfun. He изменяйте его, сохраните файл-функцию в файле с предложенным именем.

113

Теперь созданную функцию можно использовать так же, как и встроенные sin, cos и другие, например из командной строки:

» у = myfun(1.3)

у =

0.2600

Вызов собственных функций может осуществляться из файл-

программы и из другой файл-функции.

Предупреждение 1

Каталог, в котором содержатся файл-функции, должен быть текущим, или путь к нему должен быть добавлен в пути поиска, иначе

MATLAB просто не найдет функцию или вызовет вместо нее другую с тем же именем (если она находится в каталогах, доступных для поиска).

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

»х = [1.3 7.2];

»у = myfun(x)

???Error using ==> ^ Matrix must be square.

Error in ==> C:\MATLABRll\work\myfun.m

On line 2 ==> f = exp(-x)*sqrt((х^2+1)/(х^4+1));

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

114

Измените тело функции, как указано в следующем листинге (не забудьте сохранить изменения в файле myfun.m)

function f = myfun(x)

f = ехр(-х).*sqrt((х.^2+1)./(х.^4+0.1));

Теперь аргументом функции myfun может быть как число, так и вектор или матрица значений, например:

»х = [1.3 7.2];

»у = myfun(x)

У =

0.2600 0.0001

Переменная у, в которую записывается результат вызова функции myfun, автоматически становится вектором нужного размера.

Постройте график функции myfun на отрезке [0, 4] из командной строки или при помощи файл-программы:

x = [0:0.5:4];

у = myfun(x);

plot(x, у)

MATLAB предоставляет еще одну возможность работы с файл-

функциями использование их в качестве аргументов некоторых команд.

Например, для построения графика служит специальная функция fplot,

заменяющая последовательность команд, приведенную выше. При вызове fplot имя функции, график которой требуется построить, заключается в апострофы, пределы построения указываются в вектор-строке из двух элементов fplot('myfun', [0, 4]).

115

Постройте графики myfun при помощи plot и fplot на одних осях, при помощи hold on. Обратите внимание, что график, построенный при помощи fplot, более точно отражает поведение функции, т.к. fplot сама подбирает шаг аргумента, уменьшая его на участках быстрого изменения отображаемой функции. Результаты приведите в отчете по лабораторной работе.

Файл-функции с несколькими входными аргументами

Написание файл-функций с несколькими входными аргументами практически не отличается от случая с одним аргументом. Все входные аргументы размещаются в списке через запятую. Например, следующий листинг содержит файл-функцию, вычисляющую длину радиус-вектора

точки трехмерного пространства x2 y2 z 2 .

Листинг файл-функции с несколькими аргументами

function r = radius3(x, у, z)

r = sqrt(х.^2 + у.^2 + z.^2);

Для вычисления длины радиус-вектора теперь можно использовать

функцию radius3, например:

» R = radius3(1, 1, 1)

R =

1.732

Кроме функций с несколькими входными аргументами, MATLAB

позволяет создавать функции, возвращающие несколько значений, т.е.

имеющие несколько выходных аргументов.

Файл-функции с несколькими выходными аргументами

Файл-функции с несколькими выходными аргументами удобны при вычислении функций, возвращающих несколько значений (в математике

116

они называются вектор-функциями). Выходные аргументы добавляются через запятую в список выходных аргументов, а сам список заключается в квадратные скобки. Хорошим примером является функция, переводящая время, заданное в секундах, в часы, минуты и секунды. Данная файл-

функция приведена в следующем листинге.

Листинг функции перевода секунд в часы, минуты и секунды

function [hour, minute, second] = hms(sec)

hour = floor(sec/3600);

minute = floor((sec-hour*3600)/60);

second = sec-hour*3600-minute*60;

При вызове файл-функций с несколькими выходными аргументами результат следует записывать в вектор соответствующей длины

» [Н, М, S] = hms(10000)

H =

2

М =

46

S =

40

6.1.5. Основы программирования в MATLAB

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

Для решения многих более серьезных задач требуется писать программы, в

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

117

основные операторы, задающие последовательности выполнения команд

MATLAB. Операторы можно использовать как в файл-процедурах, так и в функциях, что позволяет создавать программы со сложной разветвленной структурой.

Оператор цикла for

Оператор предназначен для выполнения заданного числа повторяющихся действий. Самое простое использование оператора for

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

for count = start:step:final

% Далее идет текст программы из команд MATLAB

end

Здесь count переменная цикла, start ее начальное значение, final

конечное значение, а step шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается, как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака.

Разберем применение оператора цикла for на некоторых характерных примерах.

Пусть требуется вывести семейство кривых для x [0, 2 ] , которое задано функцией, зависящей от параметра y(x, a) e axsin x, для значений параметра от 0,1 до 0,1.

Наберите текст файл-процедуры в редакторе М-файлов и сохраните в файле FORdem1.m, и запустите его на выполнение (из редактора М-файлов или из командной строки, набрав в ней команду FORdem1 и

нажав <Enter>):

118

% файл-программа для построения семейства кривых x = [0:pi/30:2*pi];

for a = -0.1:0.02:0.1

y = exp(-a*x).*sin(x); hold on

plot(x, y)

end

В результате выполнения FORdem1 появится графическое окно

(рис. 6.1), которое содержит требуемое семейство кривых.

Рис. 6.1. Результат выполнения FORdem1

Замечание 4

Редактор М-файлов автоматически предлагает расположить операторы внутри цикла с отступом от левого края. Используйте эту возможность для удобства работы с текстом программы.

119

Напишите файл-программу для вычисления суммы

10 1

S .

k 1 k!

Алгоритм вычисления суммы использует накопление результата, т.е.

сначала сумма равна нулю (S = 0), затем в переменную k заносится единица, вычисляется 1/k!, добавляется к S и результат снова заносится в S.

Далее k увеличивается на единицу, и процесс продолжается, пока последним слагаемым не станет 1/10!. Файл-программа Fordem2,

приведенная в следующем листинге, вычисляет искомую сумму.

Листинг файл-программы Fordem2 для вычисления суммы

%ФАЙЛ-ПРОГРАММА ДЛЯ ВЫЧИСЛЕНИЯ СУММЫ

%1/1!+1/2!+ … +1/10!

%Обнуление S для накопления суммы

S = 0;

% накопление суммы в цикле for k = 1:10

S = S + 1/factorial(k);

End

% вывод результата в командное окно

S

Наберите файл-программу в редакторе М-файлов, сохраните её в текущем каталоге в файле Fordem2.m и выполните. Результат отобразится в командном окне, т.к. в последней строке файл-программы S содержится без точки с запятой для вывода значения переменной S

120

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]