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




ЛЕКЦИЯ № 1

Введение в предмет. Основные понятия. Предназначение системы MatLAB. Типы данных.

В процессе работы как инженера, ученого, так и простого студента, ил приходится прибегать к математическим расчетам. Иногда эти расчеты носят простой характер, а иногда и достаточно сложных. Для сложных расчетов можно применять ряд математических пакетов, одним из которых и является MatLAB (Matrix Laboratory). Пакет применяется в основном для работы с массивами данных – матрицами. Но вообще это является симбиозом среды программирования (хотя и с частично обрубленными возможностями) и «головы хорошего ученого». Все это позволяет производить ряд сложных (и простых) математических вычислений, визуализацию данных, программирование приложений, нацеленных на решение однотипных задач и вообще программирование математики.

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

В области программирование среда использует языки C, C++, Java, Fortran. Но основная работа происходит все равно в C, C++.

Предназначения среды MatLAB:

– Математические расчеты

– Разработка алгоритмов

– Обработка экспериментальных данных

– Визуализация данных

– Моделирование систем и процессов

– Разработка приложений

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

 

Рис. 1.1 Очко системы MatLAB

При запуске система открывает срезу три подокна:

– Рабочее пространство – сюда пользователь вводит свои команды и смотрит результаты работы среда в интерактивном режиме.

– Окно истории – здесь пользователь может увидеть все команды, данные которые были введены ранее в систему, также можно воспользоваться всем этим для уменьшения ввода однотипной информации.

– Окно содержимого рабочей директории – здесь пользователь может увидеть все файлы и их тип, которые находятся в рабочем каталоги среды, пользователь может их удалять добавлять и др. Также вместо окна директории может находиться панель (быть активной в данный момент, но можно сменить панели используя вкладки) «рабочего пространства», здесь показаны все переменные, которые образуют рабочее пространство в данный сеанс работы.

 

Основные понятия

 

Система MatLAB работает в основном с характерными для нее данными и типами данных поэтому введем ряд определений.

Массив – это данные (объекты) одной природы сгруппированные по одному и тому же характерному признаку.

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

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

Вектор – одномерная матрицы. Без особых указаний со стороны пользователя это матрица-столбец.

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

Строка – набор (массив) символов символьных таблиц компьютера.

 

Типы данных

 

Обобщенный тип double – это общий тип для всех числовых величин. Это тип представления числовой информации в компьютере с использованием плавающей запятой. Для этого представления отводиться 8 байт, в результате десятичные цифры имеют точность в 15 значащих цифр. Наибольшее по модулю число это 1.797693134862316е+308; наименьшее по модуль число – 2.225073858507201е-308. Для простой записи этих чисел системой зарезервированы слова realmax и realmin.

Для понижения точности представления чисел используется тип single. Для представления числа в данном типе необходимо записать в приветствии:

>> x=single(7.7)

x =

7.7000

Данный тип данных использует 4 байта памяти.

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

– int8 – тип данных использующийся для представления целых чисел с использованием 8 байт памяти. Тип имеет знак и может принимать значения от -128 до +127 (т.е ).

– uint8 – тип аналогичный int8, но не имеющий знаки и принимающий значения от 0 до 255 ().

– int16

– uint16

– int32

– uint32

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

>>e=int8(2.2)

e=

>>e=int8(2.8)

e=

Как отмечалось выше MatLAB работает с массивами и даже любое «одиночное число» с любым типом будет рассматриваться системой кА массив на один элемент:

>>e=[e 2]

e=

По умолчанию любая созданная числовая переменная имеет тип double.

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

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


Лекция № 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.

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


 

ЛЕКЦИЯ № 3



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-26 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: