En este desafío, se le dará una matriz cuadrada A
, un vector v
y un escalar λ
. Se le pedirá que determine si (λ, v)
es un par propio correspondiente a A
; es decir, sea o no Av = λv
.
Producto de punto
El producto punto de dos vectores es la suma de la multiplicación por elementos. Por ejemplo, el producto escalar de los siguientes dos vectores es:
(1, 2, 3) * (4, 5, 6) = 1*4 + 2*5 + 3*6 = 32
Tenga en cuenta que el producto escalar solo se define entre dos vectores de la misma longitud.
Multiplicación Matriz-Vector
Una matriz es una cuadrícula de valores 2D. Una matriz m
x n
tiene m
filas y n
columnas. Podemos imaginar una matriz m
x n
como m
vectores de longitud n
(si tomamos las filas).
La multiplicación matriz-vector se define entre una matriz m
x n
y un n
vector tamaño . Si multiplicamos una matriz m
x n
y un n
vector de tamaño , obtenemos un m
vector de tamaño . El i
valor -th en el vector resultante es el producto de punto de la i
fila -th de la matriz y el vector original.
Ejemplo
1 2 3 4 5
Let A = 3 4 5 6 7
5 6 7 8 9
1
3
Let v = 5
7
9
Si multiplicamos la matriz y el vector Av = x
, obtenemos lo siguiente:
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
Entonces, lo tenemos Av = x = (95, 145, 195)
.
Multiplicación escalar
La multiplicación de un escalar (un número único) y un vector es simplemente una multiplicación por elementos. Por ejemplo, 3 * (1, 2, 3) = (3, 6, 9)
. Es bastante sencillo.
Valores propios y vectores propios
Dada la matriz A
, decimos que λ
es un valor propio correspondiente a v
y v
es un vector propio correspondiente a λ
si y solo si Av = λv
. (Donde Av
es la multiplicación matriz-vector y λv
la multiplicación escalar).
(λ, v)
es un eigenpair
Especificaciones del desafío
Entrada
La entrada consistirá en una matriz, un vector y un escalar. Estos se pueden tomar en cualquier orden en cualquier formato razonable.
Salida
La salida será un valor verdadero / falso; Verdaderamente si y solo si el escalar y el vector son un par propio con la matriz especificada.
Reglas
- Se aplican lagunas estándar
- Si existe un incorporado para verificar un par propio en su idioma, no puede usarlo.
- Puede suponer que todos los números son enteros
Casos de prueba
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
Agregaré un 4x4 más tarde.
fuente
Respuestas:
Jalea , 5 bytes
Este es un programa triádico completo.
Pruébalo en línea!
Cómo funciona
fuente
v
podría esperar tan solo cuatro bytes.Mathematica, 10 bytes
Toma entrada como
{vector, matrix, scalar}
y devuelve un booleano.fuente
MATL, 7 bytes
Entradas en orden:
l
,v
,A
.Explicación:
Una respuesta sorprendentemente larga, si me preguntas, sobre todo porque necesitaba una forma de obtener toda la información correctamente. No creo que sea posible menos de 5 bytes, pero sería genial si alguien encontrara una solución de 5 o 6 bytes.
Básicamente, esto calcula
l*v==A*v
.fuente
@(A,v,l)A*v==v*l
, esto parece bastante detallado, y tengo la sensación de que 6 debería ser suficiente si obtengo la entrada algo más inteligente.CJam , 15 bytes
Toma entrada en el formulario
vector scalar matrix
.Pruébalo en línea!
Explicación
fuente
MATLAB, 16 bytes
Respuesta bastante trivial. Define una función anónima que toma las entradas y calcula la igualdad entre elementos de los vectores resultantes. Un solo cero en una matriz lógica hace que una matriz falsey en MATLAB.
fuente
[true,false]
, por ejemplo , gracias por enseñarme =)[]
implícito casi pero no del todo (la matriz vacía es diferente)all()
en la entrada deif
,while
etc.MATLAB, 38 bytes
Devuelve 1 o 0.
MATLAB, 30 bytes
Devoluciones
como un valor de verdad. Un valor falso es un vector similar con cualquiera o todos los valores 0 en lugar de 1.
fuente
isequal
puede acortar la función==
?isequal
necesitaría @HyperNeutrino si la producción fuera necesariatrue
ofalse
no un valor verdadero o falso. Tal como está el desafío, de==
hecho es suficiente.C ++,
225203 bytes¡Gracias a @Cort Ammon y @Julian Wolf por guardar 22 bytes!
Pruébalo en línea!
fuente
using std::vector;
podría golf dos bytes de esto. Cuesta 18 bytes, pero puede eliminar 4std::
s, ahorrando 20.using V=std::vector<float>;
o similarJulia, 17 bytes
Pruébalo en línea!
fuente
Python 2.7, 33 bytes
entrada: m = matriz, s = escalar, e = valor propio. M y s son matrices numpy
fuente
import np
para que sea válidoprint(m,s,e)
afirmación no hubiera funcionado porque las variablesm
,s
ye
fueron sin asignación / definida. Además, puede eliminar el espacio después de los dos puntos. Además, puede eliminar la parte `como n` y usarlanumpy
más adelante; ya que solo lo usa una vez, usar el nombre completo realmente guarda un byte.all
lugar deany
? Y yo piensos
es el vector, no el escalar, a menos que me falte algoPython 3 ,
9670 bytes¡No hay incorporaciones para la multiplicación de vector matriz o vector escalar!
Pruébalo en línea!
-26 bytes usando
zip
gracias a @LeakyNun!fuente
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
Pruébalo en línea!
fuente
R,
3025 bytesFunción anónima, bastante sencilla. Devoluciones
TRUE
oFALSE
.fuente
ok, 12 bytes
Esta es una función, toma en cuenta
[matrix;vector;scalar]
.Esto no funciona en k por las mismas razones que
3.0~3
da0
como resultado.Lo siguiente funciona en k , con 14 bytes :
fuente
Axioma, 27 bytes
ceremonias
fuente
@Boolean
?Python, 26 bytes
a
yb
son matrices numpy,c
es un entero.Pruébalo en línea!
fuente
c*b
realmente necesarios los parens ?c*b
tiene más de 1000 elementos, NumPy reemplazará la mayoría de los elementos con...
. Manifestación.Clojure, 60 bytes
Esto comprueba que todos los deltas son cero, colapsándose así en el conjunto de cero. Ejemplo de llamada:
fuente