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

Применение MATLAB для моделирования радиотехнических сигналов и устройств. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

a(начальный_индекс : конечный_индекс)

 

 

 

 

a(1,2:4)

 

 

a(1:end,3)

ans =

 

 

ans =

2

3

4

3

 

 

 

7

 

 

 

11

a(2:3,2:4)

 

 

 

ans =

 

 

 

6

7

8

 

10

11

12

 

Если применять двоеточие без указания начального и конечного индексов, произойдет обращение ко всем элементам в указанном измерении массива:

a(2,:) ans =

5

6

7

8

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

a(начальный_индекс : шаг : конечный_индекс)

Например, создадим массив a =[1 2 3 4 5 6 7 8 9]. Для

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

a(1:2:end) ans =

1

3

5

7

9

Если можно обратиться к элементам, значит, можно и заменить их в исходном массиве:

a(1:2:end)=0 a =

0

2

0

4

0

6

0

8

0

11

При перезаписи значений из одного массива в другой важно учитывать, чтобы размерности массивов совпадали:

a(1:2:end)=[-5 -4 -3 -2 -1] a =

-5

2

-4

4

-3

6

-2

8

-1

С помощью оператора «двоеточие» можно также создавать векторы из элементов, идущих с равным шагом:

v=0:0.5:2 v =

0

0.5000

1.0000

1.5000

2.0000

Если не указать шаг, по умолчанию он будет равен единице:

v=0:8 v =

0

1

2

3

4

5

6

7

8

3.3. Операции с массивами и векторами

Рассмотрим особенности работы с массивами в языке программирования MATLAB. Как уже говорилось, в MATLAB нет понятия отдельной переменной, все переменные – массивы.

Если применять арифметический оператор или функцию к такой переменной-массиву, то MatLab осуществляет поэлементную обработку всех элементов массива.

Примечание. Оператором (англ. operator) называют специальное обозначение для определенной операции над данными – операндами (англ. operand) [3].

Для примера создадим массив:

a=[1 2; 3 4] a =

1

2

3

4

12

Ниже представлены примеры операций.

 

 

 

 

b=a-1

 

b=a-2*a

 

b =

 

b =

 

0

1

-1

-2

2

3

-3

-4

c=log(a)

 

c=sqrt(a)

 

c =

 

c =

 

0

0.6931

1.0000

1.4142

1.0986

1.3863

1.7321

2.0000

Чтобы отличать поэлементные (англ. element-wise) операции умножения, деления и возведения в степень от матричных, они записываются с помощью операторов «.*», «./», «.^» соответственно:

 

 

 

Поэлементные

Матричные

 

b=a.*a

 

b=a*a

 

b =

 

b =

 

1

4

7

10

9

16

15

22

b=a./a

 

b=a/a

 

b =

 

b =

 

1

1

 

1

0

1

1

 

 

0

1

b=a.^2

 

b=a^2

 

b =

 

b =

 

1

4

7

10

9

16

15

22

 

 

 

 

b=a.^a

 

 

 

b =

 

 

 

1

4

 

 

27

256

 

 

Возможно объединение (англ. concatenation) двух и более массивов в один. При этом можно их объединить как по горизонтальной, так и

13

по вертикальной линии: в первом случае необходимо, чтобы у матриц было одинаковое количество строк, а во втором – столбцов:

 

 

 

a=[1 2; 3 4];

a=[1 2; 3 4];

 

b=[5 6];

 

b=[5;6];

 

 

c=[a;b]

 

c=[a,b]

 

 

c =

 

c =

 

 

1

2

1

2

5

3

4

3

4

6

5

6

 

 

 

4. M-ФАЙЛЫ

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

Использование m-файлов можно разделить на два вида.

1. Скрипт (англ. script) представляет собой m-файл, где записана последовательность команд, как если бы они вводились в командном окне. Эти команды образуют простейший тип программы на языке MATLAB, выполнямой при вызове m-файла. Переменные, созданные в скрипте, сохраняются в рабочей области MATLAB.

2. M-функция – отдельная программная единица, которая может иметь входные, выходные параметры, а также свои локальные переменные (см. «Создание функций»).

Для создания нового m-файла есть несколько следующих способов. 1. Нажать «New Script» (см. рис. 1) в главном окне среды. При этом откроется редактор (англ. Editor), введенные команды в котором мож-

но сохранить в m-файле (рис. 2).

2.Выделить в «Command History» команды, щелкнуть на них правой кнопкой мыши и выбрать «Create Script». В результате выделенные команды будут скопированы и открыты в редакторе (Editor), далее их можно также сохранить в m-файле.

3.Ввести в «Command Window» команду edit имя_файла, где

имя_файла (m-файла) должно начинаться с буквы и содержать только буквы английского алфавита, цифры и символы подчеркивания «_».

При вводе edit без указания имени файла создается файл Untitled.m, однако надо иметь в виду, что автоматически Untitled.m MATLAB не сохраняет.

14

Рис. 2. Окно редактора m-файлов

Команда edit, кроме создания m-файлов, предназначена также для их открытия в редакторе (Editor).

Текст имя_файла может содержать только имя, в этом случае но-

вый файл создается в текущей папке (англ. Current Folder). Если там уже есть файл с таким именем, он откроется для редактирования.

Если имя_файла кроме имени содержит путь, например, введено edit D:\new_file.m, то файл создается в указанном месте, или, если таковой уже существует, он открывается для редактирования.

5. ОСОБЕННОСТИ СИНТАКСИСА ЯЗЫКА MATLAB

5.1. Условный оператор «if … elseif … else»

Общий вид конструкции условного оператора if имеет вид:

if условие операторы;

elseif условие операторы;

...

else

операторы;

end

15

В простейшем виде он выглядит как

if условие операторы;

end

Если условие, записанное после if, истинно, то выполняется блок стоящих следом за ним операторов. Истинным является такое условие, которое возвращает логическое значение 1. Переход к проверке условий следующих блоков elseif осуществляется, только если предыдущие оказались ложными. Блок else («иначе», «в противном случае») должен быть один, блоков elseif напротив, может быть много.

В табл. 1 и 2 приведено принятое в MATLAB обозначение операторов отношения (англ. relational operators) и логических операторов.

 

 

Таблица 1

 

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

 

 

 

Форма записи

Эквивалентная форма

Описание

==

eq(A,B)

Равно

~=

ne(A,B)

Не равно

>

gt(A,B)

Больше

<

lt(A,B)

Меньше

>=

ge(A,B)

Больше или равно

<=

le(A,B)

Меньше или равно

isequal(A,B)

 

Определение равенства масси-

 

 

вов. Если массивы A и B имеют

 

 

одинаковый размер и содержа-

 

 

ние, функция возвращает логи-

 

 

ческую единицу (истина), в про-

 

 

тивном случае – логический ноль

 

 

(ложь)

isequaln(A,B)

В отличие от оператора ise-

 

 

qual(A,B) этот оператор рас-

 

 

сматривает неопределенные зна-

 

 

чения (NaN2) соответствующих

 

 

друг другу элементов массивов А

 

 

и B как равные

2 Not-a-Number.

16

 

 

Таблица 2

 

Логические операторы

 

 

 

Форма записи

Эквивалентная форма

Описание

&

and(A,B)

Логическое И

|

or(A,B)

Логическое ИЛИ

~

not(A)

Логическое НЕ

xor(A,B)

 

Исключающее ИЛИ

Примечание. Возможно (и MATLAB рекомендует) применение укороченных (англ. short-circuit) логических операторов && и ||. С их помощью реализуется укороченная проверка логических выражений. Например, в случае A&&B, если A дает логический ноль (ложь), то проверка B уже не осуществляется, поскольку результат тождественно ложен. Также и в случае A||B: если A дает логическую единицу (истина), то B не проверяется, так как выражение заведомо истинное [3, 7].

