Nesse desafio, você receberá uma matriz quadrada A
, um vetor v
e um escalar λ
. Você será solicitado a determinar se (λ, v)
um par próprio corresponde a A
; isto é, seja ou não Av = λv
.
Produto Dot
O produto escalar de dois vetores é a soma da multiplicação por elementos. Por exemplo, o produto escalar dos dois vetores a seguir é:
(1, 2, 3) * (4, 5, 6) = 1*4 + 2*5 + 3*6 = 32
Observe que o produto escalar é definido apenas entre dois vetores do mesmo comprimento.
Multiplicação matriz-vetor
Uma matriz é uma grade de valores 2D. Uma matriz m
x n
tem m
linhas e n
colunas. Podemos imaginar uma matriz m
x n
como m
vetores de comprimento n
(se pegarmos as linhas).
A multiplicação de vetor de matriz é definida entre uma matriz m
x n
e um n
vetor de tamanho . Se multiplicarmos uma matriz m
x n
e um n
vetor de tamanho , obteremos um m
vetor de tamanho . O i
-ésimo valor no vetor de resultado é o produto escalar da i
-a linha da matriz e o vetor original.
Exemplo
1 2 3 4 5
Let A = 3 4 5 6 7
5 6 7 8 9
1
3
Let v = 5
7
9
Se multiplicarmos a matriz e o vetor Av = x
, obtemos o seguinte:
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
Então, nós chegamos Av = x = (95, 145, 195)
.
Multiplicação escalar
A multiplicação de um escalar (um único número) e um vetor é simplesmente multiplicação por elementos. Por exemplo 3 * (1, 2, 3) = (3, 6, 9)
,. É bastante direto.
Autovalores e autovetores
Dada a matriz A
, dizemos que λ
é um valor próprio correspondente ao v
e v
é um autovetor correspondente a λ
se e somente se Av = λv
. (Onde Av
é a multiplicação de vetores matriciais e multiplicação λv
escalar).
(λ, v)
é um par próprio.
Especificações do Desafio
Entrada
A entrada consistirá em uma matriz, um vetor e um escalar. Elas podem ser obtidas em qualquer ordem, em qualquer formato razoável.
Saída
A saída será um valor verdadeiro / falso; na verdade, se e somente se o escalar e o vetor forem um par próprio com a matriz especificada.
Regras
- Aplicam-se brechas padrão
- Se houver um built-in para verificar um par próprio no seu idioma, você não poderá usá-lo.
- Você pode assumir que todos os números são inteiros
Casos de teste
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
Vou adicionar um 4x4 mais tarde.
fonte
Respostas:
Geléia , 5 bytes
Este é um programa triádico e completo.
Experimente online!
Como funciona
fonte
v
um poderia esperar apenas quatro bytes.Mathematica, 10 bytes
Toma entrada como
{vector, matrix, scalar}
e retorna um booleano.fonte
MATL, 7 bytes
Entradas na ordem:
l
,v
,A
.Explicação:
Resposta surpreendentemente longa, se você me perguntar, principalmente porque eu precisava de uma maneira de obter todas as informações corretamente. Eu não acho que menos de 5 bytes seja possível, mas seria legal se alguém encontrasse uma solução de 5 ou 6 bytes.
Basicamente, isso calcula
l*v==A*v
.fonte
@(A,v,l)A*v==v*l
, isso parece bastante detalhado, e tenho a sensação de que 6 deve ser suficiente se eu conseguir a entrada um pouco mais inteligente.CJam , 15 bytes
Recebe entrada no formulário
vector scalar matrix
.Experimente online!
Explicação
fonte
MATLAB, 16 bytes
Resposta bastante trivial. Define uma função anônima que recebe as entradas e calcula a igualdade entre elementos dos vetores resultantes. Um único zero em uma matriz lógica faz com que uma matriz falsey no MATLAB.
fonte
[true,false]
, obrigado por me ensinar =)[]
é diferente) implícitaall()
é chamado na entrada deif
,while
etcMATLAB, 38 bytes
Retorna 1 ou 0.
MATLAB, 30 bytes
Devoluções
como um valor verdadeiro. Um valor falso é um vetor semelhante com qualquer ou todos os valores 0 em vez de 1.
fonte
isequal
função pode ser reduzida para==
?isequal
seria necessário se a saída exigidatrue
oufalse
melhor que um valor de verdade ou falsey. Como o desafio está,==
é realmente suficiente.C ++,
225203 bytesAgradecemos a @Cort Ammon e @Julian Wolf por salvar 22 bytes!
Experimente online!
fonte
using std::vector;
poderia tirar dois bytes disso. Custa 18 bytes, mas pode remover 4std::
s, poupando 20.using V=std::vector<float>;
ou similar #Julia, 17 bytes
Experimente online!
fonte
Python 2.7, 33 bytes
entrada: m = matriz, s = escalar, e = valor próprio. M e s são matrizes numpy
fonte
import np
para que seja válidaprint(m,s,e)
declaração não teria funcionado porque as variáveism
,s
ee
não foram ainda atribuídos / definido. Além disso, você pode remover o espaço após os dois pontos. Além disso, você pode remover a parte `as n` e usarnumpy
mais tarde; Como você o usa apenas uma vez, usar o nome completo na verdade salva um byte.all
vez deany
? E eu acho ques
é o vetor, e não o escalar, a menos que eu estou faltando alguma coisaPython 3 ,
9670 bytesNão há componentes integrados para multiplicação de vetores matriciais ou escalares!
Experimente online!
-26 bytes usando
zip
graças a @LeakyNun!fonte
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 bytes
Experimente online!
fonte
R,
3025 bytesFunção anônima, bastante direta. Retorna
TRUE
ouFALSE
.fonte
OK, 12 bytes
Esta é uma função que absorve
[matrix;vector;scalar]
.Isso não funciona em k pelas mesmas razões que
3.0~3
dá0
como resultado.O seguinte funciona em k , com 14 bytes :
fonte
Axioma, 27 bytes
exercícios
fonte
@Boolean
faz?Python, 26 bytes
a
eb
são matrizes numpy,c
é um número inteiro.Experimente online!
fonte
c*b
realmente necessárias?c*b
tiver mais de 1000 elementos, o NumPy substituirá a maioria dos elementos por...
. Demo.Clojure, 60 bytes
Isso verifica se todos os deltas são zero, colapsando no conjunto de zero. Exemplo de chamada:
fonte