Простейшие вычисления. Работа с матрицами и векторами. Многомерные матрицы. Диалоговый режим работы

Лекция № 2

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

При таком использование необходимо использовать определенные правила записи математических функций (см. таблицу 2.1).

 

Таблица 2.1 Синтаксис математических функций и операций.
Синтаксис математики Синтаксис программы
sin(x), cos(x), tg(x), ctg(x), sec(x), csec(x); arcsin(x) и т.д.; sh(x) и т.д.; arcsh(x) и т.д. sin(x), cos(x), tan(x), ctan(x), sc(x), csc(x); asin(x) и т.д.; hsin(x) и т.д.; hasin(x) и т.д.
ln(x), lg(x), , log(x), log10(x), exp(x), a^b
+ - * / ( ) + - * / ( )

 

Использование MatLab в качестве калькулятора при использование вещественных чисел достаточно просто и его освоение не выходит за границы знания синтаксиса среды.

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

- Использование деления слева на право. Это деление отличается записью наклонной черты. Привычное нам деление записывается «/», а это деление записывается «\». Поясним на примере вычисления:

>> 8\2

ans =

0.2500

>> 8/2

ans =

Т.е. В первом случае как раз и использовано деление, о котором идет речь, записанное выражение эквивалентно нашим обычным «двум восьмым», т.е. четверти, что и показало вычисление. Подобная операция используется при работе со СЛАУ.

Еще мы рассмотрим основные функции, касающиеся работы с числами и выражениями:

 

 

Таблица 2.2 Числовые функции.
Функция и ее синтаксис Описание
format short Формирует все последующие выдачи ответов и чисел в сокращенном формате
format rat Формирует выдачу последующих результатов в виде приближенного значения как дробь или совокупность дробей
format long Формирует выдачу последующих результатов с показанием всех цифр ответа
sqrt(x) Вычисляет корень квадратный
pow2(x) Возводит двойку в степень х
pi Выдает число пи
round(x) Округляет число до целого по всем правилам округления
fix(x) Отсекает дробную часть без округления
floor(x) Округляет до меньшего целого
ceil(x) Округляет до большого целого
mod(x,y)  
rem(x,y)  
sign(x) Выдает знак числа, формируя ответ в виде 1 со знаком или нуля в случае х=0
factor(x) Раскладывает на простые сомножители
isprime(x) Выдает истину (1) если х простое число
primes(x) Формирует ряд простых чисел до числа х
rat(x) Представляет число х в виде дроби или совокупности дробей
factorial(x) Вычисляет факториал числа х
nchosek(n,m) Вычисляет число сочетаний m из n
abs(x) Вычисляет модуль числа х (в том числе и комплексных)
inf Эквивалент бесконечности
NaN Неопределенность вида 0/0 или /

 

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

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

8+i*7

-9-j*1

Как видите программа может воспринимать (точнее в системе зарезервировано) мнимую единицу как j или i. Все (почти все) вышеперечисленные функции вещественного исчисления могут работать и с комплексными числами.

Для начала работы мы должны рассмотреть наиболее часто применяемые функции:

 

Таблица 2.3 Функции комплексного переменного.
Функция и ее синтаксис Описание
abs(x) Вычисляет модуль числа х
conj(x) Возвращает число комплексно-сопряженное х
imag(x) Выдает мнимую часть числа
real(x) Выдает действительную часть числа
angle(x) Возвращает аргумент (в радианах) числа, но надо следить за квадрантом куда попадает число, т.к. среда использует arctg
isreal(x) Проверяет число на его принадлежность к классу вещественных числе, возвращает 1 (истину) если это так, иначе (х – комплексное число) возвращает лож (0)

 

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

>> 5*exp(-j*pi/6)

ans =

4.3301 - 2.5000i

При записи операторов в среде можно использовать специальные функции подавляющие вывод результата выражения (вычисления) сразу же. Этим специальным символом служит точка с запятой т.е. «;». При записи нескольких выражений в одну строчку можно применять помимо точки с запятой и запятую. В случае если необходимо растянуть один оператор на несколько строк (для лучшей наглядность, например) необходимо использовать троеточие «…», записывают троеточие в месте переноса выражения на другую строчку:

>> A=[1 2 8 ...

3 7 0 ...

7 9 5];

Матрицы и вектора

 

Понятие матрицы и вектора было дано в первой лекции и поэтому мы перейдем сразу к изучению основных функций, которые понадобятся, для работы (см. таблицу № 2.4), но перед этим введем способ задания матрицы (вектора) и способ обращения к его элементам.

Ввод матрицы осуществляется использованием метода, так называемого объединения элементов. Это объединение записывается так:

>> A=[1 1 1 2];

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

>> A=[1 2 8; 3 7 0; 7 9 5];

При этом можно производить и составления матрицы путем объединения матриц или векторов между собой (здесь вектора A1 A2 были определены заранее):

>> Q=[A1;A2];

При этом вектор A1 будет формировать первую строку матрицы, а вектор A2 вторую.

 

