Советы и лайфхаки

Транспонирование матрицы матлаб – … MATLAB

Операторы транспонирования | matlab Tutorial

пример

  • .' является правильным способом транспонировать вектор или матрицу в MATLAB.
  • ' - правильный способ взять комплексно-сопряженную транспозицию (ака эрмитово сопряженную) вектора или матрицы в MATLAB.

Обратите внимание, что для транспонирования .' , перед апострофом существует период . Это согласуется с синтаксисом для других элементарных операций в MATLAB: * умножает матрицы , .* умножает элементы матриц вместе. Обе команды очень похожи, но концептуально очень разные. Как и другие команды MATLAB, эти операторы являются «синтаксическим сахаром», который во время выполнения превращается в «правильный» вызов функции. Подобно тому, как == становится оценкой функции eq , подумайте .' как сокращенное обозначение для transpose . Если бы вы только пишете ' (без точки), вы фактически используете команду ctranspose , которая вычисляет сложную сопряженную транспозицию , которая также известна как эрмитова сопряженная , часто используемая в физике. Пока транспонированный вектор или матрица вещественны, оба оператора производят одинаковый результат. Но как только мы будем заниматься сложными числами , мы неизбежно столкнемся с проблемами, если не будем использовать «правильную» стенографию. Что «правильно» зависит от вашего приложения.

Рассмотрим следующий пример матрицы C содержащей комплексные числа:

>> C = [1i, 2; 3*1i, 4]
C =
   0.0000 + 1.0000i   2.0000 + 0.0000i
   0.0000 + 3.0000i   4.0000 + 0.0000i

Возьмем транспонирование, используя сокращенное выражение .' (с периодом). Выход такой, как ожидалось, транспонированная форма C

>> C.'
ans =
   0.0000 + 1.0000i   0.0000 + 3.0000i
   2.0000 + 0.0000i   4.0000 + 0.0000i

Теперь давайте использовать ' (без периода). Мы видим, что в дополнение к транспозиции комплексные значения также трансформируются в их комплексные сопряжения .

>> C'
ans =
   0.0000 - 1.0000i   0.0000 - 3.0000i
   2.0000 + 0.0000i   4.0000 + 0.0000i

Подводя итог, если вы намереваетесь рассчитать эрмитовское сопряженное, комплексно-сопряженное транспонирование, то используйте ' (без периода). Если вы просто хотите вычислить транспонирование без комплексного сопряжения значений, используйте .' (с периодом).

riptutorial.com

matrix - Matlab транспонирует матрицу для инвертирования графика

Пока неясно, чего вы хотите.

Ваши матрицы U и V являются meshgrids.

U= 1 2 3 4   V= 1 1 1 1
   1 2 3 4      2 2 2 2
   1 2 3 4      3 3 3 3

И у вас есть матрицы A и B, которые соответствуют этим матрицам U и V.

Пример:

A= -1.7 -1.6 -1.5 -1.4      B= -2.7 -2.6 -2.5 -2.4 
   -1.6 -1.5 -1.4 -1.3         -2.6 -2.5 -2.4 -2.3
   -1.5 -1.4 -1.3 -1.2         -2.5 -2.4 -2.3 -2.2

Теперь вы хотите перенести U и V:

U= 1 1 1 1   V= 1 2 3 4
   2 2 2 2      1 2 3 4
   3 3 3 3      1 2 3 4

Итак, теперь, если мы выберем одно место в матрице. например, (1, 3), который будет иметь значение U, связанное (1) с значением V (3), значением A (-1.5) и значением B (-2.5)

Если вы переносите U и V, то местоположение (1,3) будет иметь значения U, V, A, B = (3, 1, -1.5, -2.5). Как вы можете видеть, значения A и B сопоставляются с разными значениями U и V (в основном потому, что вы перенести U и V).

Таким образом, транспонирование A и B будет иметь правильное отображение снова.

РЕДАКТИРОВАТЬ:

Вы в основном рисуете V в Xaxis и A в Yaxis. Это в основном означает, что каждый элемент A связан с элементом из V, чтобы сформировать 2D-координату.

Если теперь вы переносите V, элементы X будут упорядочены по-разному, поэтому вам придется перестроить элементы A, чтобы отображение оставалось неизменным.

Это означает, что вам нужно выполнить одну и ту же операцию с обоими матрицами, чтобы сохранить отображение неизменным, поскольку вы переносите V, вам также необходимо транспонировать A.

Я попросил числовой пример, вы предоставили один из них, неясно. Укажите пример того, что у вас есть (матрицы + сюжет) и то, что вы хотите достичь (матрицы и сюжет). Просто сделайте пример с небольшой матрицей 3x3, и мы увидим, что вы хотите сделать.

qaru.site

matlab - Matlab транспонировать матрицу, чтобы инвертировать участок

До сих пор неясно, что вы хотите.

Ваши матрицы U и V являются meshgrids.

U= 1 2 3 4   V= 1 1 1 1
   1 2 3 4      2 2 2 2
   1 2 3 4      3 3 3 3

И у вас есть матрицы А и В, которые имеют соответствие с этим матрицы U и V.

Пример:

A= -1.7 -1.6 -1.5 -1.4      B= -2.7 -2.6 -2.5 -2.4 
   -1.6 -1.5 -1.4 -1.3         -2.6 -2.5 -2.4 -2.3
   -1.5 -1.4 -1.3 -1.2         -2.5 -2.4 -2.3 -2.2

Теперь вы хотите перенести U и V:

U= 1 1 1 1   V= 1 2 3 4
   2 2 2 2      1 2 3 4
   3 3 3 3      1 2 3 4

Так что теперь, если мы выбираем одно место в матрице. например, (1, 3), что будет иметь значение U, связанное (1) значение V (3), значение (-1.5) и значение B (-2,5)

Если вы транспонирование U и V, местоположение (1,3) будет иметь значения U, V, A, B = (3, 1, -1,5, -2,5). Как вы можете видеть, значения А и В сопоставляются с различными значениями U и V (в основном потому, что вы транспонироваться U и V).

Так перенося А и Б вы будете иметь правильное отображение снова.

РЕДАКТИРОВАТЬ:

Вы в основном черчения V в Xaxis и А в YAxis. Это в основном означает, что каждый элемент связан с элементом V с образованием 2D координат.

Если теперь перенести V, Х элементы будут расположены по-разному, так что вы должны переставить элементы так, отображение остается неизменным.

Это означает, что вам нужно сделать ту же операцию для обеих матриц, чтобы сохранить отображение неизменным, так как вы перенося V также необходимо транспонировать A.

Я попросил числовой пример, ты один при условии, неясно. Обеспечить пример того, что вы в настоящее время (матрицы + участок) и то, что вы хотите достичь (матрицы и сюжет). Просто сделайте пример с маленькой матрицей 3х3, и мы увидим, что вы хотите сделать.

coredump.su

Лекция 12

Лекция № 12

Matlab: Работа с матрицами

  1. Ввод матриц

  2. Индексы элементов матриц

  3. Матричные функции линейной алгебры

  4. Массивы

1. Ввод матриц

Лучший способ начать работу с Matlab — это научиться обращаться с мат­рицами. В Matlab матрица — это прямоугольный массив чисел. Особое значение придается матрицам 1x1, которые являются скалярами, и матрицам, имеющим один столбец или одну строку, — векторам.

Хороший пример матрицы, можно найти на гравюре времен Ренессанса художника и любителя математики Альбрехта Дюрера (рис. 1, а). Это изображение со­держит много математических символов, и если хорошо присмотреться, то в верхнем правом углу можно заметить квадратную матрицу (рис. 1, б). Это матрица из­вестна как магический квадрат и во времена Дюрера считалось, что она обладает магическими свойствами. Она и на самом деле обладает замечательными свойствами, стоящими изучения.

