Сделай Сам Свою Работу на 5

Глава 1. Вычисления в командном режиме

Простейшие математические операции в MATLAB

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

Вводить команду надо после символов "приглашения": >>. Например:

 

>> 2 + 3

 

ans =

 

В данном случае мы сложили два числа, а так как результат не был явно присвоен никакой переменной, то MATLAB присвоил результат переменной ans. Таким же образом можно использовать различные операторы и функции, некоторые из которых приведены в таблице 1.1:

 

Таблица 1.1

Математические операторы и функции
+ Сложение
- Вычитание
* Умножение
/ Деление
\ Обратное деление, результатом этой операции является деление правого аргумента на левый
abs Модуль величины
mod Остаток от деления
exp Экспонента
log Натуральный логарифм
log10 Десятичный логарифм
log2 Логарифм по основанию 2
sqrt Квадратный корень
Тригонометрические функции
cos Косинус аргумента, заданного в радианах
cosd Косинус аргумента, заданного в градусах
sin Синус аргумента, заданного в радианах
sind Синус аргумента, заданного в градусах
tan Тангенс аргумента, заданного в радианах
tand Тангенс аргумента, заданного в градусах
cot Котангенс аргумента, заданного в радианах
cotd Котангенс аргумента, заданного в градусах
sinc Синк аргумента
Обратные тригонометрические функции
acos Арккосинус, результат возвращается в радианах
acosd Арккосинус, результат возвращается в градусах
asin Арксинус, результат возвращается в радианах
asind Арксинус, результат возвращается в градусах
atan Арктангенс, результат возвращается в радианах и лежит в интервале [-p/2; p/2]
atand Арктангенс, результат возвращается в градусах и лежит в интервале [-90; 90]
atan2 Арктангенс, результат возвращается в радианах и лежит в интервале [-p; p]
acot Арккотангенс, результат возвращается в радианах и лежит в интервале [-p/2; p/2]
acotd Арккотангенс, результат возвращается в градусах и лежит в интервале [-90; 90]

 



Таким же образом, можно вычислять и более сложные выражения:

 

>> 2.0 * sind(30) + tand(45) * abs(sind(-30))

 

ans =

1.5000

 

При делении положительного числа на 0 будет получено значение +∞ (или в терминах MATLAB – «Inf»), при делении отрицательного числа на 0 будет получено значение -∞ (или в терминах MATLAB – «-Inf»). При делении 0 на 0 результатом будет NaN (сокращение от слов Not-a-Number). Это продемонстрировано в следующем примере:

 

>> 2 / 0

 

ans =

Inf

 

>> -5 / 0

 

ans =

-Inf

 

>> 0 / 0

 

ans =

NaN

 

Значения Inf, -Inf и NaN могут использоваться в выражениях, что часто случается неявно в результате ошибок при вычислении. Работа некоторых операций с Inf, -Inf и NaN показаны в следующем примере:

 

>> 10 + Inf

 

ans =

Inf

 

>> 5 - Inf

 

ans =

-Inf

 

>> 10 / Inf

 

ans =

 

>> Inf * 0

 

ans =

NaN

 

>> Inf - Inf

 

ans =

NaN

 

>> NaN + 2

 

ans =

NaN

 

>> NaN / NaN

 

ans =

NaN

 

>> NaN / Inf

 

ans =

NaN

 

>> 0 * NaN

 

ans =

NaN

 

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

 

>> % Этот комментарий должен пояснять следующую формулу

>> 2.0 * sind(30) + tand(45) * abs(sind(-30))

 

ans =

1.5000

 

Переменные

В приведенных примерах в выражениях использовались только константы, но MATLAB, как и большинство языков программирования, может работать и с переменными. Имена переменных могут содержать буквы латинского алфавита, цифры и знак подчеркивания, но начинаться имя переменной обязано с буквы. Длина имени переменной не может превышать 63 символов, если попытаться создать переменную с именем длиннее 63 символов, MATLAB обрежет имя переменной до 63 символов. Таким образом, следующие имена переменных являются корректными: varname, varName, VarName, var_name, varname_, variable_1. Следующие имена не могут быть использованы для обозначения переменных: _varname (начинается с символа подчеркивания), 1varname (начинается с цифры), переменная_1 (содержит не латинские символы), var-name (содержит знак «-»).

Имена переменных (так же как ключевых слов и функций) в MATLAB регистрозависимы, то есть переменные varname, varName и VarName являются разными переменными.

Для присваивания переменной значения, используется оператор =, например:

 

>> a = 30

 

a =

 

