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

1-2 Моделирование / Matlab. Практический подход. Самоучитель

.pdf
Скачиваний:
765
Добавлен:
31.01.2021
Размер:
12.72 Mб
Скачать

Глава 1. Принципы работы Matlab и основы вычислений

ния к элементу матрицы MyVar(1,1). В обоих случаях в качестве результата возвращается значение скалярной переменной MyVar.

Поскольку все переменные в Matlab априори рассматриваются как матрицы, никаких особых инструкций при объявлении матриц выполнять не нужно, за исключением того, что для матрицы необходимо задать значения ее элементов. Делается это достаточно просто. Список элементов матрицы заключается в квадратные скобки, списки значений элементов строки разделяются запятыми или пробелами, а списки значений разных столбцов разделяются точкой с запятой. Например, командой A=[1 2 3] задается вектор-строка (матрица размеров 1×3) с элементами 1, 2 и 3 соответственно. Командой B=[4;5;6] задается вектор-столбец (матрица размеров 3×1) с элементами 4, 5 и 6. Наконец, командой C=[1,2;3,4;5,6] задается матрица размерами 3×2 (3 строки и 2 столбца). Примеры выполнения этих команд приведены в документе на рис. 1.7.

Рис. 1.7. Определение матричных переменных

К элементам матрицы можно обращаться в обычном режиме, указав два индекса (номер строки и номер столбца, на пересечении которых находится элемент). Существует также способ обращения по обобщенному индексу. Обобщенный индекс элемента матрицы определяется как его порядковый номер, если отсчет начинать с верхнего левого элемента сверху вниз и от левого столбика к правому. Так, если матрица X имеет размеры n на m, то

21

Самоучитель Matlab

к элементу с индексами i и j можно обратиться либо как X(i,j), либо как X(n*(j-1)+i). Хотя второй способ индексирования элементов может показаться несколько запутанным, он соответствует техническому способу индексации элементов матрицы в памяти, поэтому вычисления в таком случае выполняются быстрее. На рис. 1.8 приведен фрагмент документа, в котором в различном режиме выполняется обращение к элементам матрицы C., определенной ранее (см. рис. 1.8).

Рис. 1.8. Способы обращения к элементам матрицы

В частности, командой C(1) получаем значение элемента C(1,1) (значение 1). Инструкция C(5) является ссылкой на элемент C(2,2), значение которого равно 4.

Арифметические операции

- Чем хотите пока заняться, Состоятельные Кроты?

- А что, если нам посчитать?! - И то дело!

М/ф "Дюймовочка"

Основные арифметические операторы Matlab позволяют выполнять операции не только со скалярными величинами, но и с матрицами. Более того, можно утверждать, что основная часть операторов ориентирована на выполнение матричных операций. В табл. 1.1 перечислены основные арифметические операторы Matlab с кратким описанием результата их применения к операндам разного типа (если такие допустимы).

22

Глава 1. Принципы работы Matlab и основы вычислений

Табл. 1.1. Основные арифметические операторы Matlab

Оператор

Описание

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

+является матрица той же размерности, что и матрицы-операнды, а ее элементы равны сумме соответствующих элементов складываемых матриц. Если один операнд - скаляр, а другой – матрица, то результатом является матрица, каждый элемент которой равен сумме скаляра и соответствующего элемента матрицы-операнда.

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

-матриц-операндов. Если один операнд – матрица, а другой – скаляр, то результатом является матрица, элементы которой вычисляются как разность соответствующего элемента матрицы-операнда и скаляра (с учетом порядка операндов). Можно вычитать скаляр из матрицы и матрицу из скаляра

Оператор умножения. Бинарный оператор. Если операндами являются скаляры, вычисляется произведение скалярных величин. Для

*операндов-матриц вычисляется матричное произведение. Если один операнд – матрица, а другой - скаляр, результатом является матрица, элементы которой вычисляются как произведение соответствующего элемента матрицы-операнда и скаляра.

Оператор деления. Бинарный оператор. Если оба операнда – скаляры, то в качестве результата возвращается частное от деления скаляра на

скаляр. Если первый операнд – матрица, а второй – скаляр, в качестве

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

Оператор возведения в степень. Бинарный оператор. Первым операндом может быть скаляр или квадратная матрица. Если первый операнд – скаляр, то второй может быть любым действительным скаляром.