Рис. 1. Гравюра времен Ренессанса художника Альбрехта Дюрера (а), магический квадрат (б)

Матрицы в Matlab можно вводить несколькими способами:

— вводить полный список элементов;

— генерировать матрицы, используя встроенные функции;

— загружать матрицы из внешних файлов;

— создавать матрицы с помощью собственных функций в m-файлах.

1. Ввод матриц как списков элементов. Необходимо следо­вать условиям:

— отделять элементы строки пробелами или запятыми;

— использовать точку с запятой ; для обозначения окончания каждой строки;

— окружать весь список элементов квадратными скобками [ ].

Чтобы ввести матрицу Дюрера запишем:

A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]

Matlab отобразит матрицу:

A =

16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

Особые свойства магического квадрата связаны с различными способами суммирования его элементов. Если найти сумму элементов вдоль какой-либо строки или столбца, или вдоль какой-либо из двух главных диагоналей, то получится одно и тоже число:

sum(A) — сумма элементов столбцов матрицы А.

Matlab выдаст ответ:

ans =

34 34 34 34

Когда выходная переменная не определена, Matlab использует переменную ans, коротко от answer — ответ, для хранения результатов вычисления.

Matlab предпочитает работать со столбцами матрицы, таким образом, лучший способ получить сумму в строках — это транспонировать матрицу, подсчитать сумму в столбцах, а потом транспониро­вать результат. Операция транспонирования обозначается апострофом. Она зеркально отображает матрицу относительно главной диагонали и меняет строки на столбцы. Таким образом:

A'

вызывает:

ans =

16 5 9 4

3 10 6 15

2 11 7 14

13 8 12 1

А выражение:

sum(A')'

вызывает результат вектор-столбец, содержащий суммы в строках:

ans =

34

34

34

34

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

diag(A)

ans =

1 6

1 0

7

1

А функция:

sum(diag(A))

вызывает:

ans = 34

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

fliplr, зеркально отображает матрицу слева направо:

sum(diag(fliplr(A)))

ans = 34

Таким образом, доказано, что матрица на гравюре Дюрера действительно магическая.

Функция magic. Matlab на самом деле обладает встроенной функцией, которая создает магический квадрат почти любого размера. Не удивительно, что эта функция называется magic:

B=magic(4)

B =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

Эта матрица почти та же матрица, что и на гравюре Дюрера, и она имеет все те же магические свойства. Единственное отличие заключается в том, что два средних столбца поменялись местами. Для того чтобы преобразовать B в матрицу Дюрера

A, переставим их местами:

A=B(:,[1 3 2 4])

Это означает, что для каждой строки матрицы B элементы переписываются в порядке 1, 3, 2, 4:

A =

16 3 2 13

5 10 11 8 9 6 7 12 4 15 14 1

Почему Дюрер переупорядочил столбцы, по сравнению с тем, что использует Matlab? Без сомнения, он хотел включить дату гравюры, 1514, в нижнюю часть магического квадрата.

2. Генерирование матриц с использованием встроенных функций. Matlab имеет четыре функции, которые создают основные матрицы:

zeros(m, n)

Матрица размерности с нулевыми элементами

ones(m, n)

Все единицы

rand(m, n)

Равномерное распределение случайных элементов

randn(m, n)

Нормальное распределение случайных элементов

Пример 1.

3. Загрузка матриц из внешних файлов. Команда load считывает двоичные файлы, содержащие матрицы, созданные в Matlab ранее, или текстовые файлы, содержащие численные данные. Тексто­вые файлы должны быть сформированы в виде прямоугольной таблицы чисел, отделенных пробелами, с равным количеством элементов в каждой строке. Например, создадим в Блокноте текстовой файл, содержащий 4 строки:

Сохраним этот файл под именем magik.dat. Тогда команда:

load magik.dat

прочитает этот файл и создаст переменную magik, содержащую матрицу.

4. Создание матриц с помощью собственных функций в m-файлах. Создадим файл, включающий следующие пять строк:

A = [16.0 3.0 2.0 13.0

5.0 10.0 11.0 8.0

9.0 6.0 7.0 12.0

4.0 15.0 14.0 1.0];

Сохраним его под именем magik.m. Тогда выражение

magik

прочитает файл и создаст переменную А, содержащую исходную матрицу.

Объединение — это процесс соединения маленьких матриц для создания боль­ших. Пара квадратных скобок — это оператор объединения. Например, начнем с матрицы А (магического квадрата ) и сформируем:

B = [A A+32; A+48 A+16]

Результатом будет матрица , получаемая соединением четырех подматриц:

2. Индексы элементов матриц

Элемент в строке i и столбце j матрицы А обозначается A(i,j). Например, A(4,2) — это число в четвертой строке и втором столбце. Для нашего магического квадрата A(4,2) =15. Таким образом, можно вычислить сумму элементов в четвер­том столбце матрицы А, набрав:

A(1,4) + A(2,4) + A(3,4) + A(4,4)

получим

ans = 34

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

Так, для магического квадрата, A(8) — это другой способ ссылаться на значение 15, хранящееся в A(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

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:pi/4:pi

что приводит к:

0 0.7854 1.5708 2.3562 3.1416

Индексное выражение, включая двоеточие, относится к части матрицы: A(1:k, j) это первые k элементов j-го столбца матрицы А. Так:

sum(A(1:4,4))

вычисляет сумму четвертой строки. Но есть и лучший способ. Двоеточие, само по себе, обращается ко всем элементам в строке и столбце матрицы, а слово end к последней строке или столбцу. Так:

sum(A(:,end))

вычисляет сумму элементов в последнем столбце матрицы А:

ans = 34

Почему магическая сумма квадрата равна 34? Если целые числа от 1 до 16 отсортированы в четыре группы с равными суммами, эта сумма должна быть:

sum(1:16)/4

которая равна:

ans = 34

3. Матричные функции линейной алгебры

Математические операции, определенные на матрицах являются объектом линейной алгебры (табл. 1).

Таблица 1

Матричные функции линейной алгебры

det(A) — возвращает определитель квадратной матрицы A.

rank(A) — возвращает ранг матрицы A.

trace(A) — возвращает след матрицы A.

inv(A) — возвращает матрицу, обратную квадратной матрицы A.

size(A) — возвращает вектор-строку, содержащую количество строк и столбцов в массиве A.

length(X) — возвращает длину вектора X.

max(A) — возвращает вектор-строку, содержащую значения максимальных элементов в столбцах матрицы А.

min(A) — возвращает вектор-строку, содержащую значения минимальных элементов в столбцах матрицы А.

4. Массивы

Когда мы выходим из мира линейной алгебры, матрицы становятся двумерными численными массивами. Арифметические операции на массивах производятся поэлементно. Это означает, что суммирование и вычитание являются одинако­выми операциями для матриц и массивов, а умножение для них различно. Matlab использует точку, как часть записи для операции умножения массивов.

Список операторов включает в себя:

Если магический квадрат Дюрера умножить на себя по правилам умножения массивов:

A.*A

результатом будет массив, содержащий квадраты целых чисел от 1 до 16:

ans =

256 9 4 169

25 100 121 64

81 36 49 144

16 225 196 1

Операции над массивами полезны для создания таблиц. Пусть n — это вектор-столбец:

n = (0:9)';

Тогда:

pows = [n n.^2 2.^n]

создает таблицу квадратов и степеней двойки:

Элементарные математические функции работают с массивами поэлементно. Так:

x = (1:0.1:2)'

s = [x sin(x)]

создает таблицу значений синуса.

11

studfiles.net

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *