В этом задании вам дадут квадратную матрицу A
, вектор v
и скаляр λ
. Вам необходимо будет определить, соответствует ли (λ, v)
собственная пара A
; то есть, или нет Av = λv
.
Скалярное произведение
Точечное произведение двух векторов является суммой поэлементного умножения. Например, скалярное произведение следующих двух векторов:
(1, 2, 3) * (4, 5, 6) = 1*4 + 2*5 + 3*6 = 32
Обратите внимание, что скалярное произведение определяется только между двумя векторами одинаковой длины.
Матрично-векторное умножение
Матрица - это двумерная сетка значений. Матрица m
х n
имеет m
строки и n
столбцы. Мы можем представить матрицу m
x n
как m
векторы длины n
(если взять строки).
Умножение матрицы на вектор определяется между матрицей m
x n
и n
вектором размера . Если мы умножим матрицу m
x n
на n
вектор размеров , мы получим m
вектор размеров . Значение i
-th в векторе результатов является точечным произведением i
-ой строки матрицы и исходного вектора.
пример
1 2 3 4 5
Let A = 3 4 5 6 7
5 6 7 8 9
1
3
Let v = 5
7
9
Если мы умножим матрицу и вектор Av = x
, мы получим следующее:
x 1 = A T 1 * v /* AT1 means the first row of A; A1 would be the first column */
= (1,2,3,4,5) * (1,3,5,7,9) = 1 * 1 + 2 * 3 + 3 * 5 + 4 * 7 + 5 * 9 = 1 + 6 + 15 + 28 + 45 = 95
x 2 = A T 2 * v = (3,4,5,6,7) * (1,3,5,7,9) = 3 * 1 + 4 * 3 + 5 * 5 + 6 * 7 + 7 * 9 = 3 + 12 + 25 + 42 + 63 = 145
x 3 = A T 3 * v = (5,6,7,8,9) * (1,3,5,7,9) = 5 * 1 + 6 * 3 + 7 * 5 + 8 * 7 + 9 * 9 = 5 + 18 + 35 + 56 + 81 = 195
Итак, мы получаем Av = x = (95, 145, 195)
.
Скалярное Умножение
Умножение скаляра (одного числа) и вектора - просто поэлементное умножение. Например, 3 * (1, 2, 3) = (3, 6, 9)
. Это довольно просто.
Собственные значения и собственные векторы
Учитывая матрицу A
, мы говорим, что λ
является собственным значением, соответствующим v
и v
является собственным вектором, соответствующим λ
тогда и только тогда, когда Av = λv
. (Где Av
матрично-векторное умножение и λv
скалярное умножение).
(λ, v)
это собственная пара.
Технические требования
вход
Входные данные будут состоять из матрицы, вектора и скаляра. Они могут быть приняты в любом порядке в любом разумном формате.
Выход
Вывод будет истинным / ложным значением; правда тогда и только тогда, когда скаляр и вектор являются собственной парой с указанной матрицей.
правила
- Применяются стандартные лазейки
- Если на вашем языке существует встроенная система проверки собственной пары, вы не можете ее использовать.
- Вы можете предположить, что все числа являются целыми числами
Тестовые случаи
MATRIX VECTOR EIGENVALUE
2 -3 -1 3
1 -2 -1 1 1 -> TRUE
1 -3 0 0
2 -3 -1 1
1 -2 -1 1 -2 -> TRUE
1 -3 0 1
1 6 3 1
0 -2 0 0 4 -> TRUE
3 6 1 1
1 0 -1 2
-1 1 1 1 7 -> FALSE
1 0 0 0
-4 3 1
2 1 2 2 -> TRUE
2 1 2 -> TRUE
Я добавлю 4x4 позже.
источник
Ответы:
Желе , 5 байт
Это триада, полная программа.
Попробуйте онлайн!
Как это устроено
источник
v
можно ожидать всего четыре байта.Mathematica, 10 байт
Принимает ввод как
{vector, matrix, scalar}
и возвращает логическое значение.источник
MATL, 7 байт
Входы в порядке:
l
,v
,A
.Объяснение:
Удивительно длинный ответ, если вы спросите меня, в основном потому, что мне нужен был способ, чтобы получить все данные правильно. Я не думаю, что возможно менее 5 байтов, но было бы здорово, если бы кто-то нашел 5 или 6 байтовое решение.
В основном, это рассчитывает
l*v==A*v
.источник
@(A,v,l)A*v==v*l
, это кажется довольно многословным, и я чувствую, что 6 должно быть достаточно, если я получу ввод несколько умнее.CJam , 15 байтов
Принимает участие в форме
vector scalar matrix
.Попробуйте онлайн!
объяснение
источник
MATLAB, 16 байтов
Скорее банальный ответ. Определяет анонимную функцию, принимающую входные данные, и вычисляет поэлементное равенство результирующих векторов. Один ноль в логическом массиве делает массив ложным в MATLAB.
источник
[true,false]
, спасибо, что научил меня =)[]
отличается) неявноall()
вызывается на входеif
, иwhile
т.д.MATLAB, 38 байт
Возвращает 1 или 0.
MATLAB, 30 байтов
Возвращает
как истинная ценность. Ложное значение - это аналогичный вектор с любыми или всеми значениями 0 вместо 1.
источник
isequal
ли сократить функцию до==
?isequal
были бы необходимы , если требуется выходнойtrue
или ,false
а не truthy или значение falsey. Поскольку проблема стоит,==
действительно достаточно.C ++,
225203 байтаСпасибо @Cort Ammon и @Julian Wolf за сохранение 22 байтов!
Попробуйте онлайн!
источник
using std::vector;
может сыграть в гольф два байта от этого Это стоит 18 байт, но может удалить 4std::
с, сэкономив 20.using V=std::vector<float>;
или подобноеЮлия, 17 байт
Попробуйте онлайн!
источник
Python 2.7, 33 байта
вход: m = матрица, s = скаляр, e = собственное значение. M и S являются массивами NumPy
источник
import np
чтобы оно было действительнымprint(m,s,e)
заявление не будет работать , так как переменныеm
,s
иe
еще не были назначены / определенно. Также вы можете удалить пробел после двоеточия. Кроме того, вы можете удалить часть `as n` и использоватьnumpy
позже; так как вы используете его только один раз, полное имя сохраняет байт.all
вместоany
? И я думаю, чтоs
это вектор, а не скаляр, если я что-то упустилPython 3 ,
9670 байтНикаких встроенных функций для умножения матрицы на вектор или скалярного вектора!
Попробуйте онлайн!
-26 байт благодаря использованию
zip
@LeakyNun!источник
f=lambda A,L,v:all(L*y==sum(i*j for i,j in zip(x,v))for x,y in zip(A,v))
05AB1E , 11 байт
Попробуйте онлайн!
источник
R,
3025 байтАнонимная функция, довольно простая. Возвращает
TRUE
илиFALSE
.источник
ОК, 12 байт
Это функция, она принимает
[matrix;vector;scalar]
.Это не работает в к по тем же причинам , что
3.0~3
дает0
в результате.Следующие работы в k , с 14 байтами :
источник
Аксиома, 27 байт
упражнения
источник
@Boolean
?Python, 26 байт
a
иb
являются массивами numpy,c
является целым числом.Попробуйте онлайн!
источник
c*b
действительно необходимы?c*b
содержит более 1000 элементов, NumPy заменит большинство элементов на...
. Demo.Clojure, 60 байт
Это проверяет, что все дельты равны нулю, таким образом, сводится к множеству нуля. Пример вызова:
источник