Умножение строки матрицы на число: Действия над матрицами /qualihelpy

Содержание

Факторный анализ (Иберла К.)

Факторный анализ (Иберла К.)
  

Иберла К. Факторный анализ. Пер. с нем. В. М. Ивановой. М.: Статистика, 1980 – 398 стр.

Книга посвящена многомерному статистическому анализу. В ней в комплексе рассматриваются факторный, компонентный, дискриминантный и другие виды анализа. Представлены современные методы оценки весовых коэффициентов, интерпретация факторных решений. Задачи решаются применительно к современным ЭВМ.

Для ученых и практиков, занимающихся статистическим исследованием экономических явлений, а также для аспирантов и студентов старших курсов вузов.



Оглавление

ПРЕДИСЛОВИЕ К РУССКОМУ ИЗДАНИЮ
ПРЕДИСЛОВИЕ КО ВТОРОМУ ИЗДАНИЮ
1. ВВЕДЕНИЕ
1.2. ИСТОРИЯ РАЗВИТИЯ ФАКТОРНОГО АНАЛИЗА
1.3. КОРРЕЛЯЦИЯ И РЕГРЕССИЯ
1.4. МАТРИЦЫ, ВЕКТОРЫ И ОПРЕДЕЛИТЕЛИ
Умножение матрицы на скалярную величину.
Внутреннее (скалярное) произведение двух векторов.
Умножение матриц.
Обратная матрица.
Определители.
Линейная зависимость и ранг матрицы.
Решение линейных уравнений и обращение матриц.
2. ОБЗОР ФАКТОРНОГО АНАЛИЗА
2.1. ДВА ВВОДНЫХ ПРИМЕРА
2.2. ОСНОВНЫЕ УРАВНЕНИЯ И КОНЦЕПЦИИ В АЛГЕБРАИЧЕСКОЙ ФОРМЕ
2.2.2. Классификация факторов и связь между отдельными видами факторов
2.2.3. Схема решения и основные проблемы факторного анализа
2.2.4. Наглядное пояснение с помощью числового примера
2.3. ГЕОМЕТРИЧЕСКАЯ ИНТЕРПРЕТАЦИЯ МОДЕЛИ ФАКТОРНОГО АНАЛИЗА
2.3.2. Пространство общих факторов и полное факторное пространство
2.3.3. Геометрическая интерпретация выделения факторов и метод вращения
2.4. ЧАСТНЫЕ КОЭФФИЦИЕНТЫ КОРРЕЛЯЦИИ КАК ИСХОДНЫЕ ЭЛЕМЕНТЫ ФАКТОРНОГО АНАЛИЗА
2. 5. МЕСТО ФАКТОРНОГО АНАЛИЗА СРЕДИ МНОГОМЕРНЫХ СТАТИСТИЧЕСКИХ МЕТОДОВ
Множественный регрессионный анализ.
Дисперсионный анализ.
Дискриминантный анализ.
Метод главных компонент.
2.6. ВЫВОДЫ И ДАЛЬНЕЙШЕЕ РАСЧЛЕНЕНИЕ МАТЕРИАЛА
3. ПРОБЛЕМА ФАКТОРОВ
3.1. МЕТОД ГЛАВНЫХ КОМПОНЕНТ
3.1.2. Алгебраическое решение
3.1.3. Процедура вычисления
Вычисление главных факторов с помощью ЭВМ.
3.1.4. Примеры
3.2. ЦЕНТРОИДНЫЙ МЕТОД
3.2.1. Происхождение названия центроидного метода
3.2.2. Вычислительная процедура
3.3. КРИТЕРИИ ОЦЕНКИ ЧИСЛА ФАКТОРОВ, ПОДЛЕЖАЩИХ ВЫДЕЛЕНИЮ
3.3.1. Изображение долей дисперсии
3.3.3. Критерий значимости в компонентном анализе
3.3.4. Критерий значимости при использовании модели факторного анализа
3.3.5. Другие критерии оценки числа факторов
3.3.6. Рекомендации по определению числа факторов
3.4. МЕТОДЫ ВЫДЕЛЕНИЯ ФАКТОРОВ, ПОЯВИВШИЕСЯ ПЕРВЫМИ, НО МАЛО УПОТРЕБЛЯЕМЫЕ В НАСТОЯЩЕЕ ВРЕМЯ
3.4.2. Однофакторный метод
3.
4.3. Двухфакторный метод Спирмэна
3.4.4. Бифакторный метод
3.4.5. Групповой метод
3.5. НОВЫЕ МЕТОДЫ ФАКТОРНОГО РЕШЕНИЯ
3.5.1. Оценка факторных нагрузок методом максимума правдоподобия
3.5.2. Канонический факторный анализ
3.5.3. Альфа-факторный анализ
3.6. ЭКВИВАЛЕНТНОСТЬ РАЗЛИЧНЫХ МЕТОДОВ ВЫДЕЛЕНИЯ ФАКТОРОВ
3.7. РЕКОМЕНДАЦИИ К РЕШЕНИЮ ФАКТОРНОЙ ПРОБЛЕМЫ
4. ПРОБЛЕМА ОБЩНОСТИ
4.2. СПОСОБЫ ВЫЧИСЛЕНИЯ ОЦЕНОК ОБЩНОСТЕЙ
4.2.2. Использование квадрата коэффициента множественной корреляции
4.2.3. Итеративная процедура
4.2.4. Обзор других способов вычисления оценок общностей
4.3. СРАВНЕНИЕ РАЗЛИЧНЫХ СПОСОБОВ ОЦЕНКИ ОБЩНОСТИ НА ОДНОМ ПРИМЕРЕ
5. ПРОБЛЕМА ВРАЩЕНИЯ
5.1. ПОЛУЧЕНИЕ ОРТОГОНАЛЬНОГО И КОСОУГОЛЬНОГО РЕШЕНИЯ ПРИ ВРАЩЕНИИ В ПРОСТРАНСТВЕ ОБЩИХ ФАКТОРОВ
5.2. ПОНЯТИЕ ПРОСТОЙ СТРУКТУРЫ
5.3. ИТЕРАТИВНАЯ ПРОЦЕДУРА ОСУЩЕСТВЛЕНИЯ ВРАЩЕНИЯ ПРИ ПОИСКЕ ПРОСТОЙ СТРУКТУРЫ
5.4. ВЗАИМОСВЯЗЬ МЕЖДУ РАЗЛИЧНЫМИ МАТРИЦАМИ, ПРИМЕНЯЕМЫМИ ПРИ РЕШЕНИИ ПРОБЛЕМЫ ВРАЩЕНИЯ
5. 5. АНАЛИТИЧЕСКИЕ МЕТОДЫ ВРАЩЕНИЯ ПРИ ПОИСКЕ ПРОСТОЙ СТРУКТУРЫ
5.5.1. Ортогональный метод
5.5.2. Косоугольный метод
5.6. ПРИМЕР ВРАЩЕНИЯ
5.7. ДРУГИЕ МЕТОДЫ ВРАЩЕНИЯ И КРИТЕРИИ
5.8. ФАКТОРЫ ВТОРОГО И БОЛЕЕ ВЫСОКОГО ПОРЯДКОВ
5.9. ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ
6. ИЗМЕРЕНИЕ ФАКТОРОВ
6.1. ИЗМЕРЕНИЕ ГЛАВНЫХ КОМПОНЕНТ
6.2. ОЦЕНКА ЗНАЧЕНИИ ФАКТОРОВ С ПОМОЩЬЮ МНОЖЕСТВЕННОГО РЕГРЕССИОННОГО АНАЛИЗА
6.3. КРИТЕРИИ ТОЧНОСТИ ОЦЕНКИ ЗНАЧЕНИИ ФАКТОРА
6.4. ДРУГИЕ МЕТОДЫ ОЦЕНКИ ЗНАЧЕНИЙ ФАКТОРА
7. ПРОВЕРКА МЕТОДОВ ФАКТОРНОГО АНАЛИЗА НА РАЗЛИЧНЫХ МОДЕЛЯХ
7.1. ДВА ПРИМЕРА ИЗ ЛИТЕРАТУРЫ
7.1.1. Задача о ящиках (бокс-проблема Тэрстоуна)
7.1.2. Задача о мячах Каттелла и Дикмана
7.2. ДРУГИЕ ПРИМЕРЫ МОДЕЛЕЙ
7.2.1. Модель, сконструированная по результатам измерения кровяного давления
7.2.2. Модель с числом жителей
7.3. МОДЕЛИРОВАНИЕ НА ЭВМ
7.3.2. Точность факторного анализа с неравными нагрузками
7.3.3. Точность результатов факторного анализа при альтернативных данных
7. 3.4. Сравнение точности оценивания в факторном анализе с оцениванием в регрессионном анализе
7.4. ОСНОВНЫЕ ВЫВОДЫ ПО РЕЗУЛЬТАТАМ МОДЕЛИРОВАНИЯ
8. ЧАСТНЫЕ ПРОБЛЕМЫ ФАКТОРНОГО АНАЛИЗА
8.1. РАЗЛИЧНЫЕ ТЕХНИКИ ПРОВЕДЕНИЯ ФАКТОРНОГО АНАЛИЗА В ЗАВИСИМОСТИ ОТ ВИДА МАТРИЦЫ ИСХОДНЫХ ДАННЫХ
8.2. ПРИМЕНЕНИЕ ФАКТОРНОГО АНАЛИЗА К ДАННЫМ, ЯВЛЯЮЩИМСЯ РЕЗУЛЬТАТАМИ ИЗМЕРЕНИЯ КАЧЕСТВЕННЫХ ПРИЗНАКОВ
8.3. ПРЕОБРАЗОВАНИЕ МАТРИЦЫ ИСХОДНЫХ ДАННЫХ
8.4. ОБЗОР МЕТОДОВ, ПРИМЕНЯЕМЫХ НАРЯДУ С ФАКТОРНЫМ АНАЛИЗОМ
8.4.1. Кластерный анализ
8.4.2. Анализ образов
8.4.3. Анализ латентных структур
8.5. ПРОБЛЕМА НЕОДНОРОДНОСТИ
8.6. ПРОБЛЕМА КЛАССИФИКАЦИИ
8.6.2. Другие методы классификации
8.7. ПРОВЕРКА ТОЧНОСТИ ФАКТОРНОГО РЕШЕНИЯ ПО МАТРИЦЕ ИСХОДНЫХ ДАННЫХ
8.8. ОБРАБОТКА ДАННЫХ НА ЭВМ И ФАКТОРНЫЙ АНАЛИЗ
8.8.2. Влияние ЭВМ на развитие факторного анализа
8.8.3. Пакеты программ факторного анализа
8.8.4. Rotoplot-программа
8.9. ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ
ПРИЛОЖЕНИЕ
БИБЛИОГРАФИЯ
ПРИЛОЖЕНИЕ К РУССКОМУ ИЗДАНИЮ

Ассемблер ARM64 | Умножение матриц

Последнее обновление: 17. 01.2023

Рассмотрим расспространенную задачу – умножение матриц. Например, у нас есть следующие матрицы

матрица A

a11

a12

a13

a21

a22

a23

a31

a32

a33

матрица B

b11

b12

b13

b21

b22

b23

b31

b32

b33

То результат перемножения матриц будет равен

a11*b11 + a12*b21 + a13*b31

a11*b12 + a12*b22 + a13*b32

a11*b13 + a12*b23 + a13*b33

a21*b11 + a22*b21 + a23*b31

a21*b12 + a22*b22 + a23*b32

a21*b13 + a22*b23 + a23*b33

a31*b11 + a32*b21 + a33*b31

a31*b12 + a32*b22 + a33*b32

a31*b13 + a32*b23 + a33*b33

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

С точки зрения псевдокода это выглядело бы так:


FOR row = 1 to 3
	FOR col = 1 to 3
		acum = 0  
		FOR i = 1 to 3
			acum = acum + A[row, i]*B[i, col]
		NEXT I
		C[row, col] = acum
	NEXT col
NEXT row

Напишем программу для перемножения двух матриц размером 3×3. Для упрощения вывода результатов на консоль воспользуемся функции printf языка С.

Итак, определим файл main.s со следующим кодом:


// Умножение двух матриц 3x3
//
// Используемые регистры:
// W1 - Индекс строки
// W2 - Индекс столбца
// X4 - Адрес строки
// X5 - Адрес столбца
// X7 - накопленная сумма для элемент результирующей матрицы
// W9 - элемент матрицы A
// W10 - элемент матрицы B
// X19 - элемент матрицы C
// X20 - счетчик цикла для печати
// X12 - номер стороки в цикле dotloop
// X6 - номер столбца в цикле dotloop
.global main    // точка входа в  программу
	.
equ N, 3 // Размер матрицы .equ WDSIZE, 4 // размер элемента в байтах main: STR LR, [SP, #-16]! // сохраняем значение регистра LR STP X19, X20, [SP, #-16]! // сохраняем значения регистров X19 и X20 MOV W1, #N // помещаем в W1 индекс строки LDR X4, =A // В X4 адрес текущей строки матрицы А LDR X19, =C // В X19 адрес материцы С rowloop: LDR X5, =B // первый столбец матрицы B MOV W2, #N // индекс столбца (считаем в обратном порядке до 0) colloop: MOV X7, #0 // регистр для накопления результата - по умолчанию равен 0 MOV W0, #N // счетчик цикла MOV X12, X4 // в X12 помещаем адрес строки для перемножения элементов MOV X6, X5 // в X6 помещаем адрес столбца для перемножения элементов dotloop: // Цикл для умножения элементов текущей строки матрицы A на элементы текущего столбца матрицы B LDR W9, [X12], #WDSIZE // загружаем A[row, i] и увеличиваем адрес в X12 на #WDSIZE байт LDR W10, [X6], #(N*WDSIZE) // загружаем в W10 данные из B[i, col] SMADDL X7, W9, W10, X7 // умножаем и сохраняем результат в X7 SUBS W0, W0, #1 // уменьшаем счетчик на 1 B.
NE dotloop // если W0 не равно 0, то переходим к dotloop для перемножения новых элементов матриц STR W7, [X19], #4 // сохраняем результат из W7 в X19 - C[row, col] = W7, увеличиваем адрес в X19 на 4 байта ADD X5, X5, #WDSIZE // Переходим к следующему столбцу в матрице B - увеличиваем адрес в X5 на #WDSIZE байт SUBS W2, W2, #1 // увеличиваем счетчик столбцов B.NE colloop // если не все столбцы прошли, то переходим обратно к colloop ADD X4, X4, #(N*WDSIZE) // к адресу в X4 прибавляем #(N*WDSIZE) байт для перехода к адресу новой строки SUBS W1, W1, #1 // уменьшаем счетчик строк B.NE rowloop // если еще есть строки, переходим обратно к rowloop MOV W20, #3 // проходим по трем строкам LDR X19, =C // адрес результирующей матрицы C // выводим матрицу с помощью функции printf языка C printloop: LDR X0, =prtstr // загружаем строку форматирования для функции printf LDR W1, [X19], #WDSIZE // первый элемент текущей строки матрицы LDR W2, [X19], #WDSIZE // второй элемент текущей строки матрицы LDR W3, [X19], #WDSIZE // третий элемент текущей строки матрицы BL printf // Вызыв функции printf SUBS W20, W20, #1 // уменьшаем счетчик строк B. NE printloop // если есть еще строки, переходим обратно к printloop MOV X0, #0 // код возврата из функции LDP X19, X20, [SP], #16 // восстанавливаем значение регистров LDR LR, [SP], #16 // восстанавливаем регистр LR RET // выход из функции .data // первая матрица A: .word 1, 2, 3 .word 4, 5, 6 .word 7, 8, 9 // вторая матрица B: .word 9, 8, 7 .word 6, 5, 4 .word 3, 2, 1 // результирующая матрица C: .fill 9, 4, 0 prtstr: .asciz "%3d %3d %3d\n"

Вкратце рассмотрим данный код. Прежде всего в секции .data определены три матрицы. Матрицы A и B состоят из 9 элементов типа .word, то есть чисел размером 4 байта. Матрица C определена с помощью директивы .fill, которая определяет набор из 9 элементов размеров 4 байта, каждый из которых по умолчанию равен 0.

Для упрощения работы определяем две дополнительные константы:


.equ N, 3      // Размер матрицы
.equ WDSIZE, 4 // размер элемента в байтах

Вначале определяем значения для прохода по строкам:


MOV W1, #N                  // помещаем в W1 индекс строки
LDR X4, =A                  // В X4 адрес текущей строки матрицы А
LDR X19, =C                 // В X19 адрес материцы С

В W1 помещаем счетчик строк, то есть число 3 (надо пройти по трем строкам матрицы А). В регистр X4 загружается адрес матрицы A (адрес первого ее элемента) и в X19 помещается адрес матрицы С, в которую будем сохранять результат.

Дальше начинаем цикл для прохода по строкам и определяем значения для прохода по столбцам матрицы B:


rowloop:
    LDR X5, =B                  // первый столбец матрицы B
    MOV W2, #N                  // индекс столбца (считаем в обратном порядке до 0)

В регистр X5 помещается адрес матрицы В, а в W2 – счетчик столбцов (то есть надо пройтись по 3 столбцам матрицы В).

Затем начинаем цикл по столбцам


colloop:
    MOV X7, #0                  // регистр для накопления результата - по умолчанию равен 0
    MOV W0, #N                  // счетчик цикла
    MOV X12, X4                 // в X12 помещаем адрес строки для перемножения элементов
    MOV X6, X5                  // в X6 помещаем адрес столбца для перемножения элементов

В регистр Х7 помещаем число 0 – этот регистр будет накапливать значения для одного элемента матрицы С. Кроме того, в W0 помещается счетчик цикла – надо перемножить 3 элемента из строки матрицы А и столбца марицы B. Регистр Х12 будет указывать на адрес текущего элемента строки матрицы А, а Х6 – на адрес текущего элемента столбца матрицы В.

Далее перемножаем все элементы текущей строки матрицы А и текущего столбца матрицы В:


dotloop:    // Цикл для умножения элементов текущей строки матрицы A на элементы текущего столбца матрицы B
    LDR W9, [X12], #WDSIZE      // загружаем A[row, i] и увеличиваем адрес в X12 на #WDSIZE байт
    LDR W10, [X6], #(N*WDSIZE)  // загружаем в W10 данные из B[i, col]
    SMADDL X7, W9, W10, X7      // умножаем и сохраняем результат в X7
    SUBS W0, W0, #1             // уменьшаем счетчик на 1
    B. NE dotloop                // если W0 не равно 0, то переходим к dotloop для перемножения новых элементов матриц

Для перемножения в W9 загружаем элемент по адресу X12, при этом увеличиваем данный адрес на #WDSIZE (4) байт, то есть адрес будет указываать на следующий элемент текущей строки матрицы А. Аналогично в W10 загружаем элемент по адресу X6, при этом увеличиваем данный адрес на #(N*WDSIZE) (12) байт, то есть адрес будет указываать на следующий элемент текущего столба матрицы В. Инструкция SMADDL перемножает значения W9 и W10 и прибавляет к содержимому в регистре X7. И пока не пройдем по всем 3 элементам текущих строки и столбца, продолжаем данные действия.

Таким образом, в цикле dotloop пройдем по 3 ячейкам текущих строки и столбца, получим результ и сохраним его в регистр X12.

Далее для вычисления элемента матрицы C в следующем столбце переходим к следующему столбцу матрицы B:


STR W7, [X19], #4           // сохраняем результат из W7 в X19 - C[row, col] = W7, увеличиваем адрес в X19 на 4 байта
ADD X5, X5, #WDSIZE         // Переходим к следующему столбцу в матрице B - увеличиваем адрес в X5 на #WDSIZE байт
SUBS W2, W2, #1             // увеличиваем счетчик столбцов
B. NE colloop                // если не все столбцы прошли, то переходим обратно к colloop

При этом полученный результат из X7 сохраняем в текущей элемент матрицы С, адрес которого хранится в Х19. При этом данный адрес увеличиваем на 4 байта, чтобы в следующий раз сохранить значение для следующего элемента матрицы С. Также увеличиваем адрес в X5 на #WDSIZE байт, то есть переходим к новому столбцу матрицы В и уменьшаем счетчик столбцов в регистре W2.

Если все столбцы матрицы В пройдены, то переходим к новой строке матрицы А:


ADD X4, X4, #(N*WDSIZE)     // к адресу в X4 прибавляем #(N*WDSIZE) байт для перехода к адресу новой строки
SUBS W1, W1, #1             // уменьшаем счетчик строк
B.NE rowloop                // если еще есть строки, переходим обратно к rowloop

Для этого изменяем адрес в Х4 на #(N*WDSIZE) байт (по сути на 12 байт – размер строки), уменьшаем счетчик строк в W1 и переходим к следующей строке.

Если все строки перебраны, то переходим к печати на консоль – проходим по трем строкам матрицы С и единосременно с помощью строки форматирования prtstr выводим значения трех столбцов текущей строки матрицы C.

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


aarch64-none-linux-gnu-gcc main.s -o main -static

После запуска программа отобразит нам результирующую матрицу:


 30  24  18
 84  69  54
138 114  90

НазадСодержаниеВперед

р – Умножить строки матрицы на вектор?

спросил

Изменено 2 года, 1 месяц назад

Просмотрено 87 тысяч раз

У меня есть числовая матрица с 25 столбцами и 23 строками и вектор длиной 25. Как я могу умножить каждую строку матрицы на вектор без использования для цикла ?

Результатом должна быть матрица 25×23 (того же размера, что и вход), но каждая строка умножается на вектор.

Добавлен воспроизводимый пример из ответа @hatmatrix:

 матрица <- матрица (rep (1: 3, каждый = 5), nrow = 3, ncol = 5, byrow = TRUE)
     [1] [2] [3] [4] [5]
[1,] 1 1 1 1 1
[2,] 2 2 2 2 2
[3,] 3 3 3 3 3
вектор <- 1:5
 

Требуемый результат:

 [1] [2] [3] [4] [5]
[1,] 1 2 3 4 5
[2,] 2 4 6 8 10
[3,] 3 6 912 15
 
  • r
  • вектор
  • матрица
  • умножение

Я думаю, вы ищете развертка() .

 # Создать пример данных и вектор
мат <- матрица (реп (1: 3, каждый = 5), nrow = 3, ncol = 5, byrow = TRUE)
     [1] [2] [3] [4] [5]
[1,] 1 1 1 1 1
[2,] 2 2 2 2 2
[3,] 3 3 3 3 3
век <- 1:5
# Используйте развертку, чтобы применить вектор с помощью функции умножения (`*`)
# по столбцам (см. ?применить для объяснения MARGIN)
развертка(mat, MARGIN=2, vec, `*`)
     [1] [2] [3] [4] [5]
[1,] 1 2 3 4 5
[2,] 2 4 6 8 10
[3,] 3 6 912 15
 

Это была одна из основных функций R, хотя с годами в нее вносились улучшения.

 > MyMatrix <- матрица (c (1,2,3, 11,12,13), nrow = 2, ncol=3, byrow=TRUE)
> МояМатрица
     [1] [2] [3]
