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. При вычислении арифметических выражений
операторы отношения имеют более низкий
приоритет, чем арифметические, но более высокий,
чем логические операторы. Операторы отношения могут применятся к
многомерным массивам, для которых одна из
размерностей равна нулю, при условии, что оба
массива - одинакового размера или один из них -
скаляр. Однако выражения типа A == применимы
только к массивам размера 0х0 или 1х1, а в других
случаях вызывают ошибку. Поэтому наиболее универсальный способ
проверить, является ли массив пустым - это
применить функцию isempty (A). Логические операторы
. В состав
логических операторов системы MATLAB входят
следующие операторы: В дополнение к этим операторам, каталог bitfun
содержит ряд функций, которые выполняют
поразрядные логические операции. Логические операторы реализуют поэлементное
сравнение массивов одинаковых размерностей. Для
векторов и прямоугольных массивов оба операнда
должны быть одинакового размера, за исключением
случая, когда один из них скаляр. В последнем
случае MATLAB сравнивает скаляр с каждым элементом
другого операнда. Позиции, где это соотношение
истинно, получают значение 1, где ложно - 0. Каждому логическому оператору соответствует
некоторый набор условий, которые определяю
результат логического выражения: Пример
Пример
Пример
Логические функции
. В дополнение к
логическим операторам в состав системы MATLAB
включено ряд логических функций: Пример
Пример
u = ; В данном случае никакого сообщения не появится,
но если в качестве вектора u взять вектор u =
то появитсясообщение ans = " Все элементы меньше 3" В случае массивов функция all проверяет столбцы,
то есть является ориентированной по столбцам. Пример
A =
Пример
Полный список логических функций системы MATLAB
содержится в каталоге ops. Функция find
. Функция find определяет
индексы элементов массива, которые
удовлетворяют заданному логическому условию.
Как правило, она используется для создания
шаблонов для сравнения и создания массивов
индексов. В наиболее употребительной форме
функция к = find(х <условие>) возвращает вектор
индексов тех элементов, которые удовлетворяет
заданному условию. A = magic(4)
k = find(A > 8); Функция вида = find(x) позволяет получить
индексы ненулевых элементов прямоугольного
массива. Функция вида = find(x) возвращает
кроме того и их значения в виде вектора s. Объединение операторов в арифметические
выражения. Теперь вы имеете возможность строить
выражения, которые используют любую комбинацию
арифметических, логических операторов и
операторов отношения. Пример
(a*b) < (c*d)
Используя скобки,
можно управлять последовательностью выполнения
операций (A & B) == (C | D)
Управление последовательностью
исполнения операторов.
Существуют четыре
основных оператора управления
последовательностью исполнения инструкций: Синтаксис:
Описание:
Оператор условия if .... end вычисляет некоторое
логическое выражение и выполняет
соответствующую группу инструкций в зависимости
от значения этого выражения. Если логическое
выражение истинно, то MATLAB выполнит все
инструкции между if и end, а затем продолжит
выполнение программы в строке после end. Если
условие ложно, то MATLAB пропускает все утверждения
между if и end и продолжит выполнение в строке после
end. Пример
. if rem(a, 2) == 0 Пример
. if X Этот оператор
равносилен следующему: if all(X(:)) Операторы if ... else ... end и if ... elseif ... end создают
дополнительные ветвления внутри тела оператора
if: Пример
. if n < 0
% Если n < 0,
вывести сообщение об ошибке. Если в операторе if условное выражение является
пустым массивом, то такое условие ложно. То есть
оператор условия вида if A выполнит инструкции S0 только тогда, когда А -
пустой массив. Синтаксис
: switch <выражение> Оператор switch ... case 1 ... case k ... otherwise ... end выполняет
ветвления, в зависмости от значений некоторой
переменной или выражения. Оператор переключения включает: Оператор switch работает, сравнивая значение
вычисленного выражения со значениями групп case.
Для числовых выражений оператор case выполняется,
если <значение>== <выражение>. Для
строковых выражений, оператор case истинен, если
strcmp(значение, выражение) истинно. Пример.
switch input_num Оператор switch может использовать множественное
условие в единственной группе case посредством
включения выражения case, если выражение для этого
условия записано в виде массива ячеек: switch var Синтаксис
: while выражение Описание
: Оператор цикла с неопределенным числом
операций while ... end многократно выполняет
инструкцию или группу инструкций, пока
управляющее выражение истинно. Если выражение использует массив, то все его
элементы должны быть истинны для продолжения
выполнения. Чтобы привести матрицу к скалярному
значению, следует использовать функции any и all. Пример.
n = 1; Выход из while-цикла может быть реализован с
помощью оператора break. Если в операторе while, управляющее условие
является пустым массивом, то такое условие ложно,
то есть оператор вида while A, S1, end никогда не
выполнит инструкции S1, если А - пустой массив. Синтаксис:
for <переменная
цикла> = <начальное значение>:
<приращение>:<конечное значение> Описание:
Оператор цикла for .... end выполняет инструкцию или
группу инструкций предопределенное число раз. По
умолчанию приращение равно 1. Можно задавать
любое приращение, в том числе отрицательное. Для
положительных индексов выполнение завершается,
когда значение индекса превышает <конечное
значение>; для отрицательных приращений
выполнение завершается, когда индекс становится
меньше чем <конечное значение>. Пример
Этот цикл выполняется пять раз: Использование массива в качестве
переменной цикла
. В качестве переменной
цикла for могут использоваться массивы. Пример.
for i = A определяет переменную цикла 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 он в первую очередь находит функцию
из частного каталога. Лабораторная
работа №6 Цель занятия
:
ознакомиться с условными операторами
и операторами циклов, приобрести навыки
их использования при циклических и
разветвленных вычислениях. Важным шагом
создания полноценных программ на языке
MatLab является изучение операторов
ветвления и циклов. С их помощью можно
реализовывать логику выполнения
математических алгоритмов и создавать
повторяющиеся (итерационные, рекуррентные)
вычисления. Для того чтобы
иметь возможность реализовать логику
в программе используются условные
операторы. Умозрительно эти операторы
можно представить в виде узловых пунктов,
достигая которых программа делает выбор
по какому из возможных направлений
двигаться дальше. Например, требуется
определить, содержит ли некоторая
переменная arg положительное или
отрицательное число и вывести
соответствующее сообщение на экран.
Для этого можно воспользоваться
оператором if (если), который и выполняет
подобные проверки. В самом простом
случае синтаксис данного оператора if
имеет вид: if
<выражение> <операторы> Если значение
параметра «выражение» соответствует
значению «истинно», то выполняется
оператор, иначе он пропускается
программой. Следует отметить, что
«выражение» является условным выражением,
в котором выполняется проверка некоторого
условия. В табл. 2.1 представлены
варианты простых логических
выражений оператора if. Таблица 1. Простые
логические выражения Истинно, если переменная
a меньше переменной b и ложно в противном
случае. Истинно, если переменная
a больше переменной b и ложно в противном
случае. Истинно, если переменная
a равна переменной b и ложно в противном
случае. Истинно, если переменная
a меньше либо равна переменной b и ложно
в противном случае. Истинно, если переменная
a больше либо равна переменной b и ложно
в противном случае. Истинно, если переменная
a не равна переменной b и ложно в
противном случае. Ниже представлен
пример реализации функции sign(), которая
возвращает +1, если число больше нуля,
-1 – если число меньше нуля и 0, если число
равно нулю: function
my_sign
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 Тогда приведенный
выше пример можно записать следующим
образом: function
my_sign
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 и
записывается следующим образом: function
my_sign
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. Программа запишется
следующим образом: function
my_if
x
= 1;
if
x >= 0 & x <= 2
disp("x принадлежит диапазону от 0 до 2");
else
disp("x не принадлежит диапазону от 0
до 2");
end Во втором примере
выполним проверку на не принадлежность
переменной x диапазону от 0 до 2. Это
достигается срабатыванием одного из
двух условий: x < 0 или x > 2: function
my_if
x
= 1;
if
x < 0 | x > 2
disp("x не принадлежит диапазону от 0 до
2");
else
disp("x принадлежит диапазону от 0 до
2");
end Используя логические
операторы И, ИЛИ, НЕ, можно создавать
разнообразные составные условия.
Например, можно сделать проверку, что
переменная x попадает в диапазон от -5
до 5, но не принадлежит диапазону от 0 до
1. Очевидно, это можно реализовать
следующим образом: function
my_if
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.
Очевидно, что такая проверка давала бы
другой результат от ожидаемого. Круглые скобки в
программировании используются для
изменения приоритетов выполнения
операторов. Подобно арифметическим
операторам, логические также могут быть
изменены по желанию программиста.
Благодаря использованию круглых скобок,
сначала выполняется проверка внутри
них, а, затем, за их пределами. Именно
поэтому в приведенном выше примере они
необходимы для достижения требуемого
результата. Приоритет логических
операций следующий: НЕ (~) – самый
высокий приоритет; И (&) – средний
приоритет; ИЛИ (|) – самый
низкий приоритет. Логические операторы имеют самый низкий
приоритет относительно операторов отношения и
арифметических операторов. Арифметические операторы.
При работе
с массивом чисел установлены следующие уровни
приоритета среди арифметических операций: Внутри
каждого уровня операторы имеют равный приоритет
и вычисляются в порядке следования слева
направо. Заданный по умолчанию порядок
следования может быть изменен с помощью круглых
скобок. Пример
Пусть заданы 2 вектора A = ; Результаты выполнения операторов C = A./B. ^ 2
Арифметические операторы допускают
использование индексных выражений: b = sqrt (A(2)) + 2*B (1)
Арифметические операторы системы 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 он в первую очередь находит функцию
из частного каталога. Кафедра: Информационные технологии
ПРОГРАММИРОВАНИЕ В
MATLAB
Операторы
MATLAB
· Операторы цикла
Цикл
for
Синтаксис
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
Синтаксис
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
. Методические указания: х
i
y
i
Коэффициенты 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)/. Рассчитать максимальное по модулю значение погрешности интерполяции на заданном промежутке.
Задание
№
2
Интерполяция сплайнами
Цель работы: Необходимо составить программу вычисления коэффициентов и построения сплайн-функции S(x), «склеенной» из кусков многочленов 3_го порядка Si
(x
),
которые имеют специальную форму записи: функция Si
(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
методом наименьших квадратов. Пусть, например, имеется следующая совокупность данных: х
i
y
i
Поиск необходимых коэффициентов осуществляется следующим образом: где 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* xm предусмотреть: ь Ввод произвольно расположенных узлов 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 с.: ил. 3. Ануфриев И.Е., Смирнов А.Б., Смирнова Е.Н. MathLab 7. - СПб.: БХВ-Петербург, 2005. - 1104 с.: ил. То, что отрицательные заряды помогают и дают хорошие результаты при разных заболеваниях показывают не только современные исследования, но и ряд исторических документов, собранных на протяжении столетий. Все живые организмы, в том числе и человек, рождаются и развиваются в естественных условиях планеты Земля, которая имеет одну важную особенность - наша планета представляет собой постоянно отрицательно заряженное поле, а атмосфера вокруг земли имеет положительный заряд. Это означает, что каждый организм "запрограммирован" рождаться и развиваться в условиях постоянного электрического поля, существующего между отрицательно заряженной землёй и положительно заряженной атмосферой, которое играет очень существенную роль для всех биохимических процессов в организме. Источником инфракрасного излучения является колебание атомов вокруг своего состояния равновесия у живых и не живых элементов. Микросферы в составе Активатора «На здоровье!» имеют уникальное свойство накапливать инфракрасное излучение и тепло тела человека и возвращать его обратно. Все виды волн короткого спектра после видимого света, жестко влияют на все живые организмы и потому опасны, и вредны. Чем короче длинна волны, тем жестче излучение. Эти волны, попадая на живую ткань, выбивают на своём уровне, электроны в молекулах, а позже и разрушают и сам атом. В результате образуются свободные радикалы, которые приводят к онкологическим, и радиационной болезни. Волны по другую сторону видимого спектра не вредны из-за более длинной волны. Весь инфракрасный спектр занимает от 0,7 – 1000 мкм (микрометров). Диапазон человека составляет от 6 – 12 мкм. Для сравнения, вода имеет 3 мкм и потому человек не может долго находится в горячей воде. Даже при 55 градусах, не более 1-го часа. Клетки организма при такой длине волны не чувствуют себя комфортно и работать хорошо не могут, в результате сопротивляются и дают сбои в работе. Воздействуя на клетки теплом, с длинной волны соответствующим теплу клетки, клетка получая родное тепло работает лучше. Инфракрасные лучи её подогревают. Нормальная температура для прохождения окислительно-востановительных реакций в нутрии клетки, составляет 38-39 градусов Цельсия, и если температура понижается, то процесс метаболизма замедляется или останавливается. Артериальная кровь поступает к нагретому участку тела. Венозная - отводится, забирая часть тепла. Тем самым охлаждая участок от перегрева. Эта система похожа на радиатор. Кровь к участку перегрева поступает через капилляры. И чем больше капилляров тем лучше будет происходить отток крови. Допустим, что мы имеем 5-ть капилляров, а для того чтобы спасти от перегрева нам необходимо 50. Перед организмом стоит задача не допустить перегрев. И если мы будем прогревать этот участок регулярно, то он нарастит (увеличит) количество капилляров, в прогреваемом участке. Научно доказано, что организм человека может увеличивать количество капилляров в 10-ть раз! Учёные доказали. Что процесс старения у человека зависит от уменьшения капилляров. В пожилом возрасте количество капилляров уменьшается, особенно в ногах и венах ног. Даже в 120-ем возрасте восстановление капилляров – возможно. Итак: если прогревать определённый участок тела, регулярно, то организм нарастит в прогреваемом месте количество капилляров. Избавляя участок от постоянного перегрева. В добавок, тепло будет способствовать нормальной работе клеток, потому, что мы подогревая клетки улучшаем процесс метаболизма (обмена веществ). Это будет способствовать, восстановлению прогреваемых тканей и к ним будет возвращаться эластичность и упругость. Если есть проблемы такие как мозоль, натоптыши, шипы, шпоры, отложение солей, кожные заболевания, грибки на стопах инфракрасное тепло будет приводить ускоренному процессу регенерации (восстановления). Клетки со всех сторон омываются межклеточной жидкостью. Межклеточная жидкость собираясь отводится от тканей с помощью лимфатической системы. С помощью капилляров к каждой клетке приходит артериальная кровь. Отводится от клетки, венозная кровь. В процессе жизнедеятельности отработанные вещества, частично попадают в венозную кровь и частично в межклеточную жидкость. В случае наступления, какой либо болезни или стресса, механического воздействия, травм, может произойти такая ситуация, как - межклеточное вещество не успевает выносить шлаки (отработанные материалы в процессе жизнедеятельности клетки). Это известный термин – зашлакованость. Зашлакованость напрямую, связана с плохим оттоком лимфы. К шлакам путем диффузии подтягивается лишняя или неактивная вода, что приводит к отеку органа или тканей. Инфракрасное тепло улучшает отток лимфы, что приводит к выводу шлаков и избыточной воды (удаляет отечность). Снижается угроза заболевания раком, улучшается трофика тканей (питание клеток), где каждая клетка может обновляться. Межклеточное вещество, подымаясь по лимфотоку попадает в лимфоузел, который является фильтром. В лимфоузлах присутствуют белые клетки крови – лимфоциты (они выполняют роль стражей), они борются с инфекциями, вирусами и с онкологическими клетками в том числе. Клетки крови образуются в костном мозге. Сосуды имеют внутри гладкую поверхность, чтобы эритроциты могли скользить по внутреннему руслу. Качество внутренней поверхности зависит, от количества капилляров внутри стенки сосуда. В следствии стресса, в пожилом возрасте, в результате табакокурения, внутри крупного сосуда нарушается микроциркуляция, что приводит к ухудшению состояния стенки сосуда. Стенка сосуда перестаёт быть гладкой и эластичной. Холестерин и крупные фракции образуют остеросклеротическую бляшку, затрудняя поток крови по данному руслу. По суженному руслу ухудшается поток крови, что способствует повышению давления. Инфракрасное тепло возобновляет ток по капиллярам внутри стенки сосуда, после чего внутренняя стенка приобретает гладкость и эластичность, а специальные системы в самой крови разъедают тромб (бляшку).
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".
if all(u < 3)
Disp ("Все элементы меньше 3")
end
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
Рассмотрим
пример оператора сравнения, в котором
сравниваются результаты двух выражений
disp("a четно")
b = а/2;
end
Если логическое условие включает переменную, не
являющуюся скаляром, то утверждение будет
истинным, если все элементы отличны от нуля.
Пусть задана матрица
Х; запишем следующий оператор условия:
инструкции
end
инструкции
end
Рассмотрим
фрагмент программы:
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
Рассмотрим оператор switch со следующими условиями:
он проверяет переменную input_num; если input_num равно -1,
0 или 1, то операторы case выводят на экран
соответствующее сообщения. Если значения
выражения input_num не равно ни одному из этих
значений, то выполнение переходит к оператору
otherwise.
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
Этот цикл с неопределенным числом операций
находит первое целое число n, для которого n! -
записывается числом, содержащим 100 знаков:
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
Рассмотрим массив A размера mхn. Оператор цикла
инструкции
endУсловные операторы и циклы в MatLab
Условный оператор if
Операторы системы MATLAB делятся
на три категории:
уровень 1
:
поэлементное транспонирование
(."), поэлементное возведение в степень (.^),
эрмитово сопряженное транспонирование матрицы
("), возведение матрицы в степень (^);
уровень 2:
унарное сложение (+), унарное
вычитание (-);
уровень 3:
умножение массивов (.*), правое
деление (./), левое деление массивов (.\), умножение
матриц (*), решение систем линейных уравнений -
операция (/), операция (\);
уровень 4:
сложение (+), вычитание (-);
уровень 5:
оператор формирования массивов
(:).
B = ;
C = 0.7500 9.0000 0.2000
C = (A./B). ^ 2
C = 2.2500 81.0000 1.0000
совершенно различны.
b = 7
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.Встроенные функции
Заболевания желудочно-кишечного тракта:
Предоперационная подготовка и послеоперационная реабилитация:
Инфракрасное излучение
Что происходит при воздействии инфракрасного тепла? Механизм спасения от перегревания:
Лимфо-дренажный эффект.
Воздействие инфракрасного тепла на вены и сосуды.