Как настроить смартфоны и ПК. Информационный портал

Циклы matlab. Условный оператор if

СПб.: БХВ-Петербург, 2005. - 1104 c.
ISBN 5-94157-494-0
Скачать (прямая ссылка): matlab72005.pdf Предыдущая 1 .. 117 > .. >> Следующая

while условие повторения цикла команды MATLAB

В данном примере условием повторения цикла является то, что модуль текущего слагаемого x2k~l/(2k +1)! больше IO10. Для записи условия в форме,

понятной MATLAB, следует использовать знак ">" (больше). Текст файл-функции mysin, вычисляющей сумму ряда на основе рекуррентного соотношения

k 2k(2k + \) k 1

приведен в листинге 7.7.

Примечание ^

Конечно, в общем случае малость слагаемого- понятие относительное, слагаемое может быть, скажем, порядка IO-10, но и сама сумма того же порядка. В этом случае условие окончания суммирования должно быть другим, а именно малость модуля отношения текущего слагаемого к уже накопленной части суммы. Пока не будем обращать на это внимания - нашей задачей является изучение работы с циклами.

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

function s - mysin(х)

"% Вычисление синуса разложением в ряд

% Использование: у = mysin [х}, -pi < х < piГлава 7. Управляющие конструкции языка программирова ни я

Ї вычисление первого слагаемого суммы для к = О k = 0; и - х;

% вычисление вспомогательной переменной х2 - х*х;

while abs(u) > 1.Oe-IO k = к + 1; u = -и* х2/(2*к)/(2*к + 1)

Обратите внимание, что у цикла while, в отличие от for, нет переменной цикла, поэтому пришлось до начёта цикла к присвоить единицу, а внутри цикла увеличивать к на единицу.

Сравните теперь результат, построив графики функций mysin и sin на отрезке [-л, я] Fia одних осях, например, при помощи fplot (команды можно задать из командной строки): » fplot (@rnysin, [-pi, pi]) » hold on

» fplot(@sin, t-pii pi]і "k.")

Рис. 7.3. Сравнение mysin и sin360_________ Часть II. Вычисления и программирование

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

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

Таблица 7.1. Операции отношения

Обозначение Операция отношения
== Равенство
< Меньше
<= Меньше или равно
>= Больше или равно
Не равно

Задание более сложных условий производится с применением логических операторов или операций. Например, условие -1<.г<2 состоит в одновременном выполнении неравенства а>-1 и х<2 и записывается при помощи логического оператора and

and(x >= -1, X < 2)

или эквивалентным образом с применением логической операции "и" - &

(х >= -1) & (х < 2)

Основные логические операции и операторы и примеры их записи приведены в табл. 7.2 (логические выражения подробно описаны в разд. "Логические операции с числами и массивами " этой главы).

Таблица 7.2. Логические выражения

Тип выражения Выражение Логический оператор Логическая операция
Логическое "и" А*<3 И к=4 and (х < 3, k==4) (х<3) s (k = 4)
Логическое "или" X = Ї или 2 or (х == 1, X= 2) (х == 1) I (х == 2)
Отрицание "не" а* 1.9 not (a == 1.9) -(а == 1.9)Глава 7. Управляющие конструкции языка программирова ни я

^ Примечание ^

Операторы not, and и or являются функциям», возвращающими значения "истина" (логическая единица) или "ложь" (логический ноль). Такие же значения принимает любое логическое выражение.

При вычислении суммы бесконечного ряда имеет смысл ограничить число слагаемых. Если ряд расходится из-за того, что его члены не стремятся к нулю, то условие на малость текущего слагаемого может никогда не выполниться и программа зациклится. Выполните суммирование, ограничив число слагаемых. Добавьте в условие цикла while файл-функции mysin (см. листинг 7.6) ограничение на количество слагаемых:

(abs(u) > 1.Oe-IO) & (к <= 100000) или в эквивалентной форме:

and l.Oe-lO, k <= 100000)

^ Примечание ^

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

разд. "Логические выражения с массивами и числами" данной главы).

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

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

Условный оператор if и оператор переключения switch позволяют создать гибкий разветвляющийся алгоритм, в котором при выполнении определенных условий выполняется соответствующий блок операторов или команд MATLAB. Практически во всех языках программирования имеются аналогичные операторы.

Условный оператор if

Оператор if может применяться в простом виде, для выполнения блока команд при удовлетворении некоторого условия, или в конструкции if-eiseif-eise для написания разветвляющихся алгоритмов.362

Часть II. Вычисления и программирование

Проверка входных аргументов

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

Кафедра: Информационные технологии

ПРОГРАММИРОВАНИЕ В MATLAB


Операторы MATLAB

· Операторы цикла

Синтаксис

for count=start:step:final

команды MATLAB

Описание

count – переменная цикла,

start – ее начальное значение,

final – ее конечное значение,

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

цикл заканчивается, как только значение count становится больше final.

Пусть требуется вывести семейство кривых для x? , которое задано функцией, зависящей от параметра

y (x, a) = e -ax sin x,

для значений параметра а от -0.1 до 0.1. Ниже приведен листинг файл-программы для вывода семейства кривых.

Листинг программы

x = ;

for a = -0.1:0.02:0.1

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

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

Синтаксис

while условие цикла

команды MATLAB

Описание

Цикл работает, пока выполняется (истинно) условие цикла. Для задания условия выполнения цикла допустимы следующие операции отношения:

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


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

Условный оператор if

Синтаксис

if условие

команды MATLAB

Описание

Если условие верно, то выполняются команды MATLAB, размещенные между if и end, а если условие не верно, то происходит переход к командам, расположенных после end.

Условный оператор elseif

Синтаксис

if условие1

elseif условие2

………………………

elseif условиеn

Описание

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

Оператор switch

Синтаксис

switch переменная

case значение1

case значение2

……………………

case значениеn


Каждая ветвь определяется оператором case, переход в нее выполняется тогда, когда переменная оператора switch принимает значение, указанное после case, или одно из значение из списка case. После выполнения какой-либо из ветвей происходит выход из switch, при этом значения, заданные в других case, уже не проверяются. Если подходящих значений для переменной не нашлось, то выполняется ветвь программы, соответствующая otherwise.

Прерывания цикла. Исключительные ситуации.

Оператор break

Синтаксис

Оператор break используется при организации циклических вычислений: for…end, while…end. При выполнении условия

if условие

оператор break заканчивает цикл (for или while) и происходит выполнение операторов, которые расположены в строках, следующих за end. В случае вложенных циклов break осуществляет выход из внутреннего цикла.

Обработка исключительных ситуаций, оператор try…catch

Синтаксис

операторы, выполнение которых

может привести к ошибке

операторы, которые следует выполнить

при возникновении ошибки в блоке

между try и catch

Описание

Конструкция try…catch позволяет обойти исключительные ситуации (ошибки, приводящие к окончанию работы программы, например, обращение к несуществующему файлу) и предпринять некоторые действия в случае их возникновения.

Сервисные функции

disp – осуществляет вывод текста или значения переменной в командное окно

input – осуществляет запрос на ввод с клавиатуры. Используется при создании приложений с интерфейсом из командной строки.

eval – выполняет содержимое строки или строковой переменной, как команды MATLAB

clear – удаляет переменные рабочей среды.

сlc – производит очистку командного окна

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

help имя_функции


Задания на выполнение лабораторной работы

Номер конкретного варианта задания определяется преподавателем.

Задание №1

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

Цель работы:

Необходимо составить программу вычисления коэффициентов алгебраического интерполяционного многочлена P n (x)=a 0 +a 1 x+ … +a n x n .

Методические указания:

0 1 2 3
1,2 1,4 1,6 1,8
8,3893 8,6251 8,9286 8,9703

Коэффициенты a 0 , a 1 , …, a n определяются из решения системы уравнений:

Здесь n – порядок интерполяционного многочлена,

n+1 – количество заданных пар точек (x, y),

a 0 , a 1 ,… a n – искомые коэффициенты многочлена P n (x)=a 0 +a 1 x+ … +a n x n).

Требования к программе

· Задать границы отрезка , на котором строится интерполяционный многочлен P(x)

· Задать n – количество отрезков интерполяции (или, что то же самое, степень многочлена)

Примечание: x0, xn, n вводятся с клавиатуры.

· Для получения исходных данных (x, y) (количество пар точек (x i, y i), по которым строится интерполяционный многочлен P(x) – n1=n+1) предусмотреть:

ü Ввод произвольно расположенных узлов x i, i=0, n с клавиатуры

ü Расчет узлов x i , i=0, n, соответствующих равномерному расположению аргумента x на отрезке

ü В пп. 1,2 значения y i , i=0, n либо вводятся с клавиатуры (если исходная функция неизвестна), либо вычисляются по заданной функции f(x). Выражение, определяющее функцию, вводится с клавиатуры и должно соответствовать правилам записи выражений в MATLAB

ü Ввод данных (x i, y i, i=0, n) из файла

· Решить систему уравнений для определения коэффициентов многочлена P(x)

· Построить графики исходной таблично заданной функции и многочлена P(x)

· Если исходные данные заданы в виде функции f(x), построить график погрешности интерполяции /f(x) – P(x)/. Рассчитать максимальное по модулю значение погрешности интерполяции на заданном промежутке.

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


Задание №2

Интерполяция сплайнами

Цель работы:

Необходимо составить программу вычисления коэффициентов и построения сплайн-функции S(x), «склеенной» из кусков многочленов 3‑го порядка S i (x), которые имеют специальную форму записи:

функция S i (x) определена на отрезке ,

Требования к программе

При выполнении данной работы необходимо:

· Задать границы отрезка , на котором строится сплайн-функция S(x)

· Задать n – количество отрезков интерполяции, на каждом из которых строится кубический многочлен Si(x).

· Примечание: x0, xn, n вводятся с клавиатуры.

· Организовать ввод исходных данных (x, y) (количество пар точек (xi, yi), по которым строится сплайн-функция S(x), n1=n+1), предусмотрев:

ü Ввод произвольно расположенных узлов xi, i=0, n с клавиатуры

