Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1804

.pdf
Скачиваний:
9
Добавлен:
30.04.2022
Размер:
2.24 Mб
Скачать

ceil

округление аргумента в сторону

round

округление аргумента до ближайшего целого значения

mod

остаток от деления

rem

―знаковый‖ остаток от деления

sign

знак аргумента

1.6. Ввод и преобразование матричных переменных

Поскольку MATLAB – матрично-ориентированная система, то необходимо отметить, как она выполняет основные операции над векторами и матрицами. Прежде всего необходимо отметить, что вектор рассматривается как вырожденная в одну строку или один столбец матрица. Обычная переменная – это матрица размером 1 1.

Например, если задано Х = 1, то это значит, что Х есть вектор с единственным элементом, имеющим значение 1. Если надо задать вектор из трех элементов, то их значения надо перечислить в квадратных скобках, разделяя пробелами:

N = [1 2 3].

Задание матрицы требует указания различных строк. Для различения строк используется знак ― ; ‖ (точка с запятой):

M = [1 2 3; 4 5 6; 7 8 9].

 

Матрицу можно ввести и следующим образом:

F = [1

2

3

4

5

6

7

8

9].

Возможен ввод элементов матриц и векторов в виде арифметических выражений, содержащих любые доступные системе функции.

Для указания отдельного элемента вектора или матрицы используются выражения вида V(i) или M(i, j).

Матрицы

можно

расширять, используя матрицы малых размеров как

элементы матрицы больших размеров:

R = [10 11 12];

 

 

Y = [F; R]

 

 

Y =

 

 

1

2

3

4

5

6

7

8

9

10

11

12

Для добавления новой страницы того же размера можно воспользоваться следующей командой:

» Y(:,:,2)=[14 15 16;17 18 19;20 21 22;23 24 25]

Y(:,:,1) =

 

1

2

3

4

5

6

7

8

9

10

11

12

Y(:,:,2) =

 

14

15

16

17

18

19

20

21

22

23

24

25

Для удаления строк, столбцов или вообще размерности массива необходимо присвоить выбранному элементу значение пустого вектора [ ]. Например, для удаления первой страницы трехмерного массива Y можно воспользоваться командой

»Y(:,:,1)=[]

Y=

14 15 16

17 18 19

20 21 22

23 24 25

Возможно задание векторов и матриц с комплексными переменными.

Помимо поэлементного ввода векторов и матриц возможна генерация векторов и матриц специального типа. Например, вектор с целочисленными элементами можно задать в виде:

X = 1: 5;.

Знак двоеточие указывает, что элементы вектора будут принимать значения 1, 2, 3, 4, 5.

Можно задать вектор с другим, в том числе и нецелочисленным шагом приращения:

X = 0 : 0.25 : 2;.

Начальное, шаг и конечное значение элементов можно задавать с помощью арифметических выражений.

При работе с матрицами и векторами можно использовать двоеточие для выделения определенной последовательности элементов и создания новых векторов или матриц:

А = [1 2 3; 4 5 6];

B = A(:)

B =

1

2

 

3

 

 

 

 

 

 

4

 

 

 

 

 

 

5

 

 

 

 

 

 

6

 

 

 

 

 

A(:) = 10 : 15

 

 

 

 

A =

 

 

 

 

 

 

10

12

14

 

 

 

 

11

13

15

 

 

 

 

 

В этих примерах создан новый вектор В и изменена матрица А.

 

Следующие примеры иллюстрируют операции вырезки из матрицы:

А =[1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15; 16 17 18 19 20]

A =

 

 

 

 

 

 

 

 

1

2

3

4

5

 

 

6

7

8

9

10

 

 

11

12

13

14

15

 

 

16

17

18

19

20

A (1 : 3, 3)

 

 

 

 

ans =

 

 

 

 

 

 

3

 

 

 

 

 

 

8

 

 

 

 

 

 

13

 

 

 

 

 

A(2 : 4, 2 : 5)

 

 

 

 

ans =

 

 

 

 

 

 

 

7

8

9

10

 

 

 

12

13

14

15

 

 

 

17

18

19

20

 

Транспонирование вектора означает, что строка элементов становится столбцом:

V = [1 2 3] V =

1 2 3

V‘ ans =

1

2

3

Для создания многомерных массивов удобно использовать следующие функции:

ones (n1, n2, … , nn) создание массива с единичными элементами; zeros (n1, n2, … , nn) создание массива с нулевыми элементами;

Хорошим примером на применение матричных операций является решение системы линейных уравнений. Пусть требуется решить систему

уравнений:

 

 

 

 

X

+

2Y

=

11

2X

+

3Y

=

18

Введем матрицу коэффициентов А и вектор правой части системы

уравнений В:

 

 

 

А = [1 2; 2

3]

 

 

 

ans =

 

 

 

 

12

23

B = [11; 18] ans =

11

18

A\B ans =

3

4.

1.7. Управление последовательностью выполнения операторов

Существует 4 основных оператора управления последовательностью исполнения инструкций:

оператор условия if в сочетании с операторами else и elseif выполняет группу инструкций в соответствии с некоторыми логическими условиями;

оператор переключения switch в сочетании с операторами case и otherwise выполняет различные группы инструкций в зависимости от значения некоторого логического условия;

оператор условия while выполняет группу инструкций неопределенное число раз в соответствии с некоторым логическим условием завершения;

оператор цикла for выполняет группу инструкции фиксированное число раз.

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

if …else … elseif … end

 

 

Оператор условия

 

 

 

 

 

 

 

 

Синтаксис:

 

 

 

 

 

if

логическое

 

if

логическое

if

логическое

выражение

 

выражение

выражение

 

 

инструкции

 

инструкции

инструкции

 

 

end

 

 

else

 

elseif

логическое

 

 

 

 

 

выражение

 

 

 

инструкции

инструкции

 

 

 

 

 

end

 

else

 

 

 

 

 

 

 

инструкции

 

 

 

 

 

 

 

end

 

 

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

Если логическое условие включает переменную, не являющуюся скаляром, то утверждение будет истинным, если все элементы отличны от нуля.

Операторы if ... else ... end и if ... elseif ... end создают дополнительные ветвления внутри тела оператора if:

оператор else не содержит логического условия. Инструкции, связанные с ним, выполняются, если предшествующий оператор if (и, возможно, elseif) ложен;

оператор elseif содержит логическое условие, которое вычисляется, если предшествующий оператор if (и, возможно, elseif) ложен. Инструкции, связанные с оператором elseif, выполняются, если соответствующее логическое условие истинно.

Оператор elseif может многократно использоваться внутри оператора условия if.

switch … case … otherwise .. end

Оператор переключения

Синтаксис:

switch <выражение> case <значение1>

инструкции % выполняются когда <выражение> = <значение1> case <значение2>

инструкции % выполняются когда <выражение> = <значение2>

otherwise

инструкции % выполняются если <выражение> не совпало ни с одним из значений end

Оператор переключения switch выполняет ветвления, в зависимости от значений некоторой переменной или выражения.

Оператор переключения включает:

заголовок switch, за которым следует вычисляемое выражение (скаляр или строка);

произвольное количество групп case. Заголовки групп состоят из слова case, за которым следует возможное значение выражения, расположенное на одной строке. Последующие строки содержат инструкции, которые выполняются для данного значения выражения. Выполнение продолжается до тех пор, пока не встретится следующий оператор case или оператор otherwise. На этом выполнение блока switch завершается;

группа otherwise. Заголовок включает только слово otherwise, начиная со следующей строки размещаются инструкции, которые выполняются, если значение выражения оказалось не обработанным ни одной из групп case. Выполнение завершается оператором end;

оператор end - является последним в блоке переключателя.

Оператор переключения switch работает, сравнивая значение вычисленного выражения со значениями групп case. Для числовых выражений оператор case выполняется, если <значение>= =<выражение>. Для строковых выражений оператор case истинен, если strcmp(значение, выражение) истинно.

Оператор switch может использовать множественное условие в единственной группе case посредством включения выражения case, если выражение для этого условия записано в виде массива ячеек:

switch var case 1

disp(‗1‘) case (2, 3, 4)

disp(‗2 или 3 или 4‘)

case 5

disp(‗5‘)

end;

while … end

Оператор с неопределенным числом операций

Синтаксис:

while <выражение> инструкции

end

Оператор цикла с неопределенным числом операций while ... end многократно выполняет инструкцию или группу инструкций, пока управляющее выражение истинно.

Если выражение использует массив, то все его элементы должны быть истинны, чтобы продолжить выполнение. Чтобы привести матрицу к скалярному значению, следует использовать функции any и all.

Выход из while-цикла может быть реализован с помощью оператора

break.

Если в операторе while управляющее условие является пустым массивом, то такое условие ложно, то есть оператор вида while A, SI, end никогда не выполнит инструкции SI. если А - пустой массив.

Пример:

Этот цикл с неопределенным числом операций находит первое целое число п, для которого n! записывается числом, содержащим 100 знаков:

n = 1;

while prod(1:n) < 1e100 n = n + 1;

end

for … end Оператор цикла с определенным числом операций

Синтаксис:

for <переменная цикла> = <начальное значение>:<приращение>:<конечное значение>

инструкции end

Оператор цикла for ... end выполняет инструкцию или группу инструкций предопределенное число раз. По умолчанию приращение равно 1. Можно задавать любое приращение, в том числе отрицательное. Для положительных индексов выполнение завершается, когда значение индекса превышает <конечное значение>; для отрицательных приращений выполнение завершается, когда индекс становится меньше чем <конечное значение>.

Допустимы вложенные циклы типа: for i = 1 : m

for j = 1 : n

A(i, j)=1/( i + j - 1);

end

end

Использование массива в качестве переменной цикла. В качестве переменной цикла for могут использоваться массивы.

Пример: рассмотрим массив А размера m n. Оператор цикла for i = A

инструкции

end

определяет переменную цикла i как вектор А(:, k). Для первого шага цикла k равно 1; для второго - k равно 2 и так далее, пока k не достигнет значения n. То есть цикл выполняется столько раз, сколько столбцов в матрице А. Для каждого шага i - это вектор, содержащий один из столбцов массива А.

1.8. Полиномы и операции над ними

Полиномы (многочлены) задаются в среде MATLAB в виде вектора, хранящего коэффициенты от an до a0 : Р = [an … a2 a1 a0].

polyval

Вычисление полинома

Синтаксис:

y = polyval(p, s) Y = polyval(p, S)

y = polyval(p, s) вычисляет значение полинома, вектор значений коэффициентов которого p = [an … a2 a1 a0], в точке s.

Y = polyval(p, S) вычисляет значение полинома для каждого элемента одномерного или двумерного массива S.

conv

Умножение полиномов

 

 

Синтаксис: c = conv(a, b)

Если заданы полиномы a и b степеней m и n соответственно, то их произведение – это полином с степени m+n.

Пример: Найдем произведение полиномов x3 + 2x2 + 3x + 4 и 10x2 + 20x + 30. Для этого сформируем векторы a = [1 2 3 4] и b = [10 20 30] и вычислим

c = conv(a, b)

с = 10 40 100 160 170 120.

deconv

Деление полиномов

 

 

Синтаксис:

[q, r] = deconv(c, a)

Функция [q, r] = deconv(c, a) реализует деление полинома с на полином a; частное от деления возвращается в виде вектора q, а остаток – в виде вектора r, так что выполняется соотношение c = conv(q, a) + r.

polyder Вычисление производных

Синтаксис:

dp = polyder(p) dp = polyder(a, b)

[q, p] = polyder(b, a)

dp = polyder(p) возвращает производную полинома dp(x) / dx.

dp = polyder(a, b) возвращает производную от произведения полиномов a(x) b(x).

[q, p] = polyder(b, a) возвращает производную от отношения полиномов b(x) / a(x) в виде отношения полиномов q(x) / p(x).

Пример: вычислим производную полинома p(x) = 3x2 + 6x + 1. P = [3 6 1]; dp = polyder(p)

dp = 6 6

roots Вычисление корней полинома

Синтаксис: r = roots(p)

Функция r = roots(p) вычисляет вектор-столбец корней полинома p. Пример: Вычислим корни полинома p(x) = x3 + 6x2 +12x + 18.

p = [1 6 12 18]; r = roots(p) r =

-4.1544

 

-0.9228 + 1.8658i

 

-0.9228 - 1.8658i.

poly

Вычисление характеристического полинома

Синтаксис: p = poly(A) p = poly( r)

p = poly(A) вычисляет вектор-строку коэффициентов характеристического полинома матрицы А.

p = poly( r) вычисляет вектор строку коэффициентов полинома по значениям вектора-столбеца его корней.

Рассмотрим пример действий функции над матрицей А.

A = [-5/3 -1

-2/3;

-5/6 1/4

11/12;

1/6 -17/4 -19/12];

p = poly(A)

 

 

 

 

p =

1.0000

3.0000

5.0000

7.0000

 

r = roots(p)

 

 

 

 

r =

 

 

 

 

 

 

-2.1795

 

 

 

 

 

-0.4102

+ 1.7445i

 

 

 

-0.4102

- 1.7445i

 

 

 

p = poly(r)

 

 

 

 

p =

1.0000

3.0000

5.0000

7.0000.

 

polyfit

Аппроксимация данных полиномом

 

 

Синтаксис:

p = polyfit(x, y, n)

Функция p = polyfit(x, y, n) находит коэффициенты полинома p(x) степени n, который аппроксимирует функцию y(x) в смысле метода наименьших квадратов. Выходом является строка p длины n +1, содержащая коэффициенты аппроксимирующего полинома.

Пример:

»x = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1];

»y = [6 6.3 6.7 6.5 6.2 6 6.2 6.5 6.7 6.3 6];

»p = polyfit(x,y,5)

p =

0.0000 -33.2168 66.4336 -42.3834 9.1667 5.9406

Ниже приводится краткое описание ряда функций системы MATLAB (все возможные формы синтаксиса можно посмотреть в справочной системе), которые могут оказаться полезными при обработке массивов экспериментальных данных.

sum(X)

Суммирование

элементов

массива.

В

случает

 

двумерного массива

это вектор-строка, содержащая суммы

 

элементов каждого столбца

 

 

 

prod(X)

Аналогична предыдущей функции, но

вместо суммы

 

возвращает произведение

 

 

 

sort(x)

Упорядочение

элементов массива по возрастанию. В

 

случае двумерного массива происходит упорядочивание

 

элементов каждого столбца. Функция может также возвратить

 

массив индексов,

позволяющий

восстановить

структуру