Вкачестве результата возвращается первый операнд, возведенный ^ в степень, определяемую вторым операндом. Если первый операнд – квадратная матрица, то второй операнд должен быть целочисленным (может быть отрицательным). Результатом является матрица, вычисляемая возведением матрицы-операнда в целочисленную степень,

определяемую вторым операндом.

Оператор левостороннего деления. Бинарный оператор. Операндами

\являются квадратные матрицы одного ранга. Результатом является матрица, равная произведению матрицы, обратной к первому операндуматрице, на второй операнд-матрицу.

23

Самоучитель Matlab

Оператор

Описание

 

 

 

Оператор поэлементного умножения. Бинарный оператор. Операн-

.*

дами являются матрицы одинакового размера. Результатом является

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

 

элементов матриц-операндов.

 

 

 

Оператор поэлементного деления. Бинарный оператор. Операндами

./

являются матрицы одинакового размера. Результатом является матри-

ца, элементы которой вычисляются как частное от деления элементов

 

матрицы - первого аргумента на соответствующие элементы матрицы

 

- второго аргумента

 

 

 

Оператор поэлементного левостороннего деления. Бинарный опера-

.\

тор. Операндами являются матрицы одинакового размера. Резуль-

татом является матрица того же размера. Выполняется деление эле-

 

ментов матрицы - второго операнда на соответствующие элементы

 

матрицы - первого операнда.

 

 

'

Оператор вычисления сопряженной матрицы. Унарный оператор. Ре-

зультатом является матрица, сопряженная к матрице-оператору.

 

 

.'

Оператор транспонирования. Унарный оператор. Результатом являет-

ся матрица, транспонированная к матрице-операнду.

 

 

 

Оператор поэлементного возведения в степень. Бинарный оператор.

 

Операндами могут быть скаляры или матрицы (в разной комбинации).

 

Если первый аргумент – матрица, а второй – скаляр или матрица той же

 

размерности, то в качестве результата возвращается матрица, элементы

.^

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

определяемую вторым операндом-скаляром или соответствующими

 

элементами второго операнда-матрицы. Если первый операнд скаляр-

 

ный, а второй является матрицей, то результатом будет матрица того же

 

размера, что матрица-операнд (второй). Элементы матрицы-результата

 

получаются возведением скаляра (первый операнд) в степень, опреде-

 

ляемую соответствующим элементом второго (матричного) операнда.

 

 

Приведенные операторы практически полностью перекрывают весь спектр возможных операций, которые приходится выполнять с матрицами. Некоторые примеры использования арифметических операторов с матричными операндами приведены в табл. 1.2. Матрицы A и B при этом инициализированы в документе следующими командами (жирным шрифтом выделен ввод пользователя):

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

A =

1 3 -2 4

>> B=[-1,1;3,-2]

B =

-1 1

3-2

24

Глава 1. Принципы работы Matlab и основы вычислений

Табл. 1.2. Примеры выполнения арифметических операций с матрицами

Команды

 

Описание

 

 

 

 

>> A*B

 

 

Произведение матриц.

ans =

-5

 

Вычисляется по правилам вычисления матриц

8

 

в линейной алгебре

14

-10

 

 

>> A/B

 

 

Деление матриц.

ans =

 

 

Матрица A умножается на матрицу, обратную

11

4

 

 

к матрице B

8

2

 

>> A\B

 

 

Левостороннее умножение матриц.

ans =

 

 

Матрица, обратная к матрице A, умножается на

-1.3000

1.0000

матрицу B

0.1000

0

>> A./B

 

Поэлементное деление матриц.

ans =

 

 

Элементы матрицы A делятся на соответствую-

-1.0000

3.0000

щие элементы матрицы B

-0.6667 -2.0000

>> A.\B

 

Левостороннее поэлементное деление.

ans =

 

 

Элементы матрицы B делятся на соответствую-

-1.0000

0.3333

щие элементы матрицы A

-1.5000 -0.5000

>> A.*B

 

Поэлементное умножение матриц.

ans =

 

 

Элементы матрицы A умножаются на соответ-

-1

3

 

 

ствующие элементы матрицы B

-6

-8

 

>> A+B

 

 

Сумма матриц.

ans =

4

 

Вычисляется по правилам вычисления суммы

0

 

матриц в линейной алгебре (складываются со-

1

2

 

ответствующие элементы матриц A и B)

>> A-B

 

 