[1,] 1 2 3
[2,] 11 12 13
> МойВектор <- c(1:3)
> МойВектор
[1] 1 2 3
 

Вы можете использовать:

 > t(t(MyMatrix) * MyVector)
     [1] [2] [3]
[1,] 1 4 9
[2,] 11 24 39
 

или:

 > MyMatrix %*% diag(MyVector)
     [1] [2] [3]
[1,] 1 4 9[2,] 11 24 39
 

На самом деле, развертка не самый быстрый вариант на моем компьютере:

 MyMatrix <- matrix(c(1:1e6), ncol=1e4, byrow=TRUE)
МойВектор <- c(1:1e4)
Rprof(tmp <- tempfile(), интервал = 0,001)
t(t(MyMatrix) * MyVector) # первый вариант
Rпроф()
MyTimerTranspose=summaryRprof(tmp)$sampling.time
развязать (tmp)
Rprof(tmp <- tempfile(), интервал = 0,001)
MyMatrix %*% diag(MyVector) # второй вариант
Rпроф()
MyTimerDiag=summaryRprof(tmp)$sampling.time
развязать (tmp)
Rprof(tmp <- tempfile(), интервал = 0,001)
Swee(MyMatrix ,MARGIN=2,MyVector,`*`) # третий вариант
Rпроф()
MyTimerSweep=summaryRprof(tmp)$sampling. time
развязать (tmp)
Rprof(tmp <- tempfile(), интервал = 0,001)
t(t(MyMatrix) * MyVector) # снова первый вариант, чтобы проверить порядок
Rпроф()
MyTimerTransposeAgain=summaryRprof(tmp)$sampling.time
развязать (tmp)
MyTimerTranspose
MyTimerDiag
MyTimerSweep
MyTimerTransposeAgain
 

Это дает:

 > MyTimerTranspose
[1] 0,04
> MyTimerDiag
[1] 40,722
> MyTimerSweep
[1] 33,774
> MyTimerTransposeAgain
[1] 0,043
 

Помимо того, что второй вариант является самым медленным, он достигает предела памяти (2046 МБ). Однако, учитывая оставшиеся варианты, двойное транспонирование кажется намного лучше, чем развертка , на мой взгляд.


Редактировать

Просто попробовать меньшие данные несколько раз:

 MyMatrix <- матрица(c(1:1e3), ncol=1e1, byrow=TRUE)
МойВектор <- c(1:1e1)
n=100000
[...]
для (я в 1: п) {
# ваш вариант
}
[...]
> MyTimerTranspose
[1] 5,383
> MyTimerDiag
[1] 6.404
> MyTimerSweep
[1] 12,843
> MyTimerTransposeAgain
[1] 5,428
 

2

Для ускорения можно создать матрицу из вектора перед умножением

 mat <- matrix(rnorm(1e6), ncol=1e4)
vec <- c(1:1e4)
мат * матрица (vec, dim (mat) [1], длина (vec))
библиотека (микробенчмарк)
микробенчмарк(
  транспонировать = t (t (мат) * vec),
  make_matrix = мат * матрица (vec, dim (mat) [1], length (vec), byrow = TRUE),
  развертка = развертка (мат, MARGIN = 2, vec, `*`))
#Единица измерения: миллисекунды
# expr min lq среднее медиана uq max neval cld
# транспонировать 9. 940555 10.480306 14.39822 11.210735 16.19555 77.67995 100 б
#make_matrix 5,556848 6,053933 9,48699 6,662592 10,74121 74,14429 100 а
# развертка 8.033019 8.500464 13.45724 12.331015 14.14869 77.00371 100 б
 

Эти решения с использованием external() или Collar::TRA() значительно быстрее, чем что-либо, предложенное здесь.

Если вам нужна скорость, вы можете использовать Rfast::eachrow . Это самый быстрый из всех...

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

3.

