"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)

В = а
В = 14 32 50
х;
MATLAB 5.x. Вычисления, визуализация, программирование 35
Здесь мы для разнообразия задали вектор-столбец х не с помощью операции вертикальной конкатенации [ 1; 2; 3 ], а использовали операцию транспонирования и получили из вектор-строки [1,2,3] нужный нам вектор-столбец.
Традиционный для операции деления знак / (а также знак \) закреплен в системе MATLAB за решением довольно сложной задачи линейной алгебры -нахождением корней систем линейных уравнений] Например, если требуется решить систему линейных уравнений
Ay = b
где А - заданная квадратная матрица размера N х N, b - заданный вектор-столбец длины N, то для нахождения неизвестного вектор-столбца у (неизвестны его элементы) достаточно вычислить выражение а\Ь. Приведем пример.
А = [1,-2,3,-1;2,3,-4,4;3,1,-2,-2/1,-3,7,б]; b = [б;-7;9;-7]; у = а \ Ь
У =
2.0000 -1.0000
0 -2.0000
Операцию, обозначаемую знаком /, рассмотрим позже в специальной главе, посвященной решению задач линейной алгебры.
Типичные задачи аналитической геометрии в пространстве, связанные с нахождением длин векторов и углов между ними, с вычислением скалярного и векторного произведений, легко решаются разнообразными средствами системы MATLAB. Например, для нахождения векторного произведения предназначена специальная функция cross:
и = [ 1 2 3]; v = [ 3 2 1]; cross( u, v ) ans =
-4 8 -4
Скалярное произведение векторов вычисляется с помощью функции общего назначения sum, вычисляющей сумму всех элементов векторов (для матриц эта функция вычисляет суммы для всех столбцов). Скалярное произведение, как известно, равно сумме произведений соответствующих координат (элементов) векторов. Таким образом, выражение
sum(u .* v ) ans = 10
36
Глава 1. Числовые массивы в системе MATLAB
действительно вычисляет скалярное произведение двух пространственных векторов (имеющих по три координаты) и и v, которое равно 10.
Длина вектора вычисляется с помощью скалярного произведения и функции извлечения квадратного корня:
lenl = sqrt( sum( u .* u ) );
Угол между векторами легко вычисляется на основе определения скалярного произведения, гласящего, что оно равно произведению длин векторов на косинус угла между ними. Отсюда находим выражение для вычисления угла между ранее заданными векторами и и v:
lenl = sqrt(sum(u .* u)); Ien2 = sqrt(sum(v .* v)); phi = acos ( sum(u .* v) / ( lenl * Ien2 ) ) phi = 0.7752
Ранее рассмотренные для скаляров операции отношения и логические операции выполняются в случае массивов поэлементно. Оба операнда должны быть одинаковых размеров, при этом операция возвращает результат такого же размера. В случае, когда один из операндов скаляр, производится его предварительное расширение, смысл которого уже был пояснен на примере арифметических операций.
Для иллюстрации выполним над матрицами
А = [1 1 1; 2 2 2; 3 3 3]; В = [0 0 0; 7 7 7; 1 2 3]; операцию меньше или равно. Результат этой операции показан на рис. 1.18:
•> MATLAB Command Window
File Edit Window Help
I в tg
» A<=B
aiis =
0 0 0
1 ] 1
0 0 1
Рисунок 1.18
где каждый нуль означает «ложь» для данной позиции внутри матриц, а единица означает «истину». Полученная матрица показывает (своими единичными элементами), в каких позициях элементы матрицы А на самом деле меньше или равны соответствующим элементам матрицы В.
MATLAB 5.x. Вычисления, визуализация, программирование 37
Работу логических операций над массивами проиллюстрируем на примере операции «НЕ». Пусть задан вектор
v = [ 1 9 9 9 0 ] ;
Для этого вектора результат операции «НЕ», то есть ~v, равен
ans =
0 0 0 0 1
Выше при изучении вычислений с вещественными скалярами мы рассматривали работу логической функции хог («исключающее ИЛИ»). Эта функция работает и с массивами одинаковых размеров, поэлементно реализуя операцию «исключающее ИЛИ». Напоминаем, что каждый элемент трактуется как истинный, если он не равен нулю, и как ложный в случае его равенства нулю. Покажем результат работы этой функции над ранее заданными матрицами А и В:
хог( А, В ) ans =
1 1 1 0 0 0
0 0 0
Другими логическими функциями (помимо функции хог) являются функции all и any. Функция all в случае векторов возвращает 1 («истина»), если все элементы вектора не равны нулю (истинны), и возвращает 0, когда хотя-бы один элемент вектора ненулевой. Функция any действует противоположным образом.
В случае матриц обе эти функции работают с их столбцами, возвращая для каждого столбца результат по описанной выше схеме. Например,