Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Лабораторная работа № 2



РАБОТА С ГРАФИКОЙ В MATLAB

Цель работы: изучение основных операторов графики системы MatLab и создание программ, реализующих графический вывод

Контрольные вопросы

1. С помощью какой команды осуществляется построение графиков в декартовой системе координат?

2. Для чего служит команда mesh?

3. Как осуществляется задание надписей?

4. Для чего используется команда grid?

5. Как осуществляется разбивка окна на меньшие окна?

6. Для чего используется команда hold?

Лабораторное задание

1. Составить и отладить программы для вывода графиков функций f1, f2, f3 соответственно индивидуальному заданию (табл. 2.1). Вывод графиков должен быть осуществлен в одном окне, графики должны быть подписаны, отмасштабированы.

Таблица 2.1 – Варианты заданий

Номер варианта

2. Составить и отладить программы для вывода графика трехмерной поверхности для функции f4 ( ) задания из табл. 2.1.

3. Написать файл-функцию для вычисления кусочно-заданной функции (табл. 2.2) и построить ее график.

 

Таблица 2.2 – Варианты заданий кусочно-заданной функции

 

№ варианта Функция № варианта Функция
 

 

 

Окончание таблицы 2.2

 

 

 

 

3. ПРОГРАММИРОВАНИЕ В СРЕДЕ MATLAB.

СОЗДАНИЕ И РЕДАКТИРОВАНИЕ М-ФАЙЛОВ

Редактор М-файлов

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

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

Новый М-файл открывается по командам главного меню File/New/M-file или комбинации клавиш Ctrl+N. Новый файл открывается в окне редактора М-файлов, которое изображено на рис.3.1.

Рисунок 3.1 - Окно редактора М-файлов

 

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

a1 = 3;

a2 = 2.5;

b1 = a1 + a2 % сложение

a3 = 2.6;

a4 = 1.7;

b2 = a3 – a4 % вычитание

Перед запуском программы ее следует сохранить по командам главного меню File/SaveAs под именем, например, Prim1.m. Для запуска на выполнение всех команд, содержащихся в файле, следует выбрать пункт Run в меню Debug, или нажать клавишу F5. Но делать предварительное сохранение как отдельную операцию не обязательно. Допустимо сразу раскрыть меню Debug, в котором опция Run в этом случае заменяется опцией Save and Run, что позволяет запустить программу, предварительно сохранив ее автоматически. Таким образом, файл можно запустить сразу после редактирования (если не требуется ему присвоить новое имя) нажатием клавиши F5.

Редактор позволяет выполнять часть команд файла. Например, можно выполнить первые три команды файла Prim1.m, выделив их с помощью мыши и выбрав опцию Evaluate Selection меню Text или нажав клавишу F9. Аналогично можно выполнить оставшиеся три команды примера.

Редактор–отладчик m–файлов выполняет синтаксическую проверку программного кода по мере ввода текста. При этом используется следующее цветовое выделение:

–ключевые слова языка программирования – синий цвет;

–операторы, константы и переменные – черный цвет;

- комментарии после знака % – зеленый цвет;

- символьные переменные (в апострофах) – коричневый цвет;

- синтаксические ошибки – красный цвет.

Благодаря цветовому выделению вероятность синтаксических ошибок резко снижается.

Для исключения части исполняемого кода без его удаления или в случае длинного комментария можно использовать блок комментариев, начинающийся со строки из двух символов %{ (знак процента и открывающейся фигурной скобки) и заканчивающийся строкой из двух символов %} (закрывающейся фигурной скобки и знак процента).

Существующий М-файл открывается опцией File/Open рабочей среды или редактора М-файлов. Открыть файл в редакторе можно и командой edit из командной строки, указав в качестве аргумента имя файла, например,

>> edit prim1.m

Команда edit без аргумента открывает редактор и создает новый файл без имени. Если введена команда edit с именем несуществующего файла, то редактор воспринимает это как запрос на создание нового М-файла с указанным именем.

В редакторе может быть одновременно открыто несколько файлов. MatLab позволяет менять способ отображения файлов в редакторе. По умолчанию окно Editor редактора одно, и при открытии каждого нового файла оно снабжается закладкой внизу рабочей области с именем файла. Последние пять кнопок на панели инструментов позволяют выбрать способ расположения окон с файлами в рабочей области редактора. Например, ее можно разделить по горизонтали или по вертикали. Инструменты Dock и UnDock (расположены в правой части строки меню) позволяют открыть каждый файл в своем окне редактора или, наоборот, встроить его в другое окно редактора.

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

Для использования редактора М-файлов без запуска MatLab расширение m в Windows должно быть ассоциировано с приложением meditor.exe. В этом случае файл откроется в редакторе по двойному нажатию мышью по имени М-файла. Файл можно редактировать, но не выполнять.

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

 

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

Он имеет следующую структуру:

%Основной комментарий

%Дополнительный комментарий

Тело файла с любыми выражениями

 

Важны следующие свойства файлов – сценариев:

1) они не имеют входных и выходных аргументов;

2) работают с данными из рабочей области;

3) в процессе выполнения не компилируются;

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

Рассмотрим следующий файл-сценарий (рис. 3.2):

 

 

Рисунок 3.2 – Создание файла-сценария в MatLab

Первые три строки здесь – это комментарий, остальные – тело файла. Обратите внимание на возможность задания комментария на русском языке. Знак % в комментариях должен начинаться с первой позиции строки. Необходимо отметить, что такой файл нельзя запустить без предварительной подготовки, сводящейся к заданию значений переменным xmin и xmах, использованным в теле файла. Это следствие первого свойства файлов-сценариев – они работают с данными из рабочей области. Имена файлов-сценариев нельзя использовать в качестве параметров функций, поскольку файлы–сценарии не возвращают значений. Можно сказать, что файл–сценарий – это простейшая программа на языке программирования MatLab.

Файл–программы запускаются из редактора М-файлов, из командной строки или другой файл-программы (при этом в качестве команды используется имя М-файла без расширения). MatLab выполняет следующее:

1. Проверяет, является ли введенная команда именем какой-либо из переменных, определенных в рабочей среде. Если введена переменная, то выводится ее значение.

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

3. Если введена не переменная и не встроенная функция, то MatLab отыскивает М-файл с названием команды и расширением m. Если файл не найден в текущем каталоге, то MatLab просматривает каталоги, установленные в пути поиска.

Если ни одно из вышеперечисленных действий не привело к успеху, то в командное окно выводится сообщение об ошибке.

Узнать факт занятости имени можно по команде exist.

Текущий каталог и пути поиска можно установить при помощи команд интерфейса рабочей среды. Содержимое текущего каталога отображается в окне Current Directory с одноименной вкладкой. Текущий каталог устанавливается выбором из раскрывающегося списка Current Directory на панели инструментов рабочей среды MatLab. Если в списке нет нужного каталога, то его можно добавить в диалоговом окне Browse for Folder, которое появляется после нажатия на кнопку, расположенную справа от списка.

Пути поиска файлов определяются в диалоговом окне Set Patch навигатора путей (File/Set Patch). Рекомендуется хранить собственные файлы вне подкаталога toolbox основного каталога MatLab, так как эти файлы могут быть уничтожены при переустановке MatLab, а также по причине особенности использования файлов в этом подкаталоге.

Действия по установке путей дублируются командами. Текущий каталог устанавливается командой cd, например

>> cd c:\students\ztk21 или >> cd('c:\students\ztk21').

Для добавления каталогов в пути поиска служит команда addpath, которая по умолчанию помещает каталог в начало списка поиска, например,

>> addpath c:\magisters

Для добавления каталога в конец списка следует использовать параметр –end:

>> addpath c:\specialists –end

 

Результат выполнения можно проверить при помощи path, которая возвращает список каталогов, входящих в пути поиска.

Для удаления каталога из списка путей поиска предназначена функция rmpath:

>> rmpath c:\bacalavrs или >> rmpath ('c:\ bacalavrs').

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

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

Структура такого модуля с одним выходным параметром выглядит следующим образом:

 

function var= f_name(Cпиcoк_napaмeтpов)

%Основной комментарий

%Дополнительный комментарий

Тело файла с любыми выражениями

vаr=выражение

Например,

function f = myfun(x)

f = exp(-x) * sqrt((x^2 + 1) / (x^4 + 0.1));

В заголовке функции также размещаются имя функции и списки входных и выходных аргументов. Входные аргументы записываются в круглых скобках после имени функции (в примере – это x). Выходной аргумент указывается слева от знака равенства в заголовке функции (в примере – это f).

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

Использовать файл-функцию можно так же, как и встроенные функции, например

>> y = myfun(1.3)

y =

0.2600

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

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

>> x = 0 : 0.5 : 4;

>> y = myfun(x);

>> plot(x, y)


Рисунок 3.3– Пример использования plot

Но аналогичную задачу можно решить при помощи функции fplot, которой требуется указать имя файл-функции myfun или указать на нее (с оператором @ перед именем функции) и границы отрезка для построения графика:

>> fplot('myfun', [0 4]) или >> fplot(@myfun, [0 4]).

Результат выполнения показан на рис. 3.4.

Рисунок 3.4 – Пример использования fplot

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

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

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

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

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

hour = floor(sec/3600);

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

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

 

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

>> [H, M, S] = hms(10000)

H =

M =

S =

Файл-функции можно сопроводить комментариями. Все комментарии после заголовка и до тела функции или пустой строки выводятся в командное окно по команде help. Например:

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

% hms – перевод секунд в часы, минуты и секунды

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

% sec – число секунд

% hour – число полных часов

% minute – число полных минут

% second – остаток секунд

hour = floor(sec/3600);

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

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

 

Первая строка комментариев после заголовка функции называется H1-line и используется при поиске командой lookfor. Эта команда ищет указанное слово в строках H1-line всех файл-функций в каталогах, указанных в путях поиска, в том числе, и в текущем каталоге.

Для организации диалогового ввода и вывода используются следующие операторы, представленные в табл. 3.1.

 

Таблица 3.1 – Операторы диалогового ввода/вывода

Оператор Синтаксис Назначение
INPUT x = input(‘<приглашение>’) Для ввода данных с клавиатуры
DISP disp (<переменная или текст в апострофах>) Для вывода на дисплей  

 

Приведем простой пример диалоговой программы, которая служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса r (рис. 3.5).

 

 

Рисунок 3.5 – Пример диалоговой программы

 

Для организации ветвлений служат условные операторы.

Конструкции условных операторов:

1) if <условие>

<операторы>

End

Операторы (тело выражения) выполняются только в том случае, если условие истинно, если условие ложно, то тело выражения не выполняется.

2) if <условие>

<операторы 1>

Else

<операторы 2>

End

Если ход программы должен изменяться в зависимости от нескольких условий, то следует использовать полную конструкцию if-elseif-else. Каждая из ветвей elseif в этом случае должна содержать условие выполнения блока операторов, размещенных после нее. Важно понимать, что условия проверяются подряд, первое выполненное условие приводит к работе соответствующего блока, выходу из конструкции if-elseif-else и переходу к оператору, следующему за end. У последней ветви else не должно быть никакого условия. Операторы, находящиеся между else и end, работают в том случае, если все условия оказались невыполненными.

Например, требуется написать файл-функцию для вычисления кусочно-заданной функции (рис. 3.6).

 

 

Рисунок 3.6 – Листинг программы для вычисления значения функции

 

В системе MatLab могут применяться следующие операторы сравнения, приведенные в табл. 3.2.

 

Таблица 3.2 – Операторы сравнения

Символ Назначение Имя функции
< Меньше lt
>= Больше или равно ge
> Больше gt
<= Меньше или равно le
= = Равно eq
~= Не равно ne

 

Операции (= =, ~=) проводят сравнение вещественных и мнимых частей комплексных чисел, а операции (>, <, >=, <=) – только вещественных частей.

Логические операции можно записывать в виде функций (табл. 3.3).

 

Таблица 3.3 – Логические операции

Символ Назначение Имя функции
& Логическое «и» and
| Логическое «или» or
~ Отрицание not

Результатом логических операций являются числа 0 (false) и 1(true).

В системе MatLab есть две разновидности операторов цикла – условный и арифметический. Для повторения операторов нефиксированное число раз используется оператор цикла с предусловием: Оператор цикла while

while <условие>

<операторы>

End

Операторы выполняются, если переменная <условие> имеет ненулевые элементы.

Рассмотрим пример на вычисление суммы, похожий на пример из предыдущего пункта. Требуется найти сумму ряда для заданного x (разложение в ряд sin(x)):

.

Сумму можно накапливать до тех пор, пока слагаемые являются не слишком маленькими, скажем больше по модулю 10-10. Решаем задачу с применением цикла while, который работает, пока выполняется условие цикла:

while условие цикла
команды MatLab
end

Листинг файл-функции mysin, вычисляющей синус разложением в ряд:

function S = mysin(x)
% Вычисление синуса разложением в ряд
% Использование: y = mysin(x), -pi<x<pi

S = 0;

k = 0;

while abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10

S = S + (-1)^k*x.^(2*k+1)/factorial(2*k+1);

k = k + 1;

end

Арифметический оператор цикла имеет следующий вид:

for <имя> = <НЗ>: <Шаг>: <КЗ>

<операторы>

end,

где <имя> – имя управляющей переменной цикла;

<НЗ> – начальное значение управляющей переменной;

<КЗ> – конечное значение управляющей переменной;

<Шаг> – приращение значений переменной <имя> в ходе ее изменения от значения <НЗ> до значения <КЗ>. Если параметр <Шаг> не указан, по умолчанию его значение принимается равным единице.

При работе с циклом forдопустимо использование оператора прерывания цикла break. При работе данного оператора работа цикла завершается, и управление передается на следующий после конца цикла оператор.

Пример 1 – программа с циклами:

сlear

x1=1:0.01:pi;

y1=sin(x1);

k=3;

x=1:0.01:pi

n=length(x);

n

slag=1;

y2=1;

for i=2:k

slag=slag.*(-x.^2)./((2.*i-2)*(2.*i-1));

y2=y2+slag;

end;

y2

[x' y1' y2']

plot(x1,y1,'r')

hold on

plot(x,y2,'g:')

 

 

Рисунок 3.7 – Результат работы прогаммы 1

 

Пример 2 – программа с циклами:

clear

x1=1:0.01:pi;

y1=sin(x1);

k=3;

x=1:0.1:pi;

n=length(x);

n

for m=1:n

slag(m)=x(m);

y2(m)=x(m);

for i=2:k

slag(m)=slag(m).*(-x(m).^2)./((2.*i-2)*(2.*i-1));

y2(m)=y2(m)+slag(m);

end;

end;

n2=length(y2);

n2

y2;

[x' y2']

plot(x1,y1,'r')

hold on

plot(x,y2,'g:')

hold off

Рисунок 3.8 – Результат работы прогаммы 2

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

Алгоритм вычисления суммы использует накопление результата, т.е. сначала сумма равна нулю (S = 0), затем в переменную k заносится единица, вычисляется 1/k!, добавляется к S и результат снова заносится в S. Далее k увеличивается на единицу, и процесс продолжается, пока последним слагаемым не станет 1/10!. Файл-программа Prim3, приведенная в следующем листинге, вычисляет искомую сумму.

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

% файл-программа для вычисления суммы
% 1/1!+1/2!+ … +1/10!

% Обнуление S для накопления суммы
S = 0;
% накопление суммы в цикле
for k = 1:10
S = S + 1/factorial(k);
End
% вывод результата в командное окно S

 

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

S =
1.7183

Пример 4:табулирование с условием, дифференцирование и интегрирование

Листинг файл-программы:

clear

x=0:0.05:4;

a=x<=2;

for i=1:length(a)

if a(i)

y(i)=x(i);

else y(i)=3.*x(i);

end;

end;

[x' y']

figure(1)

plot(x,y,'r') % вывод графика функции

 

s=trapz(x,y)

s2=quad(@funs,0,4,1e-4)

figure(2)

f1=diff(funs(x));

x1=x(1:end-1)

plot(x1,f1) % вывод графика производной

Рисунок 3.9 – График функции

Рисунок 3.10 – График производной

 

Ход работы программы может определяться значением некоторой переменной (переключателя) т.е. способ ветвления программы основан на использовании оператора переключения switch. Оператор switch содержит блоки, начинающиеся со слова case, после каждого case записывается через пробел, то значение переключателя, при котором выполняется данный блок. Последний блок начинается со слова otherwise, его операторы работают в том случае, когда ни один из блоков case не был выполнен. Если хотя бы один из блоков case выполнен, то происходит выход из оператора switсh и переход к оператору, следующему за end.

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

 

 

Рисунок 3.11 – Листинг программы

 

Для остановки программы используется оператор pause. Он используется в следующих формах:

a) pause — останавливает вычисления до нажатия любой клавиши;

b) pause(N) — останавливает вычисления на N секунд;

c) pause on — включает режим отработки пауз;

d) pause off — выключает режим отработки пауз.

 

Оператор прерывания цикла break

При организации циклических вычислений следует заботиться о том, чтобы внутри цикла не возникло ошибок. Например, пусть задан массив x, состоящий из целых чисел, и требуется сформировать новый массив y по правилу y(i) = x(i+1)/x(i). Очевидно, что задача может быть решена при помощи цикла for. Но если один из элементов исходного массива равен нулю, то при делении получится inf, и последующие вычисления могут оказаться бесполезными. Предотвратить эту ситуацию можно выходом из цикла, если текущее значение x(i) равно нулю. Следующий фрагмент программы демонстрирует использование оператора break для прерывания цикла:

for x = 1:20
z = x-8;
if z==0
break
end
y = x/z
end

Как только переменная z принимает значение 0, цикл прерывается.

Оператор break позволяет досрочно прервать выполнение циклов for и while. Вне этих циклов оператор break не работает.

Если оператор break применяется во вложенном цикле, то он осуществляет выход только из внутреннего цикла.

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.