Разность матриц.

ans =

2

 

Вычисляется по правилам расчета разности

2

 

двух матриц (от элементов матрицы A вычита-

-5

6

 

ются соответствующие элементы матрицы B)

>> A.'

 

 

Транспонирование матрицы.

ans =

-2

 

Результатом является матрица, транспониро-

1

 

ванная к матрице A

3

4

 

 

 

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

25

Самоучитель Matlab

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

Я всегда завидовал Вашему умению выстраивать точную логическую направленность.

К/ф "Семнадцать мгновений весны"

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

Обычно под логическими значениями подразумевают тип данных, переменные которого могут принимать два значения – истина и ложь (true и false соответственно). В Matlab любое числовое значение, отличное от нуля, интерпретируется как истина (или true), а ненулевые значения интерпретируются как ложь (или false). Фактически, это есть правило перевода числовых значений в логические значения. Обратное преобразование выполняется по следующему правилу: логическое значение истина (или true) преобразуется в числовое значение 1, а логическое значение ложь (или false) преобразуется в числовое значение 0.

На заметку

Если некоторой переменной присвоить в качестве значения true или false, отображаемым будет соответственно значение 1 или 0.

Операндами для операторов сравнения выступают числовые значения. Это бинарные операторы. Если оба операнда – скаляры, сравнение выполняется по правилам сравнения чисел. При истинном соотношении возвращается значение 1, при ложном – значение 0. Если операндами являются матрицы одинаковых рангов, сравниваются соответствующие элементы матриц (по правилам сравнения числовых значений). Результатом является "логическая матрица": ее элементы равны 1 или 0 в зависимости от результата сравнения соответствующих элементов исходных матриц. Если одним операндом является скаляр, а другим – матрица, то выполняется сравнение каждого элемента матрицы со скаляром. Операторы сравнения перечислены в табл. 1.3.

Табл. 1.3. Операторы сравнения Matlab

Оператор

Описание

 

 

==

Оператор проверки на предмет равенства

~=

Оператор проверки значений операндов на предмет неравенства

26

Глава 1. Принципы работы Matlab и основы вычислений

Оператор

Описание

>Оператор проверки того, что значение первого операнда больше значения второго операнда

<Оператор проверки того, что значение первого операнда меньше значения второго операнда

>=

Оператор проверки того, что значение первого операнда не меньше

значения второго операнда

 

 

<=

Оператор проверки того, что значение первого операнда не больше

значения второго операнда

Как и в случае операторов сравнения, операндами логических операторов могут выступать как скаляры, так и матрица (одновременно оба или только один). Если операндами являются скаляры, соответствующие логические операции выполняются по описанным выше правилам преобразования числовых и логических значений. Если оба операнда – матрицы одинаковых размеров, логические операции выполняются поэлементно. При условии, что один операнд – матрица, а второй – скаляр, логическая операция выполняется для каждого элемента матрицы и скаляра. Логические операторы Matlab представлены в табл. 1.4.

Табл. 1.4. Логические операторы Matlab

Оператор

Описание

Логическая операция и. Результатом является истина (значение 1),

&

если оба операнда истинны. В противном случае возвращается 0

Логическая операция или. Результатом является истина (значение 1),

|

если хотя бы один операнд истинен. В противном случае возвращается 0

Логическая операция отрицания. Для истинного операнда возвраща-

~

ется значение 0, а для ложного – значение 1

Еще раз отметим, что как в операциях сравнения, так и в логических операциях для элементов матриц или скаляров (в зависимости от типа операндов) возвращаются значения 0 (ложь) и 1 (истина).

Комплексные числа

Жизнь сложена из банальных обстоятельств, и потому скучна.

К/ф "Клуб самоубийц, или Приключения титулованной особы"

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

27

Самоучитель Matlab

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

На заметку

Если быть более точным, то в случае, когда, например, переменной i присвоено числовое значение, использовать эту переменную как мнимую единицу нужно "правильно". Например, командой i=3 создаем "проблему" в виде числового значения переменной i. Если после этого выполнить команду a=i, переменная a получит значение 3. Но если воспользоваться командой a=1i, то результат будет иным – значение переменной a будет комплексным и равно мнимой единице.

Ниже приведены примеры использования комплексных значений (жирным шрифтом выделен ввод пользователя):

>>z=1+2i

z =

1.0000 + 2.0000i

