Математика за компьютером: Freemat. Векторы и матрицы
Freemat, как и MATLAB, «заточен» на работу с матрицами. Это означает, что все операции выполняются максимально быстро, и их запись не вызывает у пользователя лишних проблем.
Начнём с вектора. Чтобы ввести его элементы, достаточно перечислить их в квадратных скобках после имени переменной. Если элементы разделяются пробелом или запятой, получится вектор-строка, если точкой с запятой — вектор-столбец. Матрица точно также задаётся с помощью квадратных скобок, элементы строки разделяются пробелом или запятой, точка с запятой означает переход к следующей строке. Чтобы вызвать определённый элемент матрицы, нужно указать его имя и в круглых скобках через запятую перечислить индексы.
Диапазон значений можно задать функцией linspace(a,b,n), где a и b — границы интервала, n — число точек. Если параметр n не указан, по умолчанию число элементов 100. Можно, также, воспользоваться записью a:h:b.
Матрицы можно формировать из уже существующих. Для этого достаточно записать их имена в квадратных скобках. Правила здесь те же, что для скалярных величин: разделение имён пробелами или запятыми приведёт к горизонтальному размещению элементов массива, точкой с запятой — к вертикальному.
Двоеточие на месте индекса означает все элементы из данной строки или столбца. Т.е. выражение A(:,m) выведет столбец m, а A(n,:) — строку n. Для удаления какой-либо строки (или столбца) используется выражение A(n,:)=[]. Выделить область матрицы можно с помощью выражения A(a1:a2,b1:b2), где величины в скобках означаю начало и конец интервала для строк и столбцов соответственно.
Ещё несколько функций для создания матриц.eye(n) — формирует единичную матрицу размера n x n.
zeros(n1,n2…nM) — массив нулей размером n1 x n2 x … nM.
ones(n1, n2…nM) — то же, что zeros, только массив заполнен единицами.
Операции сложения, вычитания, умножения матриц и векторов обозначаются так же, как операции над обычными числами. Это относится и к умножению матрицы на скаляр. Деление может осуществляться правым слешем (левая матрица делится на правую) или левым (правая матрица делится на левую). Для поэлементного умножения, деления или возведения в степень перед знаком действия ставится точка.
Для транспонирования матрицы достаточно добавить к её имени апостроф.det(A) — вычисляет определитель квадратной матрицы A.
inv(A) — вычисляет матрицу, обратную к A.
cond(A) — число обусловленности матрицы A.
norm(A,p) — вычисляет норму матрицы A, определяемую параметром p.
size(A) — если после имени A указать 1, функция вернёт число строк, 2 — столбцов и т.д.
min(A) — наименьшие значения в столбцах матрицы A.
rref(A) — приводит матрицу A методом Гаусса к диагональному виду.
Как вводить векторы и матрицы в MATLAB
Подумайте о том, как вы используете данные при работе с математикой: данные отображаются в виде списка чисел или текста. MATLAB использует аналогичную точку зрения. Он также работает со списками чисел и текста, которые вы создаете различными способами.
Ввод значений в квадратных скобках
Левая квадратная скобка [ открывает список чисел или текста. Правая квадратная скобка ] завершает список. Каждая запись в списке отделяется запятой (,). Чтобы попробовать эту технику самостоятельно, откройте MATLAB, введите b=[5, 6] в командном окне и нажмите Enter. Вы видите
б = 5 6Информация хранится в виде списка из двух чисел. Каждое число рассматривается как отдельное значение. Дважды щелкните b в окне Workspace, и вы увидите две отдельные записи. Обратите внимание, что в окне Workspace b отображается в виде списка 1 x 2, в котором записи располагаются горизонтально.
Вы можете ввести в формате compact и нажать Enter, чтобы сэкономить место на дисплее. Если вы хотите освободить место в окне команд для ввода дополнительных команд, введите clc и нажмите Enter.
Начало новой строки или строки с точки с запятой
Запятая создает отдельные записи в одной строке. Вы используете точку с запятой (;) для создания новых строк. Чтобы попробовать эту технику самостоятельно, введите e=[5; 6] в командном окне и нажмите Enter. Вы видите
е = 5 6
Информация хранится в виде списка из двух чисел. Однако расположение чисел отличается. Дважды щелкните e в окне Workspace, и вы увидите две отдельные записи. Обратите внимание, что в окне Workspace e отображается в виде списка 2 x 1, в котором элементы располагаются вертикально.
Разделение значений запятой или точкой с запятой
Можно создать матрицу, комбинируя запятые и точки с запятой. Запятые разделяют записи в одной строке, а точки с запятой создают новые строки. Чтобы убедиться в этом, введите a=[1, 2; 3, 4] в командном окне и нажмите Enter. Вы видите
а = 1 2 3 4
Нахождение размеров матриц по столбцу Size
Существует более простой способ получения размера числового списка. Щелкните правой кнопкой мыши список столбцов окна Workspace и выберите Size из контекстного меню.
Вам также может быть полезно отображать минимальные и максимальные значения для каждой записи. Эта информация пригодится при работе с большими векторами или матрицами, где минимальные и максимальные значения не очевидны. Чтобы получить эту информацию, выберите Columns→Min, а затем выберите Columns→Max.
Создание диапазона значений с использованием двоеточия
Вводить каждое значение в списке вручную было бы трудоемко и чревато ошибками, потому что в конце концов вам это надоест. К счастью, вы можете использовать двоеточие (:) для ввода диапазонов чисел в MATLAB. Число слева от двоеточия указывает начало диапазона, а число справа от двоеточия указывает конец диапазона.
Чтобы убедиться в этом, введите g=[5:10] и нажмите Enter. Вы видите
г = 5 6 7 8 9 10
Создание диапазона значений с помощью linspace()
Проблема с использованием двоеточия для создания диапазонов. MATLAB предполагает, что шаг равен 1. Однако вы можете захотеть, чтобы числа были разделены другим значением. Например, вы можете захотеть увидеть 11 значений в диапазоне от 5 до 10, а не только 6.
Функция linspace() решает эту проблему. Вы указываете начальное значение, конечное значение и количество значений, которые вы хотите видеть между начальным и конечным значением. Чтобы увидеть, как работает linspace(), введите
г = Столбцы с 1 по 5 5.0000 5.5000 6.0000 6.5000 7.0000 Столбцы с 6 по 10 7,5000 8,0000 8,5000 9,0000 9,5000 Колонка 11 10.0000
В данном случае значение шага равно 0,5. Каждое число на 0,5 больше предыдущего, и на выходе 11 значений. Диапазон составляет от 5 до 10. Короче говоря, использование linspace() немного более гибко, чем использование двоеточия, но использование двоеточия требует меньшего набора текста и его легче запомнить.
Добавление шага к методу двоеточия
Оказывается, можно указать шаг и при использовании метода двоеточия. Однако в этом случае вы добавляете шаг между началом и концом диапазона при определении диапазона. Итак, вы вводите начальный номер, шаг и конечный номер, разделенные двоеточиями. Чтобы попробовать этот метод самостоятельно, введите g=[5:0.5:10] и нажмите Enter. Вы видите
г = Столбцы с 1 по 5 5.0000 5.5000 6.0000 6.5000 7.0000 Столбцы с 6 по 10 7,5000 8,0000 8,5000 9.0000 9.5000 Колонка 11 10.0000
Точно такой же вывод, как и в примере с linspace(). Однако при использовании этого метода вы указываете шаг напрямую, поэтому вы не контролируете количество значений, которые вы получаете на выходе. При использовании подхода linspace() вы указываете количество значений, которые вы получаете в качестве вывода, но MATLAB вычисляет значение шага за вас.
Транспонирование матриц с апострофом
Использование двоеточия создает векторы-строки. Однако иногда вместо этого вам нужен вектор-столбец. Чтобы создать вектор-столбец, вы заканчиваете ввод апострофом. Чтобы увидеть, как это работает, введите
ч = 5.0000 5.5000 6.0000 6.5000 7.0000 7.5000 8.0000 8.5000 9.0000 9.5000 10.0000
Когда вы посмотрите в окно Workspace, вы увидите, что g — это вектор 1 x 11, а h — вектор 11 x 1. Первая запись представляет собой вектор-строку, а вторая — вектор-столбец.
Вы также можете транспонировать матрицы. Строки и столбцы меняют положение. Например, ранее вы набрали a=[1,2;3,4], что дало
а = 1 2 3 4
Чтобы увидеть, как эта матрица выглядит транспонированной, введите i=[1,2;3,4]’ и нажмите Enter. Вы видите
я = 1 3 2 4
Начало работы (Начало работы с MATLAB)
Начало работы (Начало работы с MATLAB)Начало работы с MATLAB | Поиск  Справочная служба |
Матрицы и магические квадраты
Лучший способ начать работу с MATLAB — научиться работать с матрицами. В этом разделе показано, как это сделать. В MATLAB матрица представляет собой прямоугольный массив чисел. Особое значение иногда придается матрицам 1 на 1, которые являются скалярами, и матрицам только с одной строкой или столбцом, которые являются векторами. В MATLAB есть и другие способы хранения как числовых, так и нечисловых данных, но вначале обычно лучше думать обо всем как о матрице. Операции в MATLAB максимально естественны. Там, где другие языки программирования работают с числами по одному, MATLAB позволяет быстро и легко работать с целыми матрицами.
Ввод матриц
Вы можете вводить матрицы в MATLAB несколькими различными способами.- Введите явный список элементов.
- Загрузить матрицы из внешних файлов данных.
- Создание матриц с помощью встроенных функций.
- Создавайте матрицы со своими функциями в М-файлах.
- Разделяйте элементы строки пробелами или запятыми.
- Используйте точку с запятой,
;
, чтобы указать конец каждой строки. - Заключите весь список элементов в квадратные скобки,
[ ]
.
А = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]MATLAB отображает только что введенную матрицу,
А =Это точно соответствует цифрам на гравюре. После того, как вы ввели матрицу, она автоматически запоминается в рабочей области MATLAB. Вы можете называть его просто16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
A
. Теперь, когда у вас есть A
в рабочей области, взгляните, что делает его таким интересным. Почему это магия?сумма, транспонирование и диагностика
Вы, наверное, уже знаете, что особые свойства магического квадрата связаны с различными способами суммирования его элементов. Если вы возьмете сумму по любой строке или столбцу, или по любой из двух главных диагоналей, вы всегда получите одно и то же число. Давайте проверим это с помощью MATLAB. Первое утверждение, которое нужно попробовать, этосум(А)MATLAB отвечает
ответ = 34 34 34 34Когда вы не указываете выходную переменную, MATLAB использует переменную
и
, сокращение от ответ
, чтобы сохранить результаты вычисления. Вы вычислили вектор-строку, содержащую суммы столбцов A
. Конечно же, в каждом из столбцов есть одна и та же сумма, магическая
сумма, 34. Как насчет сумм строк? MATLAB предпочитает работать со столбцами матрицы, поэтому самый простой способ получить суммы строк — транспонировать матрицу, вычислить суммы столбцов транспонирования, а затем транспонировать результат. Операция транспонирования обозначается апострофом или одинарной кавычкой, '
. Он переворачивает матрицу относительно ее главной диагонали и превращает вектор-строку в вектор-столбец. ТакА'производит
ответ = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1И
сумма(А')'создает вектор-столбец, содержащий суммы строк
ответ = 34 34 34 34Сумма элементов на главной диагонали легко получается с помощью числа
.diag
, которая выбирает эту диагональ.диаг.(А)производит
ответ = 16 10 7 1и
сумма(диаг(А))производит
ответ = 34Другая диагональ, так называемая антидиагональ , не так важна математически, поэтому в MATLAB нет для нее готовой функции. Но функция
fliplr
, изначально предназначенная для использования в графике, переворачивает матрицу слева направо.сумма(diag(fliplr(A))) ответ = 34Вы убедились, что матрица на гравюре Дюрера действительно является магическим квадратом, и при этом попробовали несколько матричных операций MATLAB. Следующие разделы продолжают использовать эту матрицу, чтобы проиллюстрировать дополнительные возможности MATLAB.
подписки
Элемент в строке i
и столбце j
числа A
обозначается как A(i,j)
. Например, A(4,2)
— это число в четвертой строке и втором столбце. Для нашего магического квадрата А(4,2)
это 15
. Таким образом, можно вычислить сумму элементов в четвертом столбце A
, набравА(1,4) + А(2,4) + А(3,4) + А(4,4)Это производит
ответ = 34но это не самый элегантный способ суммирования одного столбца. Также можно обращаться к элементам матрицы с одним нижним индексом,
A(k)
. Это обычный способ ссылки на векторы строк и столбцов. Но это также может применяться к полностью двумерной матрице, и в этом случае массив рассматривается как один длинный вектор-столбец, сформированный из столбцов исходной матрицы. Итак, для нашего магического квадрата A(8)
— это еще один способ обращения к значению 15
, хранящемуся в A(4,2)
.
Если вы попытаетесь использовать значение элемента вне матрицы, произойдет ошибка:т = А(4,5) Индекс превышает размерность матрицы.С другой стороны, если вы сохраняете значение в элементе за пределами матрицы, размер увеличивается, чтобы вместить новичка:
Х = А; Х(4,5) = 17 Х = 16 3 2 13 0 5 10 11 8 0 9 6 7 12 0 4 15 14 1 17
Оператор двоеточия
Двоеточие, :
, является одним из наиболее важных операторов MATLAB. Встречается в нескольких различных формах. Выражение1:10представляет собой вектор-строку, содержащий целые числа от 1 до 10
1 2 3 4 5 6 7 8 9 10Чтобы получить неединичный интервал, укажите приращение. Например
100:-7:50является
100 93 86 79 72 65 58 51и
0:пи/4:пиявляется
0 0,7854 1,5708 2,3562 3,1416Выражения нижнего индекса, включающие двоеточие, относятся к частям матрицы.
А(1:к,к)это первые
k
элементов j
-го столбца A
. Таксумма(А(1:4,4))вычисляет сумму четвертого столбца. Но есть лучший способ. Двоеточие само по себе относится к всем элементам в строке или столбце матрицы, а ключевое слово
конец
относится к 9 элементам.0166 последняя строка или столбец. Таксумма(А(:,конец))вычисляет сумму элементов в последнем столбце
A
.ответ = 34Почему магическая сумма для квадрата 4 на 4 равна 34? Если целые числа от 1 до 16 разбиты на четыре группы с одинаковыми суммами, эта сумма должна быть
сумма(1:16)/4что, конечно же,
ответ = 34
Если у вас есть доступ к Symbolic Math Toolbox, вы может обнаружить, что магия сумма для n-by-n магии квадрат ( n 3 + n )/2.
Волшебная функция
MATLAB на самом деле имеет встроенную функцию, которая создает магические квадраты практически любого размера. Неудивительно, что эта функция называется magic
.B = магия(4) Б = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1Эта матрица почти такая же, как на гравюре Дюрера, и обладает всеми теми же «магическими» свойствами; единственное отличие состоит в том, что два средних столбца меняются местами. Чтобы сделать это
B
в A
Дюрера, поменяйте местами две средние колонки.А = В(:,[1 3 2 4])Это говорит «для каждой из строк матрицы
B
переупорядочить элементы в порядке 1, 3, 2, 4». Он производитА = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1Зачем Дюреру утруждать себя перестановкой столбцов, когда он мог бы использовать упорядочение MATLAB? Без сомнения, он хотел поставить дату гравюры, 1514 год, внизу своего магического квадрата.