ü Расчет узлов xi, i=0, n, соответствующих равномерному расположению аргумента x на отрезке

ü В пп. 1,2 значения yi, i=0, n либо вводятся с клавиатуры (если исходная функция неизвестна), либо вычисляются по заданной функции f(x). Выражение, определяющее функцию, вводится с клавиатуры и должно соответствовать правилам записи выражений в MATLAB

ü Ввод данных (xi, yi, i=0, n) из файла

ü S1""(x0)=0, S3""(x3)=0

ü S1"(x0)=f "(x0), S3"(x3)=f "(x3)

ü S1""(x0)=f «(x0), S3""(x0)=f «(x3)

· Для определения коэффициентов естественного кубического сплайна (краевые условия 1) необходимо решить следующую систему уравнений:

Коэффициенты σ 0 =0,σ n =0

· Построить графики исходной функции и сплайн-функций для всех трех типов краевых условий.

· Построить графики функций погрешности сплайн-интерполяции f(x) – S(x) для всех трех типов краевых условий.

Примечание:

В пакете MATLAB индексы одномерных и двумерных массивов начинаются с 1, а не с 0. Учесть это при составлении программы.


Задание №3

Аппроксимация функции методом наименьших квадратов (МНК).

Данное задание подразумевает нахождение для некоторой совокупности данных аппроксимирующей функции (многочлена степени m), построенной методом наименьших квадратов (МНК).

Цель работы:

Необходимо составить программу нахождения коэффициентов многочлена φ(x)=a 0 +a 1 *x+… a n *x m методом наименьших квадратов.

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

1,2 1,4 1,6 1,8 2,0 2,2 2,4 2,6 2,8 3,0
8,3893 8,6251 8,9286 8,9703 9,1731 9,1784 8,8424 8,7145 8,3077 7,9611

Поиск необходимых коэффициентов осуществляется следующим образом:

где n – количество точек (x, y),

m – степень искомого многочлена,

a 0 , a 1 , …, a m – искомые коэффициенты (φ(x)=a 0 +a 1 x+ … +a m x m).

Требования к программе

При выполнении данной работы необходимо:

· Задать границы отрезка , на котором строится аппроксимирующая функция φ(x)=a0+a1*x+… an * xm

· Задать m – степень многочлена

· Примечание: x1, xn, m вводятся с клавиатуры.

· Для получения исходных данных (x, y), по которым строится аппроксимирующая функция φ(x)=a0+a1*x+… an* x m предусмотреть:

ü Ввод произвольно расположенных узлов xi, i=1, n с клавиатуры

ü Расчет узлов xi, i=1, n, соответствующих равномерному расположению аргумента x на отрезке

ü В пп. 1,2 значения yi, i=1, n либо вводятся с клавиатуры (если исходная функция неизвестна), либо вычисляются по заданной функции f(x). Выражение, определяющее функцию, вводится с клавиатуры и должно соответствовать правилам записи выражений в MATLAB

ü Ввод данных (xi, yi, i=1, n) из файла

· Решить систему уравнений для определения коэффициентов многочлена φ(x)

· Построить графики исходной таблично заданной функции и многочлена φ(x)

· Если исходные данные заданы в виде функции f(x), построить график погрешности интерполяции /f(x) – φ(x)/. Рассчитать максимальное по модулю значение погрешности интерполяции на заданном промежутке.

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


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

Отчет должен содержать:

1. Постановку задачи

2. Текст программы

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

Примечание тексты программ должны быть снабжены комментариями.


Список литературы

1. Ануфриев И.Е. Самоучитель Matlab 5.3/6.x – СПб.: БХВ-Петербург, 2003. – 736 с.: ил.

2. В.П. Дьяконов MATLAB 6.5 SPI/7 + Simulink 5/6 в математике и моделировании. Серия «Библиотека профессионала». – М.: СОЛОН-Пресс, 2005. – 576 с.: ил.

Концентрических окружностей с уменьшающимся радиусом по мере затухания колебаний скорости и момента. Аналогичная картина наблюдается при ступенчатом набросе нагрузки. 5. РАЗРАБОТКА ВИРТУАЛЬНОЙ ЛАБОРАТОРНОЙ РАБОТЫ НА БАЗЕ ВИРТУАЛЬНОЙ АСИНХРОННОЙ МАШИНЫ Иную возможность анализа АД представляет специализированный раздел по электротехнике Toolbox Power System Block. В его библиотеке имеются блоки...





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

Должны быть прямоугольными. 5. Полиномы По степени применимости, по разнообразию и качеству соответствующих команд скалярные полиномы – следующие за матрицами математические объекты в MATLAB"е. Полином p(x)=anxn+an-1xn-1+...+a0 задается вектором-строкой p из чисел an, an-1, ... , a0, т.е. коэффициентами, расположенными в порядке убывания показателя степени. Его степень n задавать не...

3.4. Операторы системы MATLAB 5. Объединение операторов в арифметические выражения. Встроенные функции

Операторы системы MATLAB делятся на три категории:

  • Арифметические операторы позволяют конструировать арифметические выражения и выполнять числовые вычисления.
  • Операторы отношения позволяют сравнивать числовые операнды.
  • Логические операторы позволяют строить логические выражения.