>>z+j

ans =

1.0000 + 3.0000i

>>(2-4i)*(1+z) ans =

12.0000 - 4.0000i

>>i*z

ans =

-2.0000 + 1.0000i

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

Существует ряд функций, облегчающих работу с комплексными числами. Среди них имеет смысл выделить функции real() и imag() для вычисления действительной и мнимой частей комплексного числа соответственно, функцию conj() для вычисления комплексно сопряженного числа, а также функцию complex(), принимающую два аргумента (действительная и мнимая части), на основании которых создается комплексное число. Примеры использования этих функций приведены далее:

>> complex(3,-2) ans =

3.0000 - 2.0000i

28

Глава 1. Принципы работы Matlab и основы вычислений

>>conj(ans) ans =

3.0000 + 2.0000i

>>real(ans)

ans =

3

>> imag(2-4i) ans =

-4

Как и в предыдущих случаях, жирным шрифтом выделены команды, вводимые пользователем.

На заметку

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

Разумеется, комплексными могут быть не только скалярные величины, но и матрицы.

Оператор создания интервала значений

Здесь явно не хватает двух точек.

К/ф "Приключения Шерлока Холмса и доктора Ватсона. Кровавая надпись"

Достаточно популярным и часто используемым в Matlab является оператор "двоеточие", то есть :. Существует несколько вариантов его использования. Рассмотрим самые общие.

Для создания вектора-строки со значениями, равнораспределенными в некотором интервале, оператор используют в следующем формате: нижняя граница диапазона, оператор (то есть :) и верхняя граница диапазона – например, x=a:b. При этом создается вектор-строка (для приведенной команды вектор записывается в переменную x). Первый элемент вектора равен нижней границе указанного диапазона (значение a). Шаг дискретности изменения значений элементов вектора равен единице. Значение последнего элемента определяется верхней границей указанного диапазона (в данном случае b). Так, командой x=1:10 создается вектор-строка со значениями 1, 2, 3 и т.д. до 10 включительно (жирным шрифтом выделен ввод пользователя):

>> x=1:10 x =

1

2

3

4

5

6

7

8

9

10

29

Самоучитель Matlab

Если нужно создать вектор-строку с последовательностью значений и шагом дискретности, отличным от единицы, используют тот же оператор "двоеточие" (то есть :), но в несколько ином формате: указывается нижняя граница диапазона значений, оператор "двоеточие", шаг дискретности, снова оператор "двоеточие", и верхняя граница диапазона – например, y=a:m:b. Формируется вектор-строка с первым значением – нижней границей диапазона (для приведенной команды это a). Каждый следующий элемент получается прибавлением к предыдущему величины, указанной в качестве шага дискретности (в данном случае m). Значения элементов сформированного массива не превышают верхнюю границу диапазона (то есть b). Пример такого использования оператора "двоеточие" приведен ниже (отрывок кода из рабочей области, жирным выделен ввод пользователя):

>> y=1:0.7:10

 

 

 

 

 

 

y =

 

 

 

 

 

 

 

Columns 1 through 8

3.1000

3.8000

4.5000

5.2000

5.9000

1.0000

1.7000

2.4000

Columns 9 through 13

8.7000

9.4000

 

 

 

6.6000

7.3000

8.0000

 

 

 

В данном случае создается вектор-строка y со значениями от 1 до 10 с шагом дискретности 0.7 – значения 1.0, 1.7, 2.4 и т.д. до 9.4 включительно (следующее гипотетическое значение в последовательности 10.1 превышает верхнюю границу диапазона 10, поэтому в формируемый вектор оно не входит).

На заметку

Сообщения Columns 1 through 8 и Columns 9 through 13 появляются автоматически как следствие того, что результат выполнения команды y=1:0.7:10 в одну строку не помещается, поэтому выполняется перенос части вектора-результата в следующую строку. Данные сообщения призваны облегчить процесс индексной идентификации элементов.

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

Например, если оператор "двоеточие" используется в формате A(i:j,k), то в качестве результата возвращается вектор-столбец, который формируется из элементов матрицы A, находящихся в k-м столбце с i-й по j-ю строку включительно. Ссылка в формате A(:,k) возвращает в качестве значения весь k-й столбец матрицы A.

Можно использовать оператор "двоеточие" при указании сразу двух индексов. Например, командой A(i:j,m:n) возвращается подматрица,

30