Двумерные массивы (матрицы)

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

Пример ввода матрицы размером 2´3

A = [3, 1, -1; 2, 4, 3];

Доступ к элементам матриц осуществляется при помощи двух индексов - номеров строки и столбца, заключенных в круглые скобки. Например А(2,1) означает обращение к элементу матрицы расположенному во второй строке и первом столбце.

Элементы матриц могут входить в состав выражений, например

A = C(1, 1) * C(2, 2) + C(2, 3);

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

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

Умножение каждого элемента одной матрицы на соответствующий элемент другой производится при помощи оператора .*, например

C = A.*B;

Управляющие конструкции языка программирования

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

Управляющие конструкции языка программирования MATLAB, которые могут быть использованы при написании, как программ, так и функций.

 

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

Схожие и повторяющиеся действия выполняются при помощи операторов цикла for и while. Цикл for предназначен для выполнения заданного числа повторяющихся действий (арифметический цикл), a while — для действий, число которых заранее не известно, но известно условие продолжения цикла (циклы с предусловием или с постусловием).

 

Цикл for

Использование for осуществляется следующим обратом:

 

for count = start : step : final

команды MATLAB

end

 

Здесь count – переменная цикла, start – ее начальное значение, final – конечное значение, а step – шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается, как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака.

Если шаг цикла равен 1,то его можно не указывать.

 

Пример. Пусть требуется вычислить точки семейства кривых для xÎ[0.2π], которое задано функцией , зависящей от параметры а , для значений параметра а от -0.1 до 0.1 с шагом 0,02.

 

Листинг 3.1. Файл-программа для расчета значений функции

 

х = 0 : pi/30 : 2*pi; % вычисление вектора значений аргумента

% перебор значений параметра в цикле

for а = -0.1 : 0.02 : 0.1

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

у = ехр(-а*х).*sin(x);

end

 

Пример. Пусть требуется вычислить значение суммы

Алгоритм вычисления суммы использует накопление результата, т. е. сначала сумма равна нулю, затем в переменную k заносился единица, вычисляется 1/k! (т. е. 1/1!), добавляется к S и результат снова заносится в S. Далее k увеличивается на единицу, и процесс продолжается, пока последним слагаемым не станет 1/N!.

 

Листинг 3.2. Файл-программа для вычисления суммы

 

% обнуление S для накопления суммы

S = 0;

N=10;

% накопление суммы в цикле с шагом 1

for k = 1 : N

S = S + 1/factorial(k);

end

 

Цикл while

 

Цикл while служит для организации повторений однотипных действий и случае, когда число и повторений заранее неизвестно и определяется выполнением некоторого условия.

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

команды MATLAB

end

 

Пример. Требуется найти сумму ряда для заданного х (синус разложением в ряд):

Суммировать до бесконечности не возможно, но можно накапливать сумму с заданной точностью. Известно, что дня знакопеременного ряда теоретически достаточно удерживать слагаемые, превышающие по модулю заданную точность, например 10-10. Однако суммирование таких рядов с ограниченной точностью вычислений может привести к потере значащих цифр и, в конечном итоге, к неверному результату. Значение k, обеспечивающее малость текущего слагаемого, заранее неизвестно, поэтому циклом for воспользоваться не удастся. Следовательно, необходимо использовать цикл while, который работает, пока выполняется условие цикла.

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

Текст программы, вычисляющей сумму ряда на основе рекуррентного соотношения приведен в листинге 3.3.

 

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

 

% вычисление первого слагаемого суммы для k=0

k = 0;

x = 0.5;

u = x;

s = u;

while abs(u) > 1.0e-l0

k = k + 1;

u = u*х^2/(2*k) /(2*к + 1);

s = s + u;

end

 

У цикла while, в отличие or for, нет переменной цикла, поэтому необходимо до начала цикла переменной k присвоить единицу, а внутри цикла увеличивать ее на единицу.

 

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

 

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

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

 

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

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

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

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

Основные логические операции и операторы приведены в таблице 3.4.

 

Таблица 3.4 Логические выражения и примеры их применения

Тип выражения Выражение Логический оператор Логическая операция
Логическое "И" x<3 и k=4 and (x < 3, k==4) (х<3) & (k == 4)
Логическое "ИЛИ" х = 1 или 2 or (x == 1, x == 2) (x ==1) | (x == 2)
Отрицание "НЕ" a ¹ 1.9 not (a == 1.9) ~(a == 1.9)

 

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

 

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

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

 

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

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

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

 

if условие

команды MATLAB

end

 

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

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

В данном примере перед вычислением функции следует произнести проверку значения аргумента х и вывести в командное окно предупреждение, если модуль х меньше единицы (листинг 3.4).

 

Листинг 3.4 Файл-функция, проверяющая значение аргумента

 

% проверка аргумента

if abs(x) < 1

warning (‘результат комплексный’)

end

% вычисление функции

F = sqrt(x^2 – 1);

 

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

 

Пример. Вычисление кусочно-заданной функции

В данном примере число ветвей равно трем. Во второй ветви достаточно только проверить, что х<π, условие x≥-π уже выполнено (иначе бы отработала первая ветвь, и оператор if закончил работу). В последней ветви нет смысла проверять никакие условия, она работает, если все предыдущие условия неверны, что как раз соответствует х≥-π.

 

Листинг 3.5 Файл-функция вычисления кусочно-заданной функции

 

if x < - pi

y = sin(x) – 1;

elseif x< pi

y = x/pi;

else

y = -cos(x);

end

 

Оператор switch

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

Оператор switch удобно применять тогда, когда есть соответствие между дискретными значениями некоторой переменной и последующими действиями. Для определения ветви программы в зависимости от выполнения более сложных условий, например а>0, приходится использовать оператор if.