>> b = 45

 

b =

 

>> c = sind (a) + tand (b)

 

c =

1.5000

 

>> z = 'text'

 

z =

text

 

В этом примере переменным a, b, c были присвоены числовые значения, а переменной z – строковое. В реальных программах переменным желательно давать более осмысленные имена, описывающие назначение переменной. Строковые константы в MATLAB задаются в одинарных кавычках. В отличие от многих других языков, в MATLAB нет необходимости заранее объявлять переменные, они создаются в момент первого присваивания. Кроме того, язык MATLAB относится к языкам программирования с динамической типизацией, то есть одна и та же переменная в разных частях программы может хранить значение разных типов. Например,

 

>> x = 10

 

x =

 

>> x = 'text'

 

x =

text

 

>> x = 5 + 10i

 

x =

5.0000 +10.0000i

 

В последнем выражении переменной x присваивается комплексное значение. Такая возможность изменять тип переменной по ходу выполнения программы иногда бывает полезна, но ей надо пользоваться с осторожностью и только в крайней необходимости, поскольку такое поведение языка может стать источником ошибок.

Как видно из приведенных выше примеров, MATLAB выводит результат после каждого выражения. Если результат каких-то выражений не нужно показывать, то в конце этого выражения нужно поставить точку с запятой «;». Например:

 

>> c = sind (a) + tand (b);

>> c

 

c =

1.5000

 

В этом примере сразу после вычисления выражения c = sind (a) + tand (b); результат не выводится, а чтобы узнать, какое значение хранит переменная (в данном случае c), было введено имя этой переменной и нажата клавиша Enter. Если значение выражения не присваивается никакой переменной, то оно присваивается переменной с именем ans. При создании переменной, ее имя появляется в окне "Workspace", что показано на рисунке 1.3.

 

Рис. 1.3. Список переменных в окне "Workspace".

 

Для того чтобы удалить переменную и освободить занимаемую ей память, используется команда clear. Чтобы удалить одну или несколько переменных, нужно ввести команду clear, за которой через пробел будут перечислены те переменные, которые нужно удалить. Например, для удаления переменных c и z, нужно выполнить команду:

 

>> clear c z

 

После этого указанные переменные исчезнут из окна "Workspace". Для удаления всех переменных используется команда clear без параметров:

 

>> clear

 

 

Как было показано выше, MATLAB может работать с комплексными числами. Далее показаны примеры создания комплексных переменных. В качестве мнимой единицы в комплексных числах может использоваться константа i или j, поэтому нужно быть особенно внимательным при создании переменной с именем i или j, которые часто используются в качестве счетчика циклов.

 

>> clear

>> x = 1 + 5i

 

x =

1.0000 + 5.0000i

 

>> y = -2 - 4j

 

y =

-2.0000 - 4.0000i

 

>> i

 

ans =

0 + 1.0000i

 

>> j

 

ans =

0 + 1.0000i

 

>> 2 * i

 

ans =

0 + 2.0000i

 

>> i = 10

 

i =

 

>> 2 * i

 

ans =

 

>> 2i

 

ans =

0 + 2.0000i

 

В таблице 1.2 приведены некоторые наиболее часто используемые функции для работы с комплексными числами:

Таблица 1.2

complex Создание комплексного числа по его действительной и мнимой части
abs Модуль комплексного числа
angle Фаза комплексного числа в интервале [-p; p]
conj Получение комплексно-сопряженного числа
real Получение действительной части комплексного числа
imag Получение мнимой части комплексного числа

Функция complex предназначена для создания комплексных чисел по их действительной и мнимой частям и является альтернативой использования переменных i и j.

 

>> clear

>> re = 5;

>> im = -3;

>> re + im * i

 

ans =

5.0000 - 3.0000i

 

>> complex (re, im)

 

ans =

5.0000 - 3.0000i

 

Создание матриц

До сих пор в примерах использовались только одиночные числа (дробные и комплексные), но в MATLAB основным типом переменных являются матрицы, и даже те числа, которые встречались в примерах, с точки зрения MATLAB являются матрицами размерностью 1 x 1. В этом можно убедиться, воспользовавшись командой whos, которая выводит информацию о переменных.

 

>> clear

>> x = 10;

>> y = 5 + 10i;

>> whos

Name Size Bytes Class Attributes

 

x 1x1 8 double

y 1x1 16 double complex

 

Команда whos выводит информацию обо всех созданных переменных в виде столбцов: "Name" – имя переменной, "Size" – размерность матрицы, "Bytes" – объем памяти, который занимает переменная, столбцы "Class" и "Attributes" характеризуют тип переменной.