Логические операторы имеют самый низкий приоритет относительно операторов отношения и арифметических операторов.

Арифметические операторы. При работе с массивом чисел установлены следующие уровни приоритета среди арифметических операций:

уровень 1 : поэлементное транспонирование (."), поэлементное возведение в степень (.^), эрмитово сопряженное транспонирование матрицы ("), возведение матрицы в степень (^);
уровень 2: унарное сложение (+), унарное вычитание (-);
уровень 3: умножение массивов (.*), правое деление (./), левое деление массивов (.\), умножение матриц (*), решение систем линейных уравнений - операция (/), операция (\);
уровень 4: сложение (+), вычитание (-);
уровень 5: оператор формирования массивов (:).

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

Пример

Пусть заданы 2 вектора

A = ;
B = ;

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

C = A./B. ^ 2
C = 0.7500 9.0000 0.2000
C = (A./B). ^ 2
C = 2.2500 81.0000 1.0000
совершенно различны.

Арифметические операторы допускают использование индексных выражений:

b = sqrt (A(2)) + 2*B (1)
b = 7

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

Операторы отношения . В системе MATLAB определено 6 следующих операторов отношения:

  • < Меньше
  • <= Меньше или равно
  • > Больше
  • > = Больше или равно
  • == Равно тождественно
  • ~ = Не равно

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

Операторы отношения, как правило, применяется для изменения последовательности выполнения операторов программы. Поэтому они чаще всего используются в теле операторов if, for, while, switch.

Операторы отношения всегда выполняются поэлементно.

Пример .

Выполним сравнение двух массивов, используя условие А

A = ;
B = ;
А< B

ans =

1 0 0
0 1 1
1 0 1

Полученная матрица указывает позиции, где элемент А меньше соответствующего элемента B.

При вычислении арифметических выражений операторы отношения имеют более низкий приоритет, чем арифметические, но более высокий, чем логические операторы.

Операторы отношения могут применятся к многомерным массивам, для которых одна из размерностей равна нулю, при условии, что оба массива - одинакового размера или один из них - скаляр. Однако выражения типа A == применимы только к массивам размера 0х0 или 1х1, а в других случаях вызывают ошибку.

Поэтому наиболее универсальный способ проверить, является ли массив пустым - это применить функцию isempty (A).

Логические операторы . В состав логических операторов системы MATLAB входят следующие операторы:

& И
| ИЛИ
~ НЕТ

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

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

Каждому логическому оператору соответствует некоторый набор условий, которые определяю результат логического выражения:

  • Логическое выражение с оператором AND (&) является истинным, если оба операнда - истинны. Если элементами логического выражения являются числа, то выражение истинно, если оба операнда отличны от нуля.

Пример
Пусть заданы два числовых вектора:
u = ;
v =
;
и логическое выражение с оператором AND (&) :
U & v
ans =

1 0 1 0 0 1
  • Логическое выражение с оператором OR (|) является истинным, если один из операндов или оба операнда логически истинны. Выражение ложно, только если оба операнда логически ложны.
    Если элементами логического выражения являются числа, то выражение ложно, если оба операнда равны нулю.

Пример
Используем векторы u и v, определенные выше, и выполним логическое выражение с оператором OR (|):
U | v
ans =

1 1 1 1 0 1
  • Логическое выражение с оператором NOT (~) строит отрицание. Результат логически ложен, если операнд истинен, и истинен, если операнд ложен. Если элементами логического выражения являются числа, то любой операнд, отличный от нуля, становится нулем, и любой нулевой операнд становится единицей.

Пример
Используем вектор u, заданный выше и построим логическое выражение с оператором NOT (~):
~ u
ans =

0 1 0 0 1 0

Логические функции . В дополнение к логическим операторам в состав системы MATLAB включено ряд логических функций:

  • Функция xor(a, b) реализует операцию ИСКЛЮЧИТЕЛЬНОЕ ИЛИ. Выражение, содержащее ИСКЛЮЧИТЕЛЬНОЕ ИЛИ истинно, если один из операндов имеет значение TRUE, а другой FALSE. Для числовых выражений, функция возвращает 1, если один из операндов отличен от нуля, а другой - нуль.

Пример
Рассмотрим два числовых операнда а и b:
a = 1;
b = 1;
Тогда операция xor даёт результат:
Xor (a, b)
ans = 0

  • Функция all возвращает 1, если все элементы вектора истинны или отличны от нуля.

Пример
Пусть задан вектор u и требуется проверить его на условие "все ли элементы меньше 3?". Если это условие выполняется, то выдается сообщение "Все элементы меньше 3".

u = ;
if all(u < 3)
Disp ("Все элементы меньше 3")
end

В данном случае никакого сообщения не появится, но если в качестве вектора u взять вектор

u =

то появитсясообщение

ans = " Все элементы меньше 3"

В случае массивов функция all проверяет столбцы, то есть является ориентированной по столбцам.

Пример

