0 votos

Herramienta para hacer álgebra lineal con álgebra en lugar de números

Tengo algunas ecuaciones de álgebra lineal, que son unas pocas líneas sucintas de código pytorch, donde las matrices involucradas tienen dimensiones N y D y N y D suelen ser muy grandes. Yo quería realmente entender lo que están haciendo, así que empezó a trabajar a través de ellos para N=3, D=2. Así que empecé con esto:

  |a  b|   |p  r|   |ap + bq    ar + bs|
  |c  d| x |q  s| = |cp + dq    cr + ds|
  |e  f|            |ep + fq    er + fs|

Un par de largos y tediosos cálculos después, y tras reunir los términos, tuve esto:

 aa(pt+rv) + ab(pu+rw) + ab(qt+sv) + bb(qu+sw)     ac(pt+rv) + ad(pu+rw) + bc(qt+sv) + bd(qu+sw)     ae(pt+rv) + af(pu+rw) + be(qt+sv) + bf(qu+sw)

 ac(pt+rv) + bc(pu+rw) + ad(qt+sv) + bd(qu+sw)     cc(pt+rv) + cd(pu+rw) + cd(qt+sv) + dd(qu+sw)     ce(pt+rv) + cf(pu+rw) + de(qt+sv) + df(qu+sw)

 ae(pt+rv) + be(pu+rw) + af(qt+sv) + bf(qu+sw)     ce(pt+rv) + de(pu+rw) + cf(qt+sv) + df(qu+sw)     ee(pt+rv) + ef(pu+rw) + ef(qt+sv) + ff(qu+sw)

Lo cual fue muy útil, pero yo cortaría uno de los cálculos, y también me hizo ver que quiero saber cómo se ve cuando D y N son ligeramente más grandes.

¿Hay algún software o biblioteca que pueda utilizar para que el ordenador haga este trabajo duro por mí? Es decir, donde escribiría este código:

x = torch.tensor([ [1.0,2], [3,4], [5,6] ]) 
M = torch.tensor([ [0.1, 0.3], [0.7, 0.5] ])
y = x.matmul(M)

Quiero escribir algo como:

x = torch.tensor([ ['a', 'b'], ['c', 'd'], ['e', 'f'] ]) 
M = torch.tensor([ ['p', 'r'], ['q', 's'] ])
y = x.matmul(M)

Si se reunió como términos para mí que sería una ventaja, pero no es esencial. No está vinculado a un lenguaje informático en particular, por lo que cualquiera de Python, R, Octave/Matlab, C++, etc.

0voto

Algirdas Puntos 1

Gracias a la insinuación en los comentarios, he echado un vistazo a Sage En concreto dentro de CoCalc .

Para hacer álgebra lineal simbólica se definen las matrices así:

x=matrix(3,2, var('a,b,c,d,e,f'))
M=matrix(2,2, var('p,q,r,s'))
V=matrix(2,2, var('あ,い,う,え'))

(Esa última línea era sólo para confirmar que puedo algo más que a..z; de hecho sólo identificadores válidos de Python están permitidos. Lo que significa que hay un montón de Unicode disponible, pero cosas como los números en círculo, las letras negativas y los emoji no estaban permitidos).

* hace la multiplicación de matrices como era de esperar, y hay una función para ampliar paréntesis y una selección de funciones para simplificar .

(Primero miro a Sage, ya que es de código abierto, y está basado en Python; parece que hay una serie de otras opciones .)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X