Глава 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 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|