43
Операции суммирования элементов, транспонирования и диагонализации матрицы
Вы возможно уже знаете, что особые свойства магического квадрата связаны с различными способами суммирования его элементов. Если вы берёте сумму элементов вдоль какой-либо строки или столбца, или вдоль какой-либо из двух главных диагоналей, вы всегда получите одно и тоже число. Давайте проверим это, используя MATLAB. Первое утверждение, которое мы проверим -
sum (А)
MATLAB выдаст ответ ans =
34 34 34 34
Когда выходная переменная не определена, MATLAB использует переменную ans, коротко от answer - ответ, для хранения результатов вычисления. Мы подсчитали вектор-строку, содержащую сумму элементов столбцов матрицы А. Действительно, каждый столбец имеет одинаковую сумму, магическую сумму, равную 34.
А как насчет сумм в строках? Лучший способ получить сумму в строках - это транспонировать нашу матрицу, подсчитать сумму в столбцах, а потом транспонировать результат. Операция транспонирования обозначается апострофом или одинарной кавычкой. Она зеркально отображает матрицу относительно главной диагонали и меняет строки на столбцы. Таким образом
sum(A') '
вызывает результат вектор-столбец, содержащий суммы в строках ans = 34
34
34
34
Сумму элементов на главной диагонали можно легко получить с помощью функции diag, которая выбирает эту диагональ.
diag (A) ans = 16 10 7 1
А функция
44
sum (diag (А) ) вызывает ans = 34
Другая диагональ, называемая антидиагональю, не так важна математически, поэтому MATLAB не имеет специальной функции для неё. Но функция, которая вначале предполагалась для использования в графике, fliplr, зеркально отображает матрицу слева направо.
sum(diag(fliplr(A))) ans = 34
Индексы
Элемент в строке i и столбце j матрицы А обозначается A(i,j). Например, А(4,2) - это число в четвертой строке и втором столбце. Для нашего магического квадрата А(4,2) = 15. Таким образом, можно вычислить сумму элементов в четвертом столбце матрицы А, набрав
A(1,4) + А(2,4) + А(3,4) + А(4,4)
получим ans = 34
Однако это не самый лучший способ суммирования отдельной строки.
Также возможно обращаться к элементам матрицы через один индекс, A(k). Это обычный способ ссылаться на строки и столбцы матрицы. Но его можно использовать только с двумерными матрицами. В этом случае массив рассматривается как длинный вектор, сформированный из столбцов исходной матрицы.
Так, для нашего магического квадрата, А(8) - это другой способ ссылаться на значение 15, хранящееся в А(4,2).
Если вы пытаетесь использовать значение элемента вне матрицы, MATLAB выдаст ошибку:
t=A(4,5)
??? Index exceeds matrix dimensions.
С другой стороны, если вы сохраняете значение вне матрицы, то размер матрицы увеличивается.
X=A; X(4,5) = 17 X =
16 3 2 13 0
5 10 11 8 0
45
9 6 7 12 0
4 15 14 1 17
Оператор двоеточия
Двоеточие : - это один из наиболее важных операторов MATLAB. Он проявляется в различных формах. Выражение
1:10
- это вектор-строка, содержащая целые числа от 1 до 10
123456789 10
Для получения обратного интервала, опишем приращение. Например
100:-7:50
что дает
100 93 86 79 72 65 58 51
Или
0:pi/4:pi
что даст
О 0.7854 1.5708 2.3562 3.1416
Индексное выражение, включая двоеточие, относится к части матрицы.
A(1:k, j)
это первые k элементов j -го столбца матрицы А. Так
sum(A(l:4,4))
вычисляет сумму четвертой строки. Но есть и лучший способ. Двоеточие, само по себе, обращается ко всем элементам в строке и столбце матрицы, а слово end — к последней строке или столбцу. Так
sum (А (:, end) )
вычисляет сумму элементов в последнем столбце матрицы А ans = 34
Выражения
Как и большинство других языков программирования, MATLAB предоставляет возможность использования математических выражений, но в отличие от многих из них, эти выражения в MATLAB включают матрицы. Основные составляющие выражения:
переменные
46
числа
операторы
функции
Переменные
В MATLAB нет необходимости в определении типа переменных или размерности. Когда MATLAB встречает новое имя переменной, он автоматически создает переменную и выделяет соответствующий объем памяти. Если переменная уже существует, MATLAB изменяет ее состав и если это необходимо выделяет дополнительную память. Например,
num_students = 25
создает матрицу 1x1 с именем num_students и сохраняет значение 25 в ее единственном элементе.
Имена переменных состоят из букв, цифр или символов подчеркивания. MATLAB использует только первые 31 символ имени переменной. MATLAB чувствителен к регистрам, он различает заглавные и строчные буквы. Поэтому А и а - не одна и та же переменная. Чтобы увидеть матрицу связанную с переменной, просто введите название переменной.
Числа
MATLAB использует принятую десятичную систему счисления, с необязательной десятичной точкой и знаками плюс-минус для чисел. Научная система счисления использует букву е для определения множителя степени десяти. Мнимые числа используют i или j как суффикс. Некоторые примеры правильных чисел приведены ниже
3 -99 0.0001
9.6397238 1.60210e-20 6.02252e23
1i -3.14159j 3e5i
Числа с плавающей точкой обладают ограниченной точностью - приблизительно 16 значащих цифр и ограниченным диапазоном – приблизительно от 10-308 до 10308
Операторы
Выражения используют обычные арифметические операции и правила старшинства.
+ сложение
– вычитание * умножение / деление
47
Л степень ' комплексно сопряженное транспонирование
() определение порядка вычисления 2.3 Специальные символы
[ ] – квадратные скобки используют для создания матриц и векторов;
– пробел служит для разделения элементов матриц;
, – запятая применяется для разделения элементов матриц и операторов в строке ввода;
; – точка с запятой отделяет строки матриц, а точка с запятой в конце оператора (команды) отменяет вывод результата на экран;
: – двоеточие используется для указания диапазона (интервала изменения величины) и в качестве знака групповой операции над элементами матриц;
% – знак процента обозначает начало комментария; ! – отмечает начало команды DOS
’ – апостроф указывает на символьные строки. 2.4 Функции
MATLAB предоставляет большое количество элементарных математических функций, таких как abs, sqrt, exp, sin. Вычисление квадратного корня или логарифма отрицательного числа не является ошибкой: в этом случае результатом является соответствующее комплексное число. MATLAB также предоставляет и более сложные функции, включая Гамма функцию и функции Бесселя. Большинство из этих функций имеют комплексные аргументы. Чтобы вывести список всех элементарных математических функций, наберите
help elfun
Для вывода более сложных математических и матричных функций, наберите
help specfun help elmat
соответственно.
Некоторые функции, такие как sqrt и sin, - встроенные. Они являются частью MATLAB, поэтому они очень эффективны, но их вычислительные детали трудно доступны. В то время как другие функции, такие как gamma и sink, реализованы в М-файлах. Поэтому вы можете легко увидеть их код и, в случае необходимости, даже модифицировать его.