Пример. Пороговая обработка массива:

 

 

 

 

 

A=rand(4,3)

A =

 

0.8143

0.1966

for i=1:4

0.1493

 

for j=1:3

0.2575

 

0.2435

0.2511

if A(i,j)<0.5

0.8407

 

0.9293

0.6160

A(i,j)=0;

0.2543

 

0.3500

0.4733

elseA(i,j)=1;

A =

1

0

 

end;

0

 

end;

0

0

0

 

end;

1

1

1

 

A

0

0

0

 

5.2. Применение операторов отношения к матрицам

Применение операторов отношения и логических операторов в языке MATLAB распространяется не только на переменные, которые, напомним, являются в простейшем случае массивами размерностью 1×1, но также и на массивы с большей размерностью.

Все операторы отношения (см. табл. 1) применимы для многомерных массивов. Для этого размеры массивов, элементы которых сравниваются, должны быть одинаковы или совместимы3.

3 Применение операторов отношения к массивам с совместимыми размерами (англ. compatible sizes) реализовано в поздних версиях MATLAB, на-

пример, в 2016b [8].

17

При применении операторов отношения к двум массивам одинакового размера MATLAB осуществляет поэлементное сравнение, результатом которого является логический массив с таким же размером. Этот массив содержит единицы и нули, соответствующие элементам, для которых логическое условие или выполняется (единица) или не выполняется (ноль).

Например:

 

 

 

 

 

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

 

C=A==B

 

 

B=[1 10 3; 2

4 5];

C =

 

 

C=B>A

 

 

 

1

0

1

C =

 

 

 

0

1

 

0

1

1

1

0

0

 

0

 

 

 

При сравнении массива и числа происходит сравнение с каждым элементом массива:

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

C=A>2

C =

0

0

1

0

1

1

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

A(C) ans =

4

3

5

Тот же самый результат можно получить и без промежуточного массива:

A(A>2) ans =

4

3

5

18

Используя этот инструментарий, можно не только находить, но и заменять элементы массива:

A(A>2)=0 A =

1

2

0

2

0

0

Для определения индексов элементов подходит функция find.

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

Например, найдем индексы массива A:

 

 

 

>> A=[1 2 3; 2 4 5]

>> A<2 | A>2

 

A =

 

 

ans =

 

 

1

2

3

1

0

1

2

4

5

0

1

1

>> i=find(A<2 | A>2)

>> [row col]=find(A==2)

i =

 

 

row =

 

 

1

 

 

2

 

 

4

 

 

1

 

 

5

 

 

 

 

 

6

 

 

col =

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

2

 

 

5.3.Циклы типа «for»

Вобщем виде цикл «for» записывается как

for index = значения операторы;

end

19

Данная конструкция выполняет группу операторов внутри цикла (тело цикла) заданное количество раз при изменении переменной index. Наиболее распространенная запись для задания приращения зна-

чения index = исходное_значение:шаг:конечное_значение.

В случае, если шаг равен 1, запись можно сократить до исход-

ное_значение:конечное_значение.

Примеры

Заполнение вектора A значениями от 1 до 5:

 

 

 

 

 

 

A=zeros(1,5)

A =

0

0

0

0

for i=1:5

0

A(i)=i;

A =

 

 

 

 

end

2

3

4

5

A

1

Вычисление значений функции при изменении аргумента в заданных пределах:

 

 

for x=1:-0.5:-1

y = 1

y=x^3

y = 0.1250

end

y = 0

 

y = -0.1250

 

y = -1

Значения index можно задать также вектором и даже матрицей:

 

 

 

for x=[-1 2

0 -2]

y = -1

y=x^3

 

y = 8

end

 

y = 0

 

 

y = -8

for i=[1 2;

3 4]

1

disp(i);

 

3

end

 

2

 

 

 

 

4

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]