A =
all(A)

  • Функция any возвращает 1, если хотя бы один из элементов аргумента отличен от нуля; иначе, возвращается 0. В случае обработки массивов функция any является столбцовоориентированной.
  • Функции isnan и isinf возвращают 1 для NaN и Inf, соответственно. Функция isfinite истинна только для величин, которые не имеют значения inf или NaN.

Пример
Рассмотрим сдующие два числовых массива А и В
A = ;
B =
;
Образуем массив С и применим перечисленные выше функции
C = A./B
C =

NaN Inf 0.3333
1.0000 NaN NaN
isfinite (C) isnan (C) isinf (C)
ans =
0 0 1
1 0 0
ans =
1 0 0
0 1 1
ans =
0 1 0
0 0 0

Полный список логических функций системы MATLAB содержится в каталоге ops.

Функция find . Функция find определяет индексы элементов массива, которые удовлетворяют заданному логическому условию. Как правило, она используется для создания шаблонов для сравнения и создания массивов индексов. В наиболее употребительной форме функция к = find(х <условие>) возвращает вектор индексов тех элементов, которые удовлетворяет заданному условию.

A = magic(4)
A =

16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

k = find(A > 8);
A(k) = 100

A =

100 2 3 100
5 100 100 8
100 7 6 100
4 100 100 1

Функция вида = find(x) позволяет получить индексы ненулевых элементов прямоугольного массива. Функция вида = find(x) возвращает кроме того и их значения в виде вектора s.

Объединение операторов в арифметические выражения.

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

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

(a*b) < (c*d)

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

(A & B) == (C | D)

Управление последовательностью исполнения операторов. Существуют четыре основных оператора управления последовательностью исполнения инструкций:

  • оператор условия if, в сочетании с оператором else и elseif выполняет группу инструкций в соответствии с некоторыми логическими условиями;
  • оператор переключения switch, в сочетании с операторами case и otherwise выполняет различные группы инструкций в зависимости от значения некоторого логического условия;
  • оператор условия while выполняет группу инструкций неопределенное число раз, в соответствии с некоторым логическим условием завершения;
  • оператор цикла for выполняет группу инструкций фиксированное число раз. Все операторы управления включают оператор end, чтобы указать конец блока, в котором действует этот оператор управления.

Синтаксис:

Описание:

Оператор условия if .... end вычисляет некоторое логическое выражение и выполняет соответствующую группу инструкций в зависимости от значения этого выражения. Если логическое выражение истинно, то MATLAB выполнит все инструкции между if и end, а затем продолжит выполнение программы в строке после end. Если условие ложно, то MATLAB пропускает все утверждения между if и end и продолжит выполнение в строке после end.

Пример .

if rem(a, 2) == 0
disp("a четно")
b = а/2;
end

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

Пример .
Пусть задана матрица Х; запишем следующий оператор условия:

if X
инструкции
end

Этот оператор равносилен следующему:

if all(X(:))
инструкции
end

Операторы if ... else ... end и if ... elseif ... end создают дополнительные ветвления внутри тела оператора if:

  • Оператор else не содержит логического условия. Инструкции, связанные с ним, выполняются, если предшествующий оператор if (и возможно elseif) ложны. Оператор elseif содержит логическое условие, которое вычисляется, если предшествующий оператор if (и возможно elseif) ложны. Инструкции, связанные с оператором elseif выполняются, если соответствующее логическое условие истинно.
  • Оператор elseif может многократно использоваться внутри оператора условия if.

Пример .
Рассмотрим фрагмент программы:

if n < 0 % Если n < 0, вывести сообщение об ошибке.
disp("Введенное число должно быть положительным");
elseif rem(n,2) == 0 %Если n положительное и четное, разделить на 2.
a= n/2;
else
a = (n+1)/2; %Если n > 0 и нечетное, увеличить на 1 и разделить.
end

Если в операторе if условное выражение является пустым массивом, то такое условие ложно. То есть оператор условия вида

if A
S1
else
S0
end

выполнит инструкции S0 только тогда, когда А - пустой массив.

Синтаксис :

switch <выражение>
% выражение - это обязательно скаляр или строка

case <значение1>
инструкции
% выполняются, если < выражение> =< значение1>

case <значение2>
инструкции
% выполняются, если <выражение> = < значение2>

...
otherwise
инструкции
% выполняются, если <выражение> не совпало ни с одним из
%значений

end

Оператор switch ... case 1 ... case k ... otherwise ... end выполняет ветвления, в зависмости от значений некоторой переменной или выражения.

Оператор переключения включает:

  • Заголовок switch, за которым следует вычисляемое выражение (скаляр или строка).
  • Произвольное количество групп case; Заголовок группы состоят из слова case, за которым следует возможное значение выражения, расположенное на одной строке. Последующие строки содержат инструкции, которые выполняются для данного значения выражения. Выполнение продолжается до тех пор, пока не встретится следующий оператор case или оператор otherwise. На этом выполнение блока switch завершается
  • Группа otherwise. Заголовок включает только слово otherwise, начиная со следующей строки размещаются инструкции, которые выполняются, если значение выражения оказалось не обработанным ни одной из групп case. Выполнение завершается оператором end.
  • Оператор end является последним в блоке переключателя.

