Циклы в matlab.
Часто при организации цикла требуется перебирать значение счетчика в заданном диапазоне значений и с заданным шагом изменения. Например, чтобы перебрать элементы вектора (массива), нужно организовать счетчик от 1 до N с шагом 1, где N – число элементов вектора. Чтобы вычислить сумму ряда, также задается счетчик от a до b с требуемым шагом изменения step. И так далее. В связи с тем, что подобные задачи часто встречаются в практике программирования, для их реализации был предложен свой оператор цикла for, который позволяет проще и нагляднее реализовывать цикл со счетчиком.
Синтаксис оператора цикла for имеет следующий вид:
for <счетчик> =
<начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
end
Рассмотрим работу данного цикла на примере реализации алгоритма поиска максимального значения элемента в векторе:
function search_max
a = ;
m = a(1); % текущее
максимальное значение
for i=1:length(a) % цикл от 1 до
конца вектора с
% шагом 1 (по умолчанию)
if m < a(i) %
если a(i) >
m,
m = a(i); %
то m = a(i)
end
end %
конец цикла for
disp(m);
В данном примере цикл for задает счетчик i и меняет его значение от 1 до 10 с шагом 1. Обратите внимание, что если величина шага не указывается явно, то он берется по умолчанию равным 1.
В следующем примере рассмотрим реализацию алгоритма смещения элементов вектора вправо, т.е. предпоследний элемент ставится на место последнего, следующий – на место предпоследнего, и т.д. до первого элемента:
function queue
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. Если этого не сделать, то цикл сразу завершит свою работу и программа будет работать некорректно.
В заключении рассмотрим работу оператора цикла for на примере моделирования случайной последовательности с законом изменения
где - коэффициент от -1 до 1; - нормальная случайная величина с нулевым математическим ожиданием и дисперсией
где - дисперсия моделируемого случайного процесса. При этом первый отсчет моделируется как нормальная случайная величина с нулевым математическим ожиданием и дисперсией . Программа моделирования имеет следующий вид:
function modeling_x
r = 0.95; %
коэффициент модели
N = 100; %
число моделируемых точек
ex = 100; %
дисперсия процесса
et = ex*(1-r^2); % дисперсия
случайной добавки
x = zeros(N,1); %
инициализация вектора х
x(1) = sqrt(ex)*randn; % моделирование 1-го
отсчета
for i=2:N % цикл
от 2 до N
x(i)=r*x(i-1)+sqrt(et)*randn; % моделирование
СП
end %
конец цикла
plot(x); %
отображение СП в виде графика
При выполнении данной программы будет показана реализация смоделированной случайной последовательности .
Рис. 2.1. Результат моделирования случайной последовательности.
Работа программы начинается с определения переменных , (в программе переменная ex) и для реализации указанной модели. Затем вычисляется дисперсия и моделируется первый отсчет случайного процесса с помощью функции randn. Функция randn выполняет генерацию нормальных случайных величин с нулевым средним и единичной дисперсией. Чтобы сгенерировать случайную величину с дисперсией достаточно случайную величину с единичной дисперсией умножить на , т.к. дисперсия – это средний квадрат случайной величины относительно математического ожидания. В результате имеем программную строчку
x(1) = sqrt(ex)*randn;
Затем, реализуется цикл for со счетчиком i от 2 до N с шагом 1. Внутри цикла выполняется моделирование оставшихся N-1 отсчетов случайного процесса в соответствии с приведенной выше формулой. В последней строчке программы записана функция plot(), которая выводит смоделированную последовательность на экран в виде графика. Более подробно работа с выводом графиков на экран будет рассмотрена в следующей главе.
Условный оператор if
В самом простом случае синтаксис данного оператора if имеет вид:
if <выражение>
<операторы>
end
Обращаю Ваше внимание что в отличие от современных языков программирования не используются такое понятие как составной оператор. Блок условного оператора обязательно заканчивается служебным словом end.
Ниже представлен пример реализации функции sign(), которая возвращает +1, если число больше нуля, -1 – если число меньше нуля и 0, если число равно нулю:
x = 5;
if x > 0
disp(1);
end
if x < 0
disp(-1);
end
if x == 0
disp(0);
end
Анализ приведенного примера показывает, что все эти три условия являются взаимоисключающими, т.е. при срабатывании одного из них нет необходимости проверять другие. Реализация именно такой логики позволит увеличить скорость выполнения программы. Этого можно добиться путем использования конструкции
if <выражение>
<операторы1> % выполняются, если истинно условие
else
<операторы2> % выполняются, если условие ложно
end
Тогда приведенный выше пример можно записать следующим образом:
X = 5;
if x > 0
disp(1);
else
if x < 0
disp(-1);
else
disp(0);
end
end
В данной программе сначала выполняется проверка на положительность переменной x, и если это так, то на экран выводится значение 1, а все другие условия игнорируются. Если же первое условие оказалось ложным, то выполнение программы переходит по else (иначе) на второе условие, где выполняется проверка переменной x на отрицательность, и в случае истинности условия, на экран выводится значение -1. Если оба условия оказались ложными, то выводится значение 0.
Приведенный выше пример можно записать в более простой форме, используя еще одну конструкцию оператора if языка MatLab:
if <выражение1>
<операторы1> % выполняются, если истинно выражение1
elseif <выражение2>
<операторы2> % выполняются, если истинно выражение2
...
elseif <выражениеN>
<операторыN> % выполняются, если истинно выражениеN
end
и записывается следующим образом:
x = 5;
if x > 0
disp(1); % выполняется, если x > 0
elseif x < 0
disp(-1); % выполняется, если x < 0
else
disp(0); % выполняется, если x = 0
end
С помощью условного оператора if можно выполнять проверку более сложных (составных) условий. Например, необходимо определить: попадает ли переменная x в диапазон значений от 0 до 2? Это можно реализовать одновременной проверкой сразу двух условий: x >= 0 и x <=2. Если эти оба условия истинны, то x попадает в диапазон от 0 до 2.
Для реализации составных условий в MatLab используются логические операторы:
& - логическое И
| - логическое ИЛИ
~ - логическое НЕ
Рассмотрим пример использования составных условий. Пусть требуется проверить попадание переменной x в диапазон от 0 до 2. Программа запишется следующим образом:
x = 1;
if x >= 0 & x <= 2
else
end
Во втором примере выполним проверку на не принадлежность переменной x диапазону от 0 до 2. Это достигается срабатыванием одного из двух условий: x < 0 или x > 2:
x = 1;
if x < 0 | x > 2
disp("x не принадлежит диапазону от 0 до 2");
else
disp("x принадлежит диапазону от 0 до 2");
end
Используя логические операторы И, ИЛИ, НЕ, можно создавать разнообразные составные условия. Например, можно сделать проверку, что переменная x попадает в диапазон от -5 до 5, но не принадлежит диапазону от 0 до 1. Очевидно, это можно реализовать следующим образом:
x = 1;
if (x >= -5 & x <= 5) & (x < 0 | x > 1)
disp("x принадлежит [-5, 5], но не входит в ");
else
disp("x или не входит в [-5, 5] или в ");
end
Обратите внимание, что при сложном составном условии были использованы круглые скобки. Дело в том, что приоритет операции И выше приоритета операции ИЛИ, и если бы не было круглых скобок, то условие выглядело бы так: (x >= -5 и x <= 5 и x < 0) или x > 1. Очевидно, что такая проверка давала бы другой результат от ожидаемого.
Круглые скобки в программировании используются для изменения приоритетов выполнения операторов. Подобно арифметическим операторам, логические также могут быть изменены по желанию программиста. Благодаря использованию круглых скобок, сначала выполняется проверка внутри них, а, затем, за их пределами. Именно поэтому в приведенном выше примере они необходимы для достижения требуемого результата.
Приоритет логических операций следующий:
НЕ (~) – самый высокий приоритет;
И (&) – средний приоритет;
ИЛИ (|) – самый низкий приоритет.
Оператор цикла while
Язык программирования MatLab имеет два оператора цикла: while и for. С их помощью, например, выполняется программирование рекуррентных алгоритмов, подсчета суммы ряда, перебора элементов массива и многое другое.
В самом простом случае цикл в программе организуется с помощью оператора while, который имеет следующий синтаксис:
while <условие>
<операторы>
end
Здесь <условие> означает условное выражение подобное тому, которое применяется в операторе if, и цикл while работает до тех пор, пока это условие истинно.
Следует обратить внимание на то, что если условие будет ложным до начала выполнения цикла, то операторы, входящие в цикл, не будут выполнены ни разу.
Приведем пример работы цикла while для подсчета суммы ряда :
i=1; % счетчик суммы
while i <= 20 % цикл (работает пока i <= 20)
end % конец цикла
disp(S); % отображение суммы 210 на экране
Теперь усложним задачу и будем подсчитывать сумму ряда , пока . Здесь в операторе цикла получается два условия: либо счетчик по i доходит до 20, либо значение суммы S превысит 20. Данную логику можно реализовать с помощью составного условного выражения в операторе цикла while:
S = 0; % начальное значение суммы
i=1; % счетчик суммы
while i <= 20 & S <= 20 % цикл (работает пока i<=10 и S<=20
S=S+i; % подсчитывается сумма
i=i+1; % увеличивается счетчик на 1
end % конец цикла
Приведенный пример показывает возможность использования составных условий в цикле while. В общем случае в качестве условного выражения можно записывать такие же условия, что и в условном операторе if.
Работу любого оператора цикла, в том числе и while, можно принудительно завершить с помощью оператора break. Например, предыдущую программу можно переписать следующим образом с использованием оператора break:
S = 0; % начальное значение суммы
i=1; % счетчик суммы
while i <= 20 % цикл (работает пока i<=10
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 < length(a) % цикл (работает пока 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 работал бы «вечно».
Оператор цикла for
Часто при организации цикла требуется перебирать значение счетчика в заданном диапазоне значений и с заданным шагом изменения. Например, чтобы перебрать элементы вектора (массива), нужно организовать счетчик от 1 до N с шагом 1, где N – число элементов вектора. Чтобы вычислить сумму ряда, также задается счетчик от a до b с требуемым шагом изменения step. И так далее. В связи с тем, что подобные задачи часто встречаются в практике программирования, для их реализации был предложен свой оператор цикла for, который позволяет проще и нагляднее реализовывать цикл со счетчиком.
Синтаксис оператора цикла for имеет следующий вид:
for <счетчик> = <начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
end
Рассмотрим работу данного цикла на примере реализации алгоритма поиска максимального значения элемента в векторе:
a = ;
m = a(1); % текущее максимальное значение
for i=1:length(a) % цикл от 1 до конца вектора с
% шагом 1 (по умолчанию)
if m < a(i) % если a(i) > 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. Если этого не сделать, то цикл сразу завершит свою работу и программа будет работать некорректно.
Решения уравнения
©2015-2019 сайт
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-12
- Арифметические операторы позволяют конструировать арифметические выражения и выполнять числовые вычисления.
- Операторы отношения позволяют сравнивать числовые операнды.
- Логические операторы позволяют строить логические выражения.
Логические операторы имеют самый низкий приоритет относительно операторов отношения и арифметических операторов.
Арифметические операторы. При работе с массивом чисел установлены следующие уровни приоритета среди арифметических операций:
уровень 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. При вычислении арифметических выражений
операторы отношения имеют более низкий
приоритет, чем арифметические, но более высокий,
чем логические операторы. Операторы отношения могут применятся к
многомерным массивам, для которых одна из
размерностей равна нулю, при условии, что оба
массива - одинакового размера или один из них -
скаляр. Однако выражения типа A == применимы
только к массивам размера 0х0 или 1х1, а в других
случаях вызывают ошибку. Поэтому наиболее универсальный способ
проверить, является ли массив пустым - это
применить функцию isempty (A). Логические операторы
. В состав
логических операторов системы MATLAB входят
следующие операторы: В дополнение к этим операторам, каталог bitfun
содержит ряд функций, которые выполняют
поразрядные логические операции. Логические операторы реализуют поэлементное
сравнение массивов одинаковых размерностей. Для
векторов и прямоугольных массивов оба операнда
должны быть одинакового размера, за исключением
случая, когда один из них скаляр. В последнем
случае MATLAB сравнивает скаляр с каждым элементом
другого операнда. Позиции, где это соотношение
истинно, получают значение 1, где ложно - 0. Каждому логическому оператору соответствует
некоторый набор условий, которые определяю
результат логического выражения: Пример
Пример
Пример
Логические функции
. В дополнение к
логическим операторам в состав системы MATLAB
включено ряд логических функций: Пример
Пример
В случае массивов функция all проверяет столбцы,
то есть является ориентированной по столбцам. Пример
A =
Пример
Полный список логических функций системы MATLAB
содержится в каталоге ops. Функция find
. Функция find определяет
индексы элементов массива, которые
удовлетворяют заданному логическому условию.
Как правило, она используется для создания
шаблонов для сравнения и создания массивов
индексов. В наиболее употребительной форме
функция к = find(х <условие>) возвращает вектор
индексов тех элементов, которые удовлетворяет
заданному условию. A = magic(4)
k = find(A > 8); Функция вида = find(x) позволяет получить
индексы ненулевых элементов прямоугольного
массива. Функция вида = find(x) возвращает
кроме того и их значения в виде вектора s. Теперь вы имеете возможность строить
выражения, которые используют любую комбинацию
арифметических, логических операторов и
операторов отношения. Пример
Управление последовательностью
исполнения операторов.
Существуют четыре
основных оператора управления
последовательностью исполнения инструкций: Синтаксис:
Описание:
Оператор условия if .... end вычисляет некоторое
логическое выражение и выполняет
соответствующую группу инструкций в зависимости
от значения этого выражения. Если логическое
выражение истинно, то MATLAB выполнит все
инструкции между if и end, а затем продолжит
выполнение программы в строке после end. Если
условие ложно, то MATLAB пропускает все утверждения
между if и end и продолжит выполнение в строке после
end. Пример
. if rem(a, 2) == 0 Пример
. Операторы if ... else ... end и if ... elseif ... end создают
дополнительные ветвления внутри тела оператора
if: Пример
. Если в операторе if условное выражение является
пустым массивом, то такое условие ложно. То есть
оператор условия вида if A выполнит инструкции S0 только тогда, когда А -
пустой массив. Синтаксис
: switch <выражение> Оператор switch ... case 1 ... case k ... otherwise ... end выполняет
ветвления, в зависмости от значений некоторой
переменной или выражения. Оператор переключения включает: Оператор switch работает, сравнивая значение
вычисленного выражения со значениями групп case.
Для числовых выражений оператор case выполняется,
если <значение>== <выражение>. Для
строковых выражений, оператор case истинен, если
strcmp(значение, выражение) истинно. Пример
Рассмотрим оператор switch со следующими
условиями: он проверяет переменную input_num; если
input_num равно -1, 0 или 1, то операторы case выводят на
экран соответствующее сообщения. Если значения
выражения input_num не равно ни одному из этих
значений, то выполнение переходит к оператору
otherwise. switch input_num Оператор switch может использовать множественное
условие в единственной группе case посредством
включения выражения case, если выражение для этого
условия записано в виде массива ячеек: switch var Синтаксис
: while выражение Описание
: Оператор цикла с неопределенным числом
операций while ... end многократно выполняет
инструкцию или группу инструкций, пока
управляющее выражение истинно. Если выражение использует массив, то все его
элементы должны быть истинны для продолжения
выполнения. Чтобы привести матрицу к скалярному
значению, следует использовать функции any и all. Пример
Этот цикл с неопределенным числом операций
находит первое целое число n, для которого n! -
записывается числом, содержащим 100 знаков: n = 1; Выход из while-цикла может быть реализован с
помощью оператора break. Если в операторе while, управляющее условие
является пустым массивом, то такое условие ложно,
то есть оператор вида while A, S1, end никогда не
выполнит инструкции S1, если А - пустой массив. Синтаксис:
for <переменная
цикла> = <начальное значение>:
<приращение>:<конечное значение> Описание:
Оператор цикла for .... end выполняет инструкцию или
группу инструкций предопределенное число раз. По
умолчанию приращение равно 1. Можно задавать
любое приращение, в том числе отрицательное. Для
положительных индексов выполнение завершается,
когда значение индекса превышает <конечное
значение>; для отрицательных приращений
выполнение завершается, когда индекс становится
меньше чем <конечное значение>. Пример
Этот цикл выполняется пять раз: Использование массива в качестве
переменной цикла
. В качестве переменной
цикла for могут использоваться массивы. Пример
Рассмотрим массив A размера mхn. Оператор цикла Начиная с версии MATLAB 5, M-файлы могут содержать
коды для более, чем одной функции. Первая функция
в файле -это основная функция, вызываемая по
имени M-файла. Другие функции внутри файла - это
подфункции, которые являются видимыми только для
основной функции и других подфункций этого же
файла. Каждая подфункция имеет свой собственный
заголовок. Подфункции следуют друг за другом
непрерывно. Подфункции могут вызываться в любом
порядке, в то время как основная функция
выполняется первой. Подфункции mean и median вычисляют среднее и медиану
входного списка. Основная функция newstats
определяет длину списка и вызывает подфункции,
передавая им длинну списка n. Функции внутри
одного и того же М-файла не могут обращаться к
одним и тем же переменным, если они не объявлены
глобальными переменными внутри соответствующих
функций, или не переданы им в качестве
параметров. Следует иметь в виду, что справка help
может видит только основную функцию и не видит
подфункций. Когда приходит вызов функции из М-файла, то MATLAB,
в первую очередь, проверяет, не является ли эта
функция подфункцией. Поскольку первой
проверяется наличие подфункций, то можно в
качестве имени подфункции использовать имена
функций системы MATLAB. Частные каталоги
. Они введены в
систему MATLAB, начиная с версии 5.0. Частные каталоги
представляют собой подкаталог с именем private
родительского каталога. М-файлы частного
каталога доступны только М-файлам родительского
каталога. Поскольку файлы частного каталога не
видимы вне родительского каталога, они могут
иметь имена совпадающие, с именами файлов других
каталогов системы MATLAB. Это удобно в тех случаях,
когда пользователь создает собственные версии
некоторой функции, сохраняя оригинал в другом
каталоге. Поскольку MATLAB просматривает частный
каталог раньше каталогов стандартных функций
системы MATLAB он в первую очередь находит функцию
из частного каталога.
B = ;
А< B
ans =1
0
0
0
1
1
1
0
1
&
И
|
ИЛИ
~
НЕТ
Пусть
заданы два числовых вектора:
u
= ;
v =
;
и логическое выражение с оператором AND (&) :
U
& v
ans =1
0
1
0
0
1
Если элементами логического выражения являются
числа, то выражение ложно, если оба операнда
равны нулю.
Используем
векторы u и v, определенные выше, и выполним
логическое выражение с оператором OR (|):
U | v
ans =1
1
1
1
0
1
Используем
вектор u, заданный выше и построим логическое
выражение с оператором NOT (~):
~ u
ans =0
1
0
0
1
0
Рассмотрим
два числовых операнда а и b:
a =
1;
b =
1;
Тогда
операция xor даёт результат:
Xor
(a, b)
ans =
0
Пусть задан вектор u и
требуется проверить его на условие «все ли
элементы меньше 3?». Если это условие выполняется,
то выдается сообщение «Все элементы меньше 3».
u = ;
if all(u < 3)
Disp ("Все элементы меньше 3")
end
В данном случае никакого сообщения не появится,
но если в качестве вектора u взять вектор
u =
то появитсясообщение
ans = " Все элементы меньше 3"
all(A)
Рассмотрим
сдующие два числовых массива А и В
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
A =16
2
3
13
5
11
10
8
9
7
6
12
4
14
15
1
A(k) = 100
A =100
2
3
100
5
100
100
8
100
7
6
100
4
100
100
1
Объединение операторов в арифметические
выражения
Рассмотрим
пример оператора сравнения, в котором
сравниваются результаты двух выражений
(a*b) < (c*d)
Используя скобки,
можно управлять последовательностью выполнения
операций
(A & B) == (C | D)
disp("a четно")
b = а/2;
end
Если логическое условие включает переменную, не
являющуюся скаляром, то утверждение будет
истинным, если все элементы отличны от нуля.
Пусть задана матрица
Х; запишем следующий оператор условия:
if X
инструкции
end
Этот оператор равносилен
следующему:
if all(X(:))
инструкции
end
Рассмотрим
фрагмент программы:
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
S1
else
S0
end
% выражение - это обязательно скаляр или строка
case <значение1>
инструкции
% выполняются, если < выражение> =< значение1>
case <значение2>
инструкции
% выполняются, если <выражение> = <
значение2>
...
otherwise
инструкции
% выполняются, если <выражение> не совпало ни с
одним из
%значений
end
case -1
disp("минус один")
case 0
disp("нуль")
case 1
disp("плюс один")
otherwise
disp("другое значение")
end
case 1
disp("1")
case{2,3,4}
disp("2 или 3 или 4")
case 5
disp("5")
otherwise
disp("что-то другое")
end
инструкции
end
while prod(1:n)
< 1e100
n = n + 1;
end
инструкции
end
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 i = A
инструкции
end
определяет переменную цикла i как вектор A(:, k). Для
первого шага цикла k равно 1; для второго k равно 2,
и так далее, пока k не достигнет значения n. То есть
цикл выполняется столько раз, сколько столбцов в
матрице A. Для каждого шага i - это вектор,
содержащий один из столбцов массива A.Встроенные функции
Циклы в matlab предполагает наличие условия, что команда или группа команд должны
повторяться несколько раз.
Самый простой способ создать цикл - это использовать
выражение for. Ниже показан простой пример, где вычисляется и отображается 10! = 10 * 9 * 8 ... * 2 * 1.
f = 1;
for n =2:10
f = f*n;
end
f =
3628800
Цикл в матлаб начинается с выражения for и заканчивается выражением end. Команда
между этими выражениями выполняется в целом девять раз, по одному разу для каждого
значения п от 2 до 10. Для прерывания промежуточного вывода внутри цикла мы
использовали точку с запятой. Чтобы увидеть конечный результат, необходимо
ввести f после завершения цикла. Если не использовать точку с запятой, программа
MATLAB будет отображать каждое промежуточное значение 2!, 3!, и т.д.
В модуле Editor (Редактор) команды for и end автоматически выделяются
синим цветом. Это придает лучшую читабельность, если вы вставляете между
ними команды (как мы это сделали); модуль Editor (Редактор) делает это
автоматически. Если вы введете for в окне Command Window (Командное окно),
программа MATLAB не выдаст новое приглашение командной строки >>, пока вы не
введете команду end, при которой программа MATLAB выполнит полный цикл и
отобразит новую командную строку.
- Если вы используете цикл в М-файле-сценарии с эффектом отображения echo on, то команды будут отражаться каждый раз во всем цикле. Вы можете предотвратить это, вставив команду echo off прямо перед выражением end и команду echo on сразу после него; тогда каждая команда в цикле будет отражена один раз (кроме end).
Примечание: есть три вида циклов в матлаб, которые приведены ниже
1. Цикл for в Matlab
a=0;
for i=1:10
a=a+1;
end
2. Цикл while в Матлаб
a=0;
while a<10
a=a+1;
end
3. Цикл if в Матлаб
a=10;
if a==10
"первый случай"
else
"второй случай"
end
ans =
первый случай
Поэтому из выше всего сказанного можно сделать вывод, что вам необходимо просмотреть много дополнительной информации и альтернатив!
← Предыдущая Представление результатов 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 в целом, посетите