Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Арифметические операторы и массивы.
За исключением некоторых матричных операторов, арифметические операторы MATLAB работают с элементами массивов одинаковой размерности. Если в качестве операндов выступают вектора или прямоугольные массивы, то их размерность должна быть одинаковой. Если один из операндов является скаляром, а другой нет, то скаляр применяется к каждому элементу другого операнда. Это правило известно как скалярное расширение.
В качестве примера рассмотрим произведение скаляра и матрицы:
A = magic(3) A = 8 1 6 3 5 7 4 9 2 3 * A ans = 24 3 18 9 15 21 12 27 6 Для возведения матрицы в степень следует использовать оператор ‘ ^ ’, например:
B = A^2 B = 91 67 67 67 91 67 67 67 91
здесь A – магическая матрица из предыдущего примера. Для возведения в степень каждого отдельного элемента матрицы A следует использовать оператор ‘.^ ’, например:
C = A.^2 C = 64 1 36 9 25 49 16 81 4
Для правого матричного деления используется оператор ‘ / ’, по определению B/A = ( A ' \B ')':
B/A ans = 8.0000 1.0000 6.0000 3.0000 5.0000 7.0000 4.0000 9.0000 2.0000 Почленное правое деление С./A образует матрицу с элементами C(i, j)/ A(i, j) :
C./A ans = 8 1 6 3 5 7 4 9 2 Для левого матричного деления используется оператор ‘ \ ’, грубо говоря, A\B означает то же, что и inv(A)*B, за исключением способа реализации:
A\B ans = 8.0000 1.0000 6.0000 3.0000 5.0000 7.0000 4.0000 9.0000 2.0000 Eсли A – квадратная матрица с размерностью nxn, а B – вектор-столбец с n компонентами или матрица с несколькими такими столбцами, то X = A\B есть решение системы уравнений AX = B вычисленное методом исключения Гаусса. Если матрица A плохо масштабирована или близка к сингулярной (определитель матрицы равен нулю), то система выдает соответствующее предупреждение. Если A не является квадратной матрицей, то X = A\B является квази-решением недоопределенной (число уравнений меньше числа неизвестных) или переопределенной (число уравнений больше числа неизвестных) системы уравнений AX = B.
Оператор почленного левого деления A.\B создает матрицу с элементами B(i, j)/A(i, j ). Матрицы A и B должны иметь одинаковую размерность. Пример:
A.\C ans = 8 1 6 3 5 7 4 9 2 Оператор матричного транспонирования (‘) меняет местами строки и столбцы исходной матрицы. Если элементы матрицы являются комплексными числами, то при транспонировании они заменяются своими комплексно-сопряженными значениями:
D=[1 1-2i; 1+3i 2] D = I 1.0000 + 3.0000i 2.0000
Почленное транспонирование комплексной матрицы операцию комплексного сопряжения не проводит: D.' ans = 1.0000 1.0000 + 3.0000i I 2.0000 При сложении двух матриц A+B (или вычитании A-B ) требуется, чтобы они имели одинаковую размерность. Если одна из матриц является константой, то при сложении эта константа прибавляется к каждому элементу другой матрицы:
A+B ans = 99 68 73 70 96 74 71 76 93 A+4 ans = 12 5 10 7 9 11 8 13 6 Следует отметить, что каждый арифметический оператор имеет аналогичную по своему названию функцию. Например, вместо оператора матричного сложения A+B можно использовать функцию plus(A, B). Полный список операторов можно получить по команде help ops. Соответствие функций операторам позволяет одновременно использовать элементы как операторного, так и функционального программирования.
Операторы отношения. Операторы отношения служат для сравнения двух величин, векторов или матриц. Следующая ниже таблица дает полную сводку по операторам отношения.
Данные операторы выполняют поэлементное сравнение векторов или матриц одинаковой размерности и возвращают значение 1 (True), если элементы идентичны, и значение 0 (False) в противном случае. Результат операции отношения выдается в виде массива той же размерности, что и размерность операндов отношения:
A=[1 2; 2 3]; B=[1 2; 2 4]; A==B ans = 1 1 1 0
В данном примере нулевой элемент результирующей матрицы означает несовпадение соответствующих элементов матриц A и B.
Логические операторы и функции. Логические операторы и соответствующие им функции реализуют логические операции над массивами одинаковой размерности.
Аргументами логических операций могут быть числа и строки. Число ноль воспринимается как логический ноль, а любое отличное от нуля значение элемента массива воспринимается как логическая единица.
Рассмотрим примеры:
A=[1 2; 2 0]; B=[0 1; 1 0]; A& B ans = 0 1 1 0
В результирующей матрице A& B единица (истина) означает, что в матрицах A и B оба соответствующих элемента отличны от нуля. В противном случае ставится ноль.
A|B ans =
1 1 1 0 В результирующей матрице A|B единица (истина) означает, что в матрицах A и B хотя бы один из соответствующих элементов отличен от нуля. В противном случае ставится ноль. ~B ans = 1 0 0 1 В результирующей матрице ~B единица (истина) означает, что в матрице B соответствующий элемент равен нулю. В противном случае ставится единица.
xor(A, B) ans = 1 0 0 0
Элемент результирующей матрицы равен единице (истине) если соответствующие элементы исходных матриц имеют значения единица и ноль (истина и ложь).
Приоритет выполнения операторов. В математических выражениях операторы имеют определенный приоритет исполнения. Перечислим операторы в порядке убывания их приоритета:
1) выполняются операторы, заключенные в скобки () 2) транспонирование (.' ), возведение в степень (.^ ), комплексно-сопряженное транспонирование ( ' ), матричное возведение в степень ( ^ ) 3) унарное сложение ( + ), унарное вычитание ( – ), логическое отрицание ( ~ ) 4) умножение (.* ), правое деление (./ ), левое деление (.\ ), матричное умножение ( * ), матричное правое деление ( / ), матричное левое деление ( \ ) 5) сложение ( + ), вычитание ( – ) 6) оператор двоеточие (: ) 7) меньше чем ( < ), меньше или равно ( < = ), больше чем ( > ), больше или равно ( > = ), равно ( == ), не равно ( ~= ) 8) логическое И ( & ) 9) логическое ИЛИ ( | )
Можно всегда изменить принятый по умолчанию порядок выполнения операторов с помощью круглых скобок:
A = [3 9 5]; B = [2 1 5]; C = A./B.^2 C = 0.7500 9.0000 0.2000 C = (A./B).^2 C = 2.2500 81.0000 1.0000 Структура файлов сценариев. Файл-сценарий (script) – это m-файл в котором записана серия команд без входных и выходных параметров. Файлы-сценарии работают с данными из рабочей области и в процессе выполнения не компилируются. Хотя сценарии не возвращают значений, все переменные, которые они создают, остаются в рабочем пространстве для дальнейшего использования. Каждый сценарий имеет следующую структуру:
%Основной комментарий %Дополнительный комментарий Тело файла с любыми выражениями
Основным комментарием является первая строка текстовых комментариев, а дополнительным – последующие строки. Основной комментарий выводится при выполнении команд l ookfor и help имя_каталога. Полный комментарий выводится при выполнении команды help имя_файла. Рассмотрим пример построения файла-сценария. Откроем окно Редактора/Отладчика щелчком по кнопке “New M-File” на панели инструментов и введем текст сценария:
%Polar plot %Строит график функции y= 2*sin(5*x)^2 x = -pi: 0.01: pi; polar(x, 2*sin(5*x).^2)
Сохраним файл под именем pl. После сохранения в текущем каталоге будет создан файл pl. m. Командой type pl можно вывести листинг файла, а командой pl запустить его на выполнение.
Структура m-файлов функций. M-файл функция является полноценным модулем, поскольку содержит входные и выходные параметры и использует аппарат локальных переменных. Структура модуля имеет следующий вид:
function [var1, var2, …] = f_name(Список параметров) %Основной комментарий %Дополнительный комментарий Тело файла var1=… var2=… …. Файл-функция всегда начинается с объявления function, за которым следует один или несколько идентификаторов выходных параметров, имя функции и список ее входных параметров. Входные параметры указываются в квадратных скобках. Если входной параметр один, то скобки можно опустить. Все переменные, имеющиеся в модуле функции, являются локальными, то есть, доступны только в пределах данной функции. Связь с другими модулями проходит через входные и выходные параметры. При вызове функции происходит замена формальных параметров фактическими параметрами. Рассмотрим в качестве примера функцию, которая вычисляет значение n! (факториал числа n):
function f = fact(n) % Function definition line % FACT Factorial. % Основной комментарий % FACT(N) факториал числа N, % Дополнительный комментарий % обычное обозначение N! % Ввод команды FACT(N) эквивалентен PROD(1: N). f = prod(1: n); % Тело функции
Сохранив функцию в m-файле, ее всегда можно вызвать из командной строки или из другой функции. Например:
Fact(3) ans =
Использование подфункций. Подфункции объявляются и записываются в теле основных функций и имеют аналогичную структуру. Подфункции доступны только в пределах m-файла, определяющего основную (primary) функцию. Рассмотрим код функции newstats с двумя подфункциями mean и median для вычисления среднего значения и медианы статистической выборки:
f unction [ avg, med ] = newstats ( u ) % Primary function % NEWSTATS Find mean and median with internal functions. n = length ( u ); avg = mean ( u, n ); med = median ( u, n );
f unction a = mean ( v, n ) % Subfunction % Calculate average. a = sum ( v )/ n; function m = median ( v, n ) % Subfunction % Calculate median. w = sort ( v ); if rem ( n, 2 ) == 1 m = w (( n + 1 )/ 2 ); Else m = ( w ( n / 2 )+ w ( n / 2 + 1 ))/ 2; End
Возьмем в качестве выборки вектор v с пятью элементами и найдем для него среднее значение и медиану:
v =[ 1 2 3 8 9 ]; [ a, m ] = newstats ( v ) a = 4. 6000 m =
Операторная функция. Операторная функция определяет функцию с помощью одного оператора. Результатом выполнения операторной функции является вычисленное значение выражения. Определения операторных функций должны предшествовать их вызову. К операторной функции можно обращаться только в том программном модуле, в котором она определена. Определение операторной функции имеет вид:
· g = inline(expr) · g = inline(expr, arg1, arg2, ...) · g = inline(expr, n)
здесь expr – строковая константа, определяющая математическое выражение, arg1, arg2,... – список входных параметров, n – скаляр означает, что список формальных входных параметров состоит из x, P1, P2, …Pn. Рассмотрим пример:
g = inline (' sin ( alpha * x )', ' x ', 'a lpha ') g = Inline function: g(x, alpha) = sin(alpha*x)
g ( 3. 149, 0. 5 ) ans = 1. 0000
|
Последнее изменение этой страницы: 2017-03-17; Просмотров: 355; Нарушение авторского права страницы