С помощью команды whos можно вывести информацию о конкретной переменной, для этого команде whos надо передать строку, содержащую имя переменной, о которой надо получить информацию:

 

>> whos 'x'

Name Size Bytes Class Attributes

 

x 1x1 8 double

 

Из выполнения команды whos видно, что переменные x и y представляют собой матрицы, размером 1 x 1. Для создания матриц нужной размерности используются квадратные скобки. Для создания матрицы-строки (вектора-строки) нужно перечислить элементы матрицы в квадратных скобках, разделяя элементы (столбцы матрицы) пробелом или запятыми.

 

>> a = [1 5 -2 10]

 

a =

1 5 -2 10

 

>> b = [0.5, -1, 2.5, 0]

 

b =

0.5000 -1.0000 2.5000 0

 

Чтобы убедиться, что были созданы именно матрицы, можно воспользоваться все той же командой whos:

 

>> whos 'a' 'b'

Name Size Bytes Class Attributes

 

a 1x4 32 double

b 1x4 32 double

 

Из результата выполнения этой команды видно, что переменные a и b представляют собой матрицы размером 1 x 4 (одна строка, четыре столбца), и каждая переменная занимает в памяти 32 байта вместо 8 байт, занимаемых одним элементом.

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

 

>> c = [ 1

0.2

-13]

 

c =

1.0000

0.2000

11.0000

-13.0000

 

>> whos 'c'

Name Size Bytes Class Attributes

 

c 4x1 32 double

 

Или

 

>> c = [1; 0.2; 11; -13]

 

c =

1.0000

0.2000

11.0000

-13.0000

 

Другой способ создания матриц-столбцов заключается в том, что можно объявить матрицу-строку и применить к ней операцию транспонирования. Для транспонирования в MATLAB предусмотрена команда «.'» (точка с одиночной кавычкой).

 

>> c = [1, 0.2, 11, -13].'

 

c =

1.0000

0.2000

11.0000

-13.0000

 

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

 

>> d = [1 0 0.5 -11

12 -0.1 0.1 7

0.33, 2.5 3 4]

 

d =

1.0000 0 0.5000 -11.0000

12.0000 -0.1000 0.1000 7.0000

0.3300 2.5000 3.0000 4.0000

 

>> whos 'd'

Name Size Bytes Class Attributes

 

d 3x4 96 double

 

Или

>> d = [1 0 0.5 -11; 12 -0.1 0.1 7; 0.33 2.5 3 4]

 

d =

1.0000 0 0.5000 -11.0000

12.0000 -0.1000 0.1000 7.0000

0.3300 2.5000 3.0000 4.0000

 

На практике часто нужно создавать матрицы определенного вида, например, нулевую матрицу, единичную матрицу и т.п. Для облегчения создания таких матриц предусмотрены специальные функции. В частности, для создания нулевых матриц используется функция zeros. Функция zeros может принимать разное количество параметров. Для создания нулевой матрицы с заданным количеством строк и столбцов используется функция zeros с двумя параметрами, первый параметр функции – это количество строк, второй параметр – количество столбцов.

>> x = zeros (4, 2)

 

x =

0 0

0 0

0 0

0 0

 

Если нужно создать квадратную нулевую матрицу, то достаточно в функцию zeros передать один параметр, задающий размерность матрицы.

 

>> y = zeros (4)

 

y =

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0

 

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

 

>> ones (4)

 

ans =

1 1 1 1

1 1 1 1

1 1 1 1

1 1 1 1

 

>> ones (4, 2)

 

ans =

1 1

1 1

1 1

1 1

 

>> eye (4)

 

ans =

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

 

>> eye (4, 2)

 

ans =

1 0

0 1

0 0

0 0

 

Кроме того, на практике часто встречаются задачи, когда необходимо создать матрицу-строку (или столбец) и заполнить ее последовательностью чисел с равным шагом. Для создания таких матриц в MATLAB предусмотрен следующий синтаксис:

 

первый элемент: шаг: последний элемент.

 

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

 

>> x = 1: 0.5: 5

 

x =

1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000

 

Если шаг равен 1, то его можно опустить:

 

>> x = 0: 10

 

x =

0 1 2 3 4 5 6 7 8 9 10

 

Кроме того, шаг может быть отрицательным:

 

>> x = 10: -1: 0

 

x =

10 9 8 7 6 5 4 3 2 1 0

 



©2015- 2019 stydopedia.ru Все материалы защищены законодательством РФ.