Оператор switch работает, сравнивая значение вычисленного выражения со значениями групп case. Для числовых выражений оператор case выполняется, если <значение>== <выражение>. Для строковых выражений, оператор case истинен, если strcmp(значение, выражение) истинно.

Пример.
Рассмотрим оператор switch со следующими условиями: он проверяет переменную input_num; если input_num равно -1, 0 или 1, то операторы case выводят на экран соответствующее сообщения. Если значения выражения input_num не равно ни одному из этих значений, то выполнение переходит к оператору otherwise.

switch input_num
case -1
disp("минус один")
case 0
disp("нуль")
case 1
disp("плюс один")
otherwise
disp("другое значение")
end

Оператор switch может использовать множественное условие в единственной группе case посредством включения выражения case, если выражение для этого условия записано в виде массива ячеек:

switch var
case 1
disp("1")
case{2,3,4}
disp("2 или 3 или 4")
case 5
disp("5")
otherwise
disp("что-то другое")
end

Синтаксис :

while выражение
инструкции

end

Описание :

Оператор цикла с неопределенным числом операций while ... end многократно выполняет инструкцию или группу инструкций, пока управляющее выражение истинно.

Если выражение использует массив, то все его элементы должны быть истинны для продолжения выполнения. Чтобы привести матрицу к скалярному значению, следует использовать функции any и all.

Пример.
Этот цикл с неопределенным числом операций находит первое целое число n, для которого n! - записывается числом, содержащим 100 знаков:

n = 1;
while prod(1:n) < 1e100
n = n + 1;
end

Выход из while-цикла может быть реализован с помощью оператора break.

Если в операторе while, управляющее условие является пустым массивом, то такое условие ложно, то есть оператор вида while A, S1, end никогда не выполнит инструкции S1, если А - пустой массив.

Синтаксис:

for <переменная цикла> = <начальное значение>: <приращение>:<конечное значение>
инструкции

end

Описание:

Оператор цикла for .... end выполняет инструкцию или группу инструкций предопределенное число раз. По умолчанию приращение равно 1. Можно задавать любое приращение, в том числе отрицательное. Для положительных индексов выполнение завершается, когда значение индекса превышает <конечное значение>; для отрицательных приращений выполнение завершается, когда индекс становится меньше чем <конечное значение>.

Пример

Этот цикл выполняется пять раз:
for i = 2:6
x(i) = 2*x(i-1);
end

Допустимы вложенные циклы типа:
for i = 1:m
for j = 1:n
A(i,j) = 1/(i + j - 1);
end
end

Использование массива в качестве переменной цикла . В качестве переменной цикла for могут использоваться массивы.

Пример.
Рассмотрим массив A размера mхn. Оператор цикла

for i = A
инструкции
end

определяет переменную цикла i как вектор A(:, k). Для первого шага цикла k равно 1; для второго k равно 2, и так далее, пока k не достигнет значения n. То есть цикл выполняется столько раз, сколько столбцов в матрице A. Для каждого шага i - это вектор, содержащий один из столбцов массива A.

Встроенные функции.

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

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

Подфункции mean и median вычисляют среднее и медиану входного списка. Основная функция newstats определяет длину списка и вызывает подфункции, передавая им длинну списка n. Функции внутри одного и того же М-файла не могут обращаться к одним и тем же переменным, если они не объявлены глобальными переменными внутри соответствующих функций, или не переданы им в качестве параметров. Следует иметь в виду, что справка help может видит только основную функцию и не видит подфункций.

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

Частные каталоги . Они введены в систему MATLAB, начиная с версии 5.0. Частные каталоги представляют собой подкаталог с именем private родительского каталога. М-файлы частного каталога доступны только М-файлам родительского каталога. Поскольку файлы частного каталога не видимы вне родительского каталога, они могут иметь имена совпадающие, с именами файлов других каталогов системы MATLAB. Это удобно в тех случаях, когда пользователь создает собственные версии некоторой функции, сохраняя оригинал в другом каталоге. Поскольку MATLAB просматривает частный каталог раньше каталогов стандартных функций системы MATLAB он в первую очередь находит функцию из частного каталога.

Узнайте о тонкостях работы в MATLAB.

  • Оператор «точка с запятой»: если команда заканчивается знаком ‘;’, тогда результат данной операции не будет отображаться на экране. Это очевидно, когда есть небольшое определение, например, y = 1. Проблема же возникает, когда необходимо создать матрицу большой размерности. Знак ‘;’ не нужен тогда, когда вывод необходим для пользователя, например, при работе с графикой.
  • «Команда очистки»: есть несколько полезных команд, которые могут быть вызваны из командного окна. Наберите «clear» после знака «>>». Это очистит все текущие переменные, что может помочь при обнаружении странного результата. Также можно написать «clear» и имя переменной, чтобы очистить значение конкретной переменной.
  • «Типы переменных»: единственным типом переменных в MATLAB является массив. Это означает, что переменные устроены в виде списка значений. Наиболее простым списком значений является одно число. В случае с MATLAB не нужно указывать размер массива при создании переменной. Чтобы присвоить переменной значение одного числа, наберите, к примеру, z =1. Если вы захотите добавить значение для z, просто введите z = 3. Вы можете обратиться к любому значению в массиве с помощью записи z[i], где i – номер позиции в массиве. Итак, если вам нужно получить значение 3 из z, то необходимо просто набрать z.
  • «Циклы»: циклы используются тогда, когда действие необходимо выполнить несколько раз. В MATLAB есть 2 типа циклов: цикл «for» и цикл «while». Обе конструкции взаимозаменяемы, однако, бесконечный цикл проще создать конструкцией «while», чем «for». Признаком бесконечного цикла является то, что на вывод поступают только те данные, которые находятся внутри цикла.
  • «Циклы for»: циклы for в MATLAB имеют вид: "for i = 1:n / do действия / end" (обратный слеш означает переход на новую строку). Этот цикл означает «совершить действие» n раз. Итак, если в цикле записано «вывести «Привет» », и количество интерпретаций равно 5, то будет напечатано «Привет» 5 раз.
  • «Циклы while»: в MATLAB имеют вид: "while выражение истинно / do действия / end". Это значит, что действие выполняется, пока выражение истинно. Обычно в теле цикла имеется инструкция, которая меняет значение логического выражения на «false». Чтобы сделать цикл while из цикла for нужно написать "while i<=n / do действия / end".
  • «Вложенные циклы»: цикл вложенный, если он находится внутри другого цикла. Это выглядит примерно так: "for i = 1:5 / for j = 1:5 / do действия / end / end". Пять раз будет выполнено действие по счетчику j, затем значение i увеличится на единицу, снова будет 5 раз выполнено действие по счетчику j и т.д.
  • Для получения более подробной информации по любой части данной статьи или MATLAB в целом, посетите
Язык программирования MatLab имеет два оператора цикла: while и for. С их помощью, например, выполняется программирование рекуррентных алгоритмов , подсчета суммы ряда, перебора элементов массива и многое другое.

В самом простом случае цикл в программе организуется с помощью оператора while, который имеет следующий синтаксис:

Здесь означает условное выражение подобное тому, которое применяется в операторе if, и цикл while работает до тех пор, пока это условие истинно.

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

Приведем пример работы цикла while для подсчета суммы ряда :


i=1; % счетчик суммы

end % конец цикла
disp(S); % отображение суммы 210 на экране

Теперь усложним задачу и будем подсчитывать сумму ряда , пока . Здесь в операторе цикла получается два условия: либо счетчик по i доходит до 20, либо значение суммы S превысит 20. Данную логику можно реализовать с помощью составного условного выражения в операторе цикла while:

S = 0; % начальное значение суммы
i=1; % счетчик суммы
while i S=S+i; % подсчитывается сумма
i=i+1; % увеличивается счетчик на 1
end % конец цикла

Приведенный пример показывает возможность использования составных условий в цикле while. В общем случае в качестве условного выражения можно записывать такие же условия, что и в условном операторе if.

Работу любого оператора цикла, в том числе и while, можно принудительно завершить с помощью оператора break. Например, предыдущую программу можно переписать следующим образом с использованием оператора break:

S = 0; % начальное значение суммы
i=1; % счетчик суммы
while i S=S+i; % подсчитывается сумма
i=i+1; % увеличивается счетчик на 1
if S > 20 % если S > 20,
break; % то цикл завершается
end
end % конец цикла
disp(S); % отображение суммы 21 на экране

В данном примере второе условие завершения цикла, когда S будет больше 20, записано в самом цикле и с помощью оператора break осуществляется выход из цикла на функцию disp(), стоящую сразу после цикла while.

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

a = ;

исключая элемент с индексом 5. Такую программу можно записать следующим образом:

S = 0; % начальное значение суммы
a = ; % массив
i=0; % счетчик индексов массива
while i % длины массива а)
i=i+1; % увеличивается счетчик индексов на 1
if i == 5 % если индекс равен 5
continue; % то его не подсчитываем
end
S=S+a(i); % подсчитывается сумма элементов
end % конец цикла
disp(S); % отображение суммы 40 на экране

Следует отметить, что в данной программе увеличение индекса массива i происходит до проверки условия. Это сделано для того, чтобы значение индекса увеличивалось на 1 на каждой итерации работы цикла. Если увеличение счетчика i записать как в предыдущих примерах, т.е. после подсчета суммы, то из-за оператора continue его значение остановилось бы на 5 и цикл while работал бы «вечно».

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

Часто при организации цикла требуется перебирать значение счетчика в заданном диапазоне значений и с заданным шагом изменения. Например, чтобы перебрать элементы вектора (массива), нужно организовать счетчик от 1 до N с шагом 1, где N – число элементов вектора. Чтобы вычислить сумму ряда, также задается счетчик от a до b с требуемым шагом изменения step. И так далее. В связи с тем, что подобные задачи часто встречаются в практике программирования, для их реализации был предложен свой оператор цикла for, который позволяет проще и нагляднее реализовывать цикл со счетчиком.

Синтаксис оператора цикла for имеет следующий вид:

Рассмотрим работу данного цикла на примере реализации алгоритма поиска максимального значения элемента в векторе:

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. Если этого не сделать, то цикл сразу завершит свою работу и программа будет работать некорректно.

6. Решения уравнения

6.1. Графический метод решения уравнений

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

На данном графике представлены графики функций y=sin(t)/t и (x/5) 2 +y 2 =1. Как не трудно заметить данные функции имеют три точки пересечения.

6.2. Поиск решения уравнения

Графическим методом можно лишь примерно оценить решение. Для более точного нахождения решения в пакете MatLAB необходимо воспользоваться функцией fsolve(уравнение, начальное значение). Позже мы познакомимся как с помощью данной функции решать системы уравнений. В простейшем случае решаемое уравнение можно указать можно указать в одинарных кавычках , например: "x*x-abs(x)". Но данная функция имеет три решения, представленных на рис.

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

fsolve("x*x-abs(x)",-2), ans = -1.0000;

fsolve("x*x-abs(x)",0.6), ans = 1.0000;

fsolve("x*x-abs(x)",0.4), ans = 7.9062e-008.

Функция fsolve продолжает итерационную процедуру до тех пор пока она не найдет решение с заданной точностью. По этому в нашем примере мы и получили 7.9062e-008 а не 0.

В случае более сложных функций их удобнее представить в виде M файла. Тогда в качестве первого параметра функции fsolve подставляется в одинарных кавычках имя этого файла.

7. М-файлы

7.1. M-file

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

Раскройте меню File основного окна MatLab и в пункте New выберите подпункт M-file. Новый файл открывается в окне редактора M-файлов, которое изображено на рисунке.

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

7.2. Файл-программа

Наберите в редакторе команды, приводящие к построению двух графиков на одном графическом окне

Сохраните теперь файл с именем mydemo.m в подкаталоге work основного каталога MatLab, выбрав пункт Save as меню File редактора. Для запуска на выполнение всех команд, содержащихся в файле, следует выбрать пункт Run в меню Debug. На экране появится графическое окно Figure 1 , содержащее графики функций.

Очень удобной возможностью, предоставляемой редактором М-файлов , является выполнение части команд. Закройте графическое окно Figure 1 . Выделите при помощи мыши, удерживая левую кнопку, или клавишами со стрелками при нажатой клавише Shift , первые четыре команды и выполните их из пункта Text. Обратите внимание, что в графическое окно вывелся только один график, соответствующий выполненным: командам. Запомните, что для выполнения части команд их следует выделить и нажать клавишу F9.

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

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

7.3. Файл-функция

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

Пример _Функция_average_-_это_достаточно_простой_M-файл,_который_вычисляет_среднее_значение_элементов_вектора:_function_y_=_average_(x)">Пример

Функция average - это достаточно простой M-файл, который вычисляет среднее значение элементов вектора:
function y = average (x)
% AVERAGE Среднее значение элементов вектора.
% AVERAGE(X), где X - вектор. Вычисляет среднее значение элементов вектора.
% Если входной аргумент не является вектором, генерируется ошибка.
= size(x);
if ( ((m == 1) | (n == 1)) | (m == 1 & n == 1))
error("Входной массив должен быть вектором’)
end
y =sum(x)/length(x); % Собственно вычисление

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

z = 1:99;
average(z)
ans = 50

Структура М-функции. M-функция состоит из:


  • строки определения функции;

  • первой строки комментария ;

  • собственно комментария;

  • тела функции;

  • строчных комментариев;
Строка определения функции. Строка определения функции сообщает системе MATLAB, что файл является М-функцией, а также определяет список входных аргументов.

Пример
Строка определения функции average имеет вид:
function y = average(x)
Здесь:


  1. function - ключевое слово, определяющее М-функцию;

  2. y - выходной аргумент;

  3. average - имя функции;

  4. x - входной аргумент.
Каждая функция в системе MATLAB содержит строку определения функции, подобную приведенной.

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

Пример

function = sphere(theta, phi, rho)

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

Первая строка комментария . Для функции average первая строка комментария выглядит так:

% AVERAGE Среднее значение элементов вектора

Это - первая строка текста, которая появляется , когда пользователь набирает команду help . Кроме того, первая строка комментария выводится на экран по команде поиска lookfor. Поскольку эта строка содержит важную информацию об M-файле, она должна быть тщательно составлена.

Имена М-функций . В системе MATLAB на имена М-функций налагаются те же ограничения, что и на имена переменных - их длина не должна превышать 31 символа. Более точно, имя может быть и длиннее, но система MATLAB принимает во внимание только первые 31 символ. Имена М-функций должны начинаться с буквы; остальные символы могут быть любой комбинацией букв, цифр и подчеркиваний.

Имя файла, содержащего М-функцию, составляется из имени функции и расширения “.m”.

Пример

average.m
Если имя файла и имя функции в строке определения функции разные, то используется имя файла, а внутреннее имя игнорируется. Хотя имя функции, определенное в строке определения функции, может и не совпадать с именем файла, настоятельно рекомендуется использовать одинаковые имена.

Лучшие статьи по теме