2: Свойства определителей - Mathematics LibreTexts
  1. Последнее обновление
  2. Сохранить как PDF
  • Идентификатор страницы
    14511
    • Кен Каттлер
    • Университет Бригама Янга via Lyryx

    Свойства определителей I: примеры

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

    Определение \(\PageIndex{1}\): Операции со строками

    Операции со строками состоят из следующих

    1. Переключение двух строк.
    2. Умножить строку на ненулевое число.
    3. Заменить строку числом, кратным другой строке, добавленной к самой себе.

    Теперь рассмотрим влияние операций со строками на определитель матрицы. В следующих разделах мы увидим, что использование следующих свойств может сильно помочь в поиске определителей. В этом разделе теоремы будут использоваться в качестве мотивации для предоставления различных примеров полезности свойств.

    Первая теорема объясняет влияние на определитель матрицы перестановки двух строк.

    Теорема \(\PageIndex{1}\): переключение строк

    Пусть \(A\) — матрица \(n\times n\), а \(B\) — матрица, полученная в результате перестановки двух строк \(A.\). Тогда \(\det \left( B \right) = - \det \left( A\right).\)

    Когда мы переставляем две строки матрицы, определитель умножается на \(-1\). Рассмотрим следующий пример.

    Пример \(\PageIndex{1}\): переключение двух строк

    Пусть \(A=\left[ \begin{array}{rr} 1 & 2 \\ 3 & 4 \end{array} \right] \) и пусть \(B=\left[ \begin{array}{rr} 3 & 4 \\ 1 & 2 \end{array} \right]\). Зная, что \(\det \left( A \right) = -2\), найдите \(\det \left( B \right)\).

    Решение

    По определению 3.1.1, \(\det \left(A\right) = 1 \times 4 - 3 \times 2 = -2\). Обратите внимание, что строки \(B\) являются строками \(A\), но перепутаны. По теореме \(\PageIndex{1}\), так как две строки \(A\) были переставлены местами, \(\det \left(B\right) = - \det \left(A\right) = - \left (-2\справа) = 2\). Вы можете убедиться в этом, используя Определение 3.1.1.

    Следующая теорема демонстрирует влияние на определитель матрицы, когда мы умножаем строку на скаляр.

    Теорема \(\PageIndex{2}\): умножение строки на скаляр 9п \дет(А)\).

    Рассмотрим следующий пример.

    Пример \(\PageIndex{2}\): умножение строки на 5

    Пусть \(A=\left[ \begin{array}{rr} 1 & 2 \\ 3 & 4 \end{array} \ right] ,\ B=\left[ \begin{array}{rr} 5 & 10 \\ 3 & 4 \end{array} \right].\) Зная, что \(\det \left( A \right) = -2\), найти \(\det \left( B \right)\).

    Решение

    По определению 3.1.1, \(\det \left( A\right) = -2.\) Мы также можем вычислить \(\det \left(B\right)\), используя определение 3. 1.1 , и мы видим, что \(\det \left(B\right) = -10\).

    Теперь давайте вычислим \(\det \left(B\right)\), используя теорему \(\PageIndex{2}\), и посмотрим, получим ли мы тот же ответ. Обратите внимание, что первая строка \(B\) в \(5\) раз больше первой строки \(A\), а вторая строка \(B\) равна второй строке \(A\) . По теореме \(\PageIndex{2}\), \(\det \left( B \right) = 5 \times \det \left( A \right) = 5 \times -2 = -10.\)

    Вы можете видеть, что это соответствует нашему ответу выше.

    Наконец, рассмотрим следующую теорему для последней операции со строками — прибавления числа, кратного одной строке, к другой строке.

    Теорема \(\PageIndex{4}\): добавление кратного строки к другой строке

    Пусть \(A\) - матрица \(n\x n\), матрица, которая получается в результате прибавления числа, кратного одной строке, к другой строке. Тогда \(\det \left( A\right) =\det \left( B \right)\).

    Следовательно, когда мы прибавляем кратное одной строки к другой строке, определитель матрицы не меняется. Обратите внимание, что если матрица \(A\) содержит строку, кратную другой строке, \(\det \left(A\right)\) будет равно \(0\). Чтобы убедиться в этом, предположим, что первая строка \(A\) равна \(-1\), умноженной на вторую строку. По теореме \(\PageIndex{4}\) мы можем добавить первую строку ко второй строке, и определитель не изменится. Однако эта операция строки приведет к строке нулей. Используя разложение Лапласа по ряду нулей, мы находим, что определитель равен \(0\).

    Рассмотрим следующий пример.

    Пример \(\PageIndex{3}\): добавление строки к другой строке

    Пусть \(A=\left[ \begin{array}{rr} 1 & 2 \\ 3 & 4 \end{array} \right]\) и пусть \(B=\left[ \begin{array}{rr} 1 & 2 \\ 5 & 8 \end{array} \right] .\) Найти \(\det \left(B \верно)\).

    Решение

    По определению 3.1.1, \(\det \left(A\right) = -2\). Обратите внимание, что вторая строка \(B\) в два раза больше первой строки \(A\), добавленной ко второй строке. По теореме \(\PageIndex{1}\), \(\det \left( B\right) = \det \left( A \right) = -2\). Как обычно, вы можете проверить этот ответ, используя Определение 3.1.1.

    Пример \(\PageIndex{4}\): Несколько строк

    Пусть \(A = \left[ \begin{array}{rr} 1 & 2 \\ 2 & 4 \end{array} \right ]\). Покажите, что \(\det \left( A \right) = 0\).

    Решение

    Используя определение 3.1.1, определитель определяется как \[\det \left( A \right) = 1 \times 4 - 2 \times 2 = 0\nonumber \]

    Однако обратите внимание, что второй строка равна \(2\), умноженной на первую строку. Тогда по приведенному выше обсуждению в соответствии с теоремой \(\PageIndex{4}\) определитель будет равен \(0\).

    До сих пор основное внимание уделялось операциям со строками. Однако мы можем выполнять те же операции со столбцами, а не со строками. Три операции, описанные в определении \(\PageIndex{1}\), можно выполнять со столбцами, а не со строками. В этом случае в теоремах \(\PageIndex{1}\), \(\PageIndex{2}\) и \(\PageIndex{4}\) слово "строка" можно заменить словом "столбец". ".

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

    Теорема \(\PageIndex{5}\): определитель произведения

    Пусть \(A\) и \(B\) - две матрицы \(n\times n\). Тогда \[\det \left( AB\right) =\det \left( A\right) \det \left( B\right)\nonumber \]

    Чтобы найти определитель произведения матриц, мы можно просто взять произведение определителей.

    Рассмотрим следующий пример.

    Пример \(\PageIndex{5}\): определитель произведения

    Сравните \(\det \left( AB\right)\) и \(\det \left( A\right) \det \left ( B\right)\) для \[A=\left[ \begin{array}{rr} 1 & 2 \\ -3 & 2 \end{array} \right], B=\left[ \begin{array }{rr} 3 и 2 \\ 4 и 1 \end{массив} \right]\nonumber \]

    Решение

    Первое вычисление \(AB\), которое задается \[AB=\left[ \begin{array}{rr} 1 & 2 \\ -3 & 2 \end{array} \right] \ left[ \begin{array}{rr} 3 & 2 \\ 4 & 1 \end{array} \right] = \left[ \begin{array}{rr} 11 & 4 \\ -1 & -4 \end {array} \right]\nonumber \] и, следовательно, по определению 3. 1.1 \[\det \left( AB\right) =\det \left[ \begin{array}{rr} 11 & 4 \\ -1 & -4 \end{массив} \right] = -40\nonnumber \]

    Теперь \[\det \left( A\right) =\det \left[ \begin{array}{rr} 1 & 2 \\ -3 & 2 \end{массив} \right] = 8\nonumber \] и \[\det \left( B\right) =\det \left[ \begin{array}{rr} 3 & 2 \\ 4 & 1 \end{массив} \right] = -5\nonumber \] 9{-1}) = \frac{1}{\det(A)}\nonumber \]

    Рассмотрим следующий пример.

    Пример \(\PageIndex{7}\): Определитель обратимой матрицы

    Пусть \(A = \left[ \begin{array}{rr} 3 & 6 \\ 2 & 4 \end{array} \ справа], B = \left[ \begin{array}{rr} 2 & 3 \\ 5 & 1 \end{array} \right]\). Для каждой матрицы определите, является ли она обратимой. Если да, то найти определитель обратного.

    Решение

    Сначала рассмотрим матрицу \(A\). Используя определение 3.1.1, мы можем найти определитель следующим образом: \[\det \left( A \right) = 3 \times 4 - 2 \times 6 = 12 - 12 = 0\nonnumber \] {7}\) \(А\) необратима. 9n a_{1,i} \mathrm{cof}(A)_{1,i}. \] Если \(n=1\), то \(\det A=a_{1,1}\).

    Следующий пример является простым и настоятельно рекомендуется в качестве средства для привыкания к определениям.

    Пример \(\PageIndex{8}\):

    (1) Пусть \(E_{ij}\) — элементарная матрица, полученная перестановкой \(i\)-й и \(j\)-й строк матрицы \ (Я\). Тогда \(\det E_{ij}=-1\).

    (2) Пусть \(E_{ik}\) — элементарная матрица, полученная умножением \(i\)-й строки \(I\) на \(k\). Тогда \(\det E_{ik}=k\). 9Т\).

    Многие доказательства в этом разделе используют принцип математической индукции. Эта концепция обсуждается в Приложении A.2 и для удобства рассмотрена здесь. Сначала проверим, что утверждение верно для \(n=2\) (случай \(n=1\) либо совсем тривиален, либо бессмыслен).

    Далее предположим, что утверждение верно для \(n-1\) (где \(n\geq 3\)) и докажем его для \(n\). Как только это будет выполнено, по принципу математической индукции мы можем заключить, что утверждение верно для всех матриц \(n\times n\) для каждого \(n\geq 2\).

    Если \(A\) является \(n\times n\) матрицей и \(1\leq j \leq n\), то матрица, полученная удалением \(1\)-го столбца и \(j\ )-я строка из \(A\) является матрицей \(n-1\times n-1\) (ниже мы будем обозначать эту матрицу через \(A(j)\)). Поскольку эти матрицы используются при вычислении кофакторов \(\mathrm{cof}(A)_{1,i}\), для \(1\leq i\neq n\), к этим матрицам применимо предположение индукции.

    Рассмотрим следующую лемму.

    Лемма \(\PageIndex{1}\):

    Если \(A\) - матрица \(n\times n\) такая, что одна из ее строк состоит из нулей, то \(\det A=0 \).

    Доказательство

    Мы докажем эту лемму с помощью математической индукции.

    Если \(n=2\) это просто (проверьте!).

    Пусть \(n\geq 3\) таково, что каждая матрица размера \(n-1\times n-1\) со строкой, состоящей из нулей, имеет определитель, равный нулю. Пусть \(i\) таково, что \(i\)-я строка \(A\) состоит из нулей. Тогда мы имеем \(a_{ij}=0\) для \(1\leq j\leq n\).

    Исправьте \(j\in \{1,2, \dots ,n\}\) так, чтобы \(j\neq i\). Тогда матрица \(A(j)\), используемая при вычислении \(\mathrm{cof}(A)_{1,j}\), имеет строку, состоящую из нулей, и по нашему индуктивному предположению \(\mathrm{cof }(A)_{1,j}=0\). 9n a_{1,j} \mathrm{cof}(A)_{1,j}=0\nonumber \], так как каждое из слагаемых равно 0,

    Лемма \(\PageIndex{2}\):

    Предположим, что \(A\), \(B\) и \(C\) являются \(n\x n\) матрицами, которые для некоторого \(1\ leq i\leq n\) удовлетворяют следующему.

    1. \(j\)-е строки всех трех матриц одинаковы, для \(j\neq i\).
    2. Каждая запись в \(j\)-й строке \(A\) является суммой соответствующих записей в \(j\)-х строках \(B\) и \(C\).

    Тогда \(\det A=\det B+\det C\).

    Доказательство

    Проверить на \(n=2\) несложно (проверьте!).

    Теперь предположим, что утверждение леммы верно для \(n-1\times n-1\) матриц, и зафиксируем \(A,B\) и \(C\), как в утверждении. Предположения утверждают, что мы имеем \(a_{l,j}=b_{l,j}=c_{l,j}\) для \(j\neq i\) и для \(1\leq l\leq n \) и \(a_{l,i}=b_{l,i}+c_{l,i}\) для всех \(1\leq l\leq n\). Поэтому \(A(i)=B(i)=C(i)\), а \(A(j)\) обладает тем свойством, что его \(i\)-я строка является суммой \(i\) строки \(B(j)\) и \(C(j)\) для \(j\neq i\), а остальные строки всех трех матриц идентичны. Следовательно, согласно нашему индуктивному предположению, мы имеем \(\mathrm{cof}(A)_{1j}=\mathrm{cof}(B)_{1j}+\mathrm{cof}(C)_{1j}\) для \(j\neq i\). 9n a_{1,l} \mathrm{cof}(A)_{1,l}\\ &=\sum_{l\neq i} a_{1,l}(\mathrm{cof}(B)_{ 1,l}+\mathrm{cof}(C)_{1,l})+ (b_{1,i}+c_{1,i})\mathrm{cof}(A)_{1,i} \\ &= \det B+\det C\end{aligned}\] Это доказывает, что утверждение верно для всех \(n\), и завершает доказательство.

    Теорема \(\PageIndex{8}\):

    Пусть \(A\) и \(B\) - матрицы \(n\times n\).

    1. Если \(A\) получается перестановкой \(i\)-й и \(j\)-й строк \(B\) (с \(i\neq j\)), то \(\det А=-\det В\).
    2. Если \(A\) получается умножением \(i\)-й строки \(B\) на \(k\), то \(\det A=k\det B\).
    3. Если две строки \(A\) идентичны, то \(\det A=0\).
    4. Если \(A\) получается умножением \(i\)-й строки \(B\) на \(k\) и добавлением его к \(j\)-й строке \(B\) (\( i\neq j\)) затем \(\det A=\det B\).
    Доказательство

    Докажем все утверждения по индукции. Случай \(n=2\) легко проверить напрямую (и настоятельно рекомендуется проверить его).

    Мы предполагаем, что \(n\geq 3\) и (1)–(4) верны для всех матриц размера \(n-1\times n-1\).

    (1) Докажем случай, когда \(j=i+1\), т. е. мы меняем местами две последовательные строки.

    Пусть \(l\in \{1, \dots, n\}\setminus \{i,j\}\). Тогда \(A(l)\) получается из \(B(l)\) перестановкой двух его строк (рисунок) и по нашему предположению \[\label{E2} \mathrm{cof}(A) _{1,l}=-\mathrm{cof}(B)_{1,l}.\]

    Теперь рассмотрим \(a_{1,i} \mathrm{cof}(A)_{1,l}\). n b_{1l} B_{1l} =\det B.\nonumber \]

    Итак, мы доказали случай (1), когда \(j=i+1\). Для доказательства общего случая понадобится следующий факт. Если \(i

    (2) Это как (1)… но гораздо проще. Предположим, что (2) верно для всех \(n-1\times n-1\) матриц. У нас есть это \(a_{ji}=k b_{ji}\) для \(1\leq j\leq n\). В частности \(a_{1i}=kb_{1i}\), а при \(l\neq i\) матрица \(A(l)\) получается из \(B(l)\) умножением одного из его строки на \(k\). Поэтому \(\mathrm{cof}(A)_{1l}=k\mathrm{cof}(B)_{1l}\) для \(l\neq i\), и для всех \(l\) мы имеют \(a_{1l} \mathrm{cof}(A)_{1l}=k b_{1l}\mathrm{cof}(B)_{1l}\). По \(\eqref{E1}\) имеем \(\det A=k\det B\).

    (3) Это следствие (1). Если две строки \(A\) идентичны, то \(A\) равна матрице, полученной путем перестановки этих двух строк и, следовательно, согласно (1) \(\det A=-\det A\). Отсюда следует \(\det A=0\).

    (4) Предположим, что (4) верно для всех \(n-1\times n-1\) матриц, и зафиксируем \(A\) и \(B\) так, что \(A\) получается умножением \ (i\)-я строка \(B\) на \(k\) и добавление ее к \(j\)-й строке \(B\) (\(i\neq j\)) затем \(\det А=\дет В\). Если \(k=0\), то \(A=B\) и доказывать нечего, поэтому можно считать \(k\neq 0\).

    Пусть \(C\) — матрица, полученная заменой \(j\)-й строки \(B\) на \(i\)-ю строку \(B\), умноженной на \(k\). По лемме \(\PageIndex{2}\) мы имеем, что \[\det A=\det B+\det C\nonumber \], и нам «всего лишь» нужно показать, что \(\det C=0\). Но \(i\)-я и \(j\)-я строки \(C\) пропорциональны. Если \(D\) получается умножением \(j\)-й строки \(C\) на \(\frac 1k\), то по (2) имеем \(\det C=\frac 1k\det D\) (напомним, что \(k\neq 0\)!). Но \(i\)-я и \(j\)-я строки \(D\) идентичны, поэтому по (3) мы имеем \(\det D=0\) и, следовательно, \(\det C=0\ ).

    Теорема \(\PageIndex{9}\):

    Пусть \(A\) и \(B\) две матрицы \(n\times n\). Тогда \[\det \left( AB\right) =\det \left( A\right) \det \left( B\right)\nonumber \]

    Proof

    Если \(A\) является элементарной матрицей любого типа, то умножение на \(A\) слева имеет тот же эффект, что и выполнение соответствующей операции с элементарной строкой. Поэтому равенство \(\det (AB) =\det A\det B\) в этом случае следует из примера \(\PageIndex{8}\) и теоремы \(\PageIndex{8}\).

    Если \(C\) является редуцированной ступенчатой ​​формой \(A\), то мы можем написать \(A=E_1\cdot E_2\cdot\dots\cdot E_m\cdot C\) для некоторых элементарных матриц \( E_1,\точки, E_m\).

    Теперь рассмотрим два случая.

    Предположим сначала, что \(C=I\). Затем \(A=E_1\cdot E_2\cdot \dots\cdot E_m\) и \(AB= E_1\cdot E_2\cdot \dots\cdot E_m B\). Применяя приведенное выше равенство \(m\) раз, а затем \(m-1\) раз, мы получаем, что \[\begin{aligned} \det AB&=\det E_1\det E_2\cdot \det E_m\cdot \det B\\ &=\det (E_1\cdot E_2\cdot\dots\cdot E_m) \det B\\ &=\det A\det B. \end{aligned}\]

    Теперь предположим \(C\neq I\). Поскольку он находится в редуцированной строчно-эшелонной форме, его последняя строка состоит из нулей, а по (4) примера \(\PageIndex{8}\) последняя строка \(CB\) состоит из нулей. По лемме \(\PageIndex{1}\) имеем \(\det C=\det (CB)=0\) и, следовательно, \[\det A=\det (E_1\cdot E_2\cdot E_m)\cdot \ det (C) = \det (E_1\cdot E_2\cdot E_m)\cdot 0=0\nonumber \], а также \[\det AB=\det (E_1\cdot E_2\cdot E_m)\cdot \det (C B ) =\det (E_1\cdot E_2\cdot\dots\cdot E_m) 0 =0\nonnumber \] следовательно \(\det AB=0=\det A \det B\). 9Т\).

    Приведенные выше рассуждения позволяют нам теперь доказать теорему 3.

    Оставить комментарий