В самом простом случае синтаксис данного оператора if имеет вид:
Обращаю Ваше внимание что в отличие от современных языков программирования не используются такое понятие как составной оператор. Блок условного оператора обязательно заканчивается служебным словом end.
Ниже представлен пример реализации функции sign(), которая возвращает +1, если число больше нуля, -1 – если число меньше нуля и 0, если число равно нулю:
x = 5;
if x > 0
disp(1);
end
if x
% выполняются, если истинно условие
else
% выполняются, если условие ложно
end
Тогда приведенный выше пример можно записать следующим образом:
X = 5;
if x > 0
disp(1);
else
if x
% выполняются, если истинно выражение1
elseif
% выполняются, если истинно выражение2
.
elseif
% выполняются, если истинно выражениеN
end
и записывается следующим образом:
x = 5;
if x > 0
MatLab. Урок 5. Разработка графического интерфейса программы (GUI)
disp(1); % выполняется, если x > 0
elseif x = 0 и x = 0
if x 2
disp(«x не принадлежит диапазону от 0 до 2»);
else
disp(«x принадлежит диапазону от 0 до 2»);
end
Используя логические операторы И, ИЛИ, НЕ, можно создавать разнообразные составные условия. Например, можно сделать проверку, что переменная x попадает в диапазон от -5 до 5, но не принадлежит диапазону от 0 до 1. Очевидно, это можно реализовать следующим образом:
Обратите внимание, что при сложном составном условии были использованы круглые скобки. Дело в том, что приоритет операции И выше приоритета операции ИЛИ, и если бы не было круглых скобок, то условие выглядело бы так: (x >= -5 и x 1. Очевидно, что такая проверка давала бы другой результат от ожидаемого.
Круглые скобки в программировании используются для изменения приоритетов выполнения операторов. Подобно арифметическим операторам, логические также могут быть изменены по желанию программиста. Благодаря использованию круглых скобок, сначала выполняется проверка внутри них, а, затем, за их пределами. Именно поэтому в приведенном выше примере они необходимы для достижения требуемого результата.
НЕ (~) – самый высокий приоритет;
И (
ИЛИ (|) – самый низкий приоритет.
Оператор цикла while
Язык программирования MatLab имеет два оператора цикла: while и for. С их помощью, например, выполняется программирование рекуррентных алгоритмов, подсчета суммы ряда, перебора элементов массива и многое другое.
В самом простом случае цикл в программе организуется с помощью оператора while, который имеет следующий синтаксис:
Здесь означает условное выражение подобное тому, которое применяется в операторе if, и цикл while работает до тех пор, пока это условие истинно.
Следует обратить внимание на то, что если условие будет ложным до начала выполнения цикла, то операторы, входящие в цикл, не будут выполнены ни разу.
Приведем пример работы цикла while для подсчета суммы ряда :
MATLAB 03 Написание программ
i=1; % счетчик суммы
while i 20 % если S > 20,
break; % то цикл завершается
end
end % конец цикла
disp(S); % отображение суммы 21 на экране
В данном примере второе условие завершения цикла, когда S будет больше 20, записано в самом цикле и с помощью оператора break осуществляется выход из цикла на функцию disp(), стоящую сразу после цикла while.
Второй оператор управления выполнением цикла continue позволяет пропускать выполнение фрагмента программы, стоящий после него. Например, требуется подсчитать сумму элементов массива
исключая элемент с индексом 5. Такую программу можно записать следующим образом:
S = 0; % начальное значение суммы
a = ; % массив
i=0; % счетчик индексов массива
while i = : :
end
Рассмотрим работу данного цикла на примере реализации алгоритма поиска максимального значения элемента в векторе:
a = ;
m = a(1); % текущее максимальное значение
for i=1:length(a) % цикл от 1 до конца вектора с
% шагом 1 (по умолчанию)
if m m,
m = a(i); % то m = a(i)
end
end % конец цикла for
disp(m);
В данном примере цикл for задает счетчик i и меняет его значение от 1 до 10 с шагом 1. Обратите внимание, что если величина шага не указывается явно, то он берется по умолчанию равным 1.
В следующем примере рассмотрим реализацию алгоритма смещения элементов вектора вправо, т.е. предпоследний элемент ставится на место последнего, следующий – на место предпоследнего, и т.д. до первого элемента:
a = ;
disp(a);
for i=length(a):-1:2 % цикл от 10 до 2 с шагом -1
a(i)=a(i-1); % смещаем элементы вектора а
end % конец цикла for
disp(a);
Результат работы программы
3 6 5 3 6 9 5 3 1 0
3 3 6 5 3 6 9 5 3 1
Приведенный пример показывает, что для реализации цикла со счетчиком от большего значения к меньшему, нужно явно указывать шаг, в данном случае, -1. Если этого не сделать, то цикл сразу завершит свою работу и программа будет работать некорректно.
Решения уравнения
while условие повторения цикла команды MATLAB
В данном примере условием повторения цикла является то, что модуль текущего слагаемого x2k~l/(2k +1)! больше IO10. Для записи условия в форме,
понятной MATLAB, следует использовать знак «>» (больше). Текст файл-функции mysin, вычисляющей сумму ряда на основе рекуррентного соотношения
приведен в листинге 7.7.
Конечно, в общем случае малость слагаемого- понятие относительное, слагаемое может быть, скажем, порядка IO-10, но и сама сумма того же порядка. В этом случае условие окончания суммирования должно быть другим, а именно малость модуля отношения текущего слагаемого к уже накопленной части суммы. Пока не будем обращать на это внимания — нашей задачей является изучение работы с циклами.
Листинг 7.7. Файл-функция mysin, вычисляющая синус разложением в ряд
function s — mysin(х)
«% Вычисление синуса разложением в ряд
% Использование: у = mysin [х>, -pi 1.Oe-IO k = к + 1; u = -и* х2/(2*к)/(2*к + 1)
Обратите внимание, что у цикла while, в отличие от for, нет переменной цикла, поэтому пришлось до начёта цикла к присвоить единицу, а внутри цикла увеличивать к на единицу.
Рис. 7.3. Сравнение mysin и sin360_________ Часть II. Вычисления и программирование
Получающиеся графики изображены на рис. 7.3, они свидетельствуют о правильной работе файл-функции mysin.
Условие цикла while может содержать логическое выражение, составленное из операций отношения и логических операций или операторов. Для задания условия повторения цикла допустимы операции отношения, приведенные в табл. 7.1.
Таблица 7.1. Операции отношения
Обозначение Операция отношения
== Равенство
= Больше или равно
Не равно
Задание более сложных условий производится с применением логических операторов или операций. Например, условие -1 -1 и х = -1, X = -1) (к l.Oe-lO, k =0 , цикл повторяется. Но стоит задать r >, пока вы не
введете команду end, при которой программа MATLAB выполнит полный цикл и
отобразит новую командную строку.
- Если вы используете цикл в М-файле-сценарии с эффектом отображения echo on, то команды будут отражаться каждый раз во всем цикле. Вы можете предотвратить это, вставив команду echo off прямо перед выражением end и команду echo on сразу после него; тогда каждая команда в цикле будет отражена один раз (кроме end).
Примечание: есть три вида циклов в матлаб, которые приведены ниже
Источник: bar812.ru
Заметки про Matlab. Создание графического интерфейса пользователя (GUI Matlab)
В Matlab существует два способа создать графический интерфейс пользователя (Graphical user interface, GUI):
- Полуавтоматический способ создание GUI с помощью инструмента GUI Layout Editor (команда guide в консоли Matlab)
- «Ручной» программный способ создания GUI (GUI programmatically)
У каждого способа есть свои недостатки и преимущества. GUI Layout Editor больше подходит для начинающих пользователей, а программное создание GUI — для профессионалов.
GUI Layout Editor
В редакторе GUI Layout Editor (команда guide в консоли Matlab) можно вручную создавать все элементы интерфейса: панели, кнопки, чекбоксы и т.д.
В результате создания интерфейса получим два файла: fig-файл с «фигурой» самого интерфейса и m-файл, который создается самим Matlab и содержит программный код всех элементов интерфейса.
Главное преимущество guide — легко сделать простой GUI, т.к. весь код для интерфейса генерируется самим Matlab. Для работы программной частью GUI достаточно изучить принцип обмена данными с помощью команд setappdata и getappdata (что является стандартным приемом для обмена данными между различными элементами GUI).
Но более профессиональный подход – это создавать GUI программно, не пользуясь guide.
GUI programmatically
Преимущества програмного создания GUI:
- Легче управлять кодом GUI (код лучше структурирован, легче создавать новые элементы, удалять старые и т.д.)
- Нет отдельного fig-файла для интерфейса и отдельного программного m-файла (так как любое обновление fig-файла в guide требует соответствующего обновления m-файла и может привести к нежелательным эффектам).
Ознакомиться с guide, конечно, нужно на первых порах, чтобы лучше понять GUI в Matlab, но, по-моему, стоит переходить к программному созданию GUI чем быстрее, тем лучше.
А вот здесь и открывается другая сторона медали. Главная трудность в программном создании GUI в MATLAB то, что нужно вручную указывать расположение всех элементов интерфейса (параметр ‘Position’ с 4-я элементами: x,y координаты + ширина и длина). Это очень неудобно. В guide это проблема решается очень просто — с помощью инструмента Tools->Align Objects.
Простые интерфейсы можно довольно просто создавать программно, а вот чем больше кнопок, боксов – тем больше усложняется эта задача.
Простой примеры программного создания интерфейса можно найти здесь GUI without guide.
Итак, одной из важных проблем при программном создании GUI является расположение элементов. Хороший обзор инструментов, которые помогают решить эту проблему есть по ссылке Matlab layout managers. К сожелению, только в комментариях к обзору по ссылке упомянули GUI Layout Toolbox. Вот об этом тулбоксе и пойдет речь дальше.
С помощью GUI Layout Toolbox полностью решается проблема с визуальным оформлением GUI (не зря GUI Layout Toolbox попал в выборку программы недели на главном портале Matlab Pick of the Week).
GUI with GUI Layout Toolbox
Основная идея этого тулбокса вынесена в его название — это создание макетов (layouts), которые упрощают расположение элементов в главном окне GUI. У этого тулбокса очень хорошая инструкция (только на английском языке).
Общая инструкция по работе с GUI Layout Toolbox очень простая:
1. Создаем сетку (uiextras.Grid) (или можно этот шаг пропустить)
2. На сетку помещаем панели (uiextras.Panel),
3. На панели помещаем боксы (uiextras.Box)
4. В боксы помещаем элементы управления: кнопки, оси или еще что-нибудь.
Теперь о расположении всех элементов интерфейса заботиться GUI Layout Toolbox.
Наглядный пример GUI с помощью GUI Layout Toolbox с моими комментариями можно скачать по ссылке GUI_example.m.
В моем примере обмен данными между функциями и элементами интерфейса происходит с помощью приема, который называется Sharing Variables Between Parent and Nested — переменная, объявленная в главной функции, видима во всех вложенных функциях. Этот прием можно использовать вместо стандартных setappdata и getappdata.
Вместо заключения
Раньше я редко доводил программы до GUI и если и делал это, то только с помощью guide. Но с GUI Layout Toolbox эта задача очень сильно упростилась, за это большое спасибо разработчикам этого тулбокса.
Источник: www.engineerbox.ru