En este desafío, se le dará una matriz cuadrada A, un vector vy 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 mx ntiene mfilas y ncolumnas. Podemos imaginar una matriz mx ncomo mvectores de longitud n(si tomamos las filas).
La multiplicación matriz-vector se define entre una matriz mx ny un nvector tamaño . Si multiplicamos una matriz mx ny un nvector de tamaño , obtenemos un mvector de tamaño . El ivalor -th en el vector resultante es el producto de punto de la ifila -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 vy ves un vector propio correspondiente a λ si y solo si Av = λv . (Donde Aves la multiplicación matriz-vector y λvla 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
vpodrí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,whileetc.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
isequalpuede acortar la función==?isequalnecesitaría @HyperNeutrino si la producción fuera necesariatrueofalseno 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 nppara que sea válidoprint(m,s,e)afirmación no hubiera funcionado porque las variablesm,syefueron 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 usarlanumpymás adelante; ya que solo lo usa una vez, usar el nombre completo realmente guarda un byte.alllugar deany? Y yo piensoses 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
zipgracias 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
TRUEoFALSE.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~3da0como resultado.Lo siguiente funciona en k , con 14 bytes :
fuente
Axioma, 27 bytes
ceremonias
fuente
@Boolean?Python, 26 bytes
aybson matrices numpy,ces un entero.Pruébalo en línea!
fuente
c*brealmente necesarios los parens ?c*btiene 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