Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Арифметические операторы и массивы.



За исключением некоторых матричных операторов, арифметические операторы 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. Соответствие функций операторам позволяет одновременно использовать элементы как операторного, так и функционального программирования.

 

Операторы отношения.

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

 

Функция Оператор Описание Пример
lt < Меньше чем X< Y
le < = Меньше или равно X< =Y
gt > Больше чем X> Y
ge > = Больше или равно X> =Y
eq == Равно X==Y
ne ~= Не равно X~=Y

 

Данные операторы выполняют поэлементное сравнение векторов или матриц одинаковой размерности и возвращают значение 1 (True), если элементы идентичны, и значение 0 (False) в противном случае. Результат операции отношения выдается в виде массива той же размерности, что и размерность операндов отношения:

 

A=[1 2; 2 3]; B=[1 2; 2 4];

A==B

ans =

1 1

1 0

 

В данном примере нулевой элемент результирующей матрицы означает несовпадение соответствующих элементов матриц A и B.

 

Логические операторы и функции.

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

 

Оператор Функция Название
& and Логическое И
| or Логическое ИЛИ
~ not Логическое НЕ
  xor Исключающее ИЛИ
  any Истина, если все элементы массива нулевые
  all Истина, если все элементы массива ненулевые

 

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

 

Рассмотрим примеры:

 

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; Просмотров: 335; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.081 с.)
Главная | Случайная страница | Обратная связь