Таблица 2.4 Функции матричных действий
Функция и ее синтаксис Описание
zeros(m, n) Возвращает нулевую матрицу (состоящую из одних нулей) размерности mхn.
ones(m, n) Возвращает матрицу состоящую из одних единиц размерности mхn.
eye(m, n) Создает единичную матрицу размерности mхn.
rand(m, n) Возвращает матрицу случайных чисел равномерно распределенных в диапазоне от 0 до 1, матрица имеет размерность mхn.
randn(m, n) Возвращает матрицу размерности mхn, состоящих из случайных чисел в диапазоне от 0 до 1 и имеющих гауссово распределение (имеющих нормальный закон распределения).
hadamard(n) Возвращает матрицу Адамара размерности nхn.
hild(n) Возвращает матрицу Гильберта размерности nхn.
invhild(n) Возвращает обратную матрицу Гильберта размерности nхn.
reshape(A, n, m) Функция образует матрицу размерности nхm путем выборки элементов заданной матрицы А по столбцам и последующему распределению этих элементов по m столбцам каждый из которых содержит n элементов, при этом матрица А должна иметь размерность nхm.
tril(A) Выбирает нижнюю треугольную матрицу из матрицы А
triu(A) Выбирает верхнюю треугольную матрицу из матрицы А
diag(A, n) Функция создает диагональную матрицу из вектора А, при этом второй параметр необязателен. Если второй параметр присутствует, то создается матрица в которой вектор А помещается в другую диагональ, при этом если n>0, то вектор помещается выше главной диагонали, если n <0 то ниже, если n=0 то на главную диагональ. Если А матрица, то функция выдает вектор сформированный из элементов главной ее диагонали, если второй параметр отсутствует или равен нулю. Если второй параметр присутствует, то функция выдает другую диагональ, в соответствие с вторым параметром (см. предыдущий абзац).
’ (апостроф) Оператор производит транспонирование матрицы
+ - * / \ ^ Математические действия над матрицами. Применимы как к выражению вида «матрица-скаляр», так и «матрица-матрица» (за исключением возведения в степень, он применима только к выражению «матрица-скаляр»). Во всех операциях необходимо следить за размерностями матриц.
inv(A) Возвращает обратную матрицу по отношению к матрице А
det(A) Подсчет определителя (детерминанта) матрицы
cross(A, B) Векторное произведение векторов
.* ./ .\ .^ Поэлементные операции. При применении этих операций матрицы должны иметь одинаковые размерности, или же быть скалярами (числом). Пи этом происходит сопоставление элементов одной матрицы элементам другой матрицы и выполняется соответствующая операция.
lu(A) Производит LU-разложение матрицы А и выдает матрицы в следующем порядке [L U P] (подобное запись обязательна), при этом выполняется следующее соотношение P*A=L*U.
size(A) Возвращает максимум, состоящий из числа строк (первый элемент) и числа столбцов (второй элемент).
sum(A) Возвращает сумму всех элементов по столбцу
mean(A) Возвращает среднее значение столбца матрицы
std(A) Возвращает среднеквадратическое отклонение столбца матрицы
min(A) max(A) Возвращает минимум и максимум соответственно, по столбцу матрицы
sort(A) Сортирует столбец матрицы по возрастанию
prod(A) Вычисляет произведение всех элементов столбцов

 

При обращении к элементу марийцы делают запись вида A(1,8), при этом произошло обращение к элементу первой строки восьмого столбца. Таким путем можно не только считывать значение элемента, но и менять его значение. Если необходимо произвести обращение не к одному элементу а к нескольким или точнее выделить из общей матрицы подматрицу то поступают так A(1:5,6:8), при этом произошло выделение подматрицы начиная с 1 строки и кончая 5 и выделили столбцы с6 по 8. если необходимо выделить весь столбец (строку), то вместо указания конкретных номеров можно просто поставить пустое двоеточие (A(:,6:8)).

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

x=xn:h:xk

xn – начальное значение;

xk – конечное значение;

h – шаг изменения.

Таким образом, хорошо задавать, например время изменения сигнала или создавать массив координаты.

 

Многомерные матрицы

 

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

Рис. 2.1 Трехмерная матрица

 

Для иллюстрации этого предположим, что имеется прибор, который формирует каждый день новую матрицу содержащую в себе набор значений нескольких физических величин, разбросанных во времени. К концу месяца, аппарат будет вынужден хранить 30 матриц, которые будут занимать внушительный объем памяти (включая информацию о параметрах, датах и т.п., т.е. «лишнюю информацию», которую можно убрать при архивации). По затратам памяти, удобнее свести эти 30 матриц в одну (см. рис. 2.1), т.е. получить трехмерную матрицу физических величин смеренных за один месяц. При этом наша матрица будет иметь следующую структуру: время будет содержаться в плоскостях параллельных плоскости ху и располагаться в столбцах; физические величины образуют там же строки; значения величин образуют там же ячейки; матрицы содержащие дни располагаются в плоскости zx; причем в начало координат помещена матрица смеренная в первый день месяца.

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

При формировании таких массивов, необходимо помнить, что они образуются не простым набором элементов, а создаются из матриц размерности на единицу меньшей, чем образующийся массив. При этом используется функция cat(n, A1,A2,…,An), где n – размерность вдоль которой происходит объединение массивов A1 … An.

Для многомерных массивов применимы все изученные функции, но с поправкой включения размерности новых размерностей, т.е. число входных параметров увеличивается до количества размерностей массива.