1 | initial version |

Hello,

It is sad that in Sage, it is not yet possible to play with the vector space of matrices. One workaround is to use tensorial product which does exactly what you want. Let us take the following example

```
sage: A = matrix([[0,0,1],[1,1,0],[1,0,-3]])
sage: B = matrix([[1,0,-1],[0,0,1],[0,2,2]])
sage: AA = A.tensor_product(identity_matrix(3))
sage: BB = identity_matrix(3).tensor_product(B.transpose())
```

The matrices AA and BB are 9x9 matrices that correspond to matrix multiplication seen on vectors:

```
sage: print AA
[ 0 0 0| 0 0 0| 1 0 0]
[ 0 0 0| 0 0 0| 0 1 0]
[ 0 0 0| 0 0 0| 0 0 1]
[--------+--------+--------]
[ 1 0 0| 1 0 0| 0 0 0]
[ 0 1 0| 0 1 0| 0 0 0]
[ 0 0 1| 0 0 1| 0 0 0]
[--------+--------+--------]
[ 1 0 0| 0 0 0|-3 0 0]
[ 0 1 0| 0 0 0| 0 -3 0]
[ 0 0 1| 0 0 0| 0 0 -3]
```

You can check

```
sage: X = matrix([[1,0,0],[1,1,1],[1,2,-1]])
sage: v = vector(X.list())
sage: (A*X).list() == (AA*v).list()
True
sage: (X*B).list() == (BB*v).list()
True
```

Then you can solve your problem with standard linear algebra

```
sage: C = AA - BB
sage: V = [matrix(3,3,v.list()) for v in C.right_kernel().basis()]
sage: m = V[0]
sage: print m
[0 0 0]
[3 2 1]
[0 0 0]
sage: A * m == m * B
True
```

Vincent

2 | No.2 Revision |

Hello,

It is sad that in Sage, it is not yet possible to play with the vector space of matrices. One workaround is to use tensorial product which does exactly what you want. Let us take the following example

```
sage: A = matrix([[0,0,1],[1,1,0],[1,0,-3]])
sage: B = matrix([[1,0,-1],[0,0,1],[0,2,2]])
sage: AA = A.tensor_product(identity_matrix(3))
sage: BB = identity_matrix(3).tensor_product(B.transpose())
```

The matrices AA and BB are 9x9 matrices that correspond to matrix multiplication seen on vectors:

```
sage: print AA
[ 0 0 0| 0 0 0| 1 0 0]
[ 0 0 0| 0 0 0| 0 1 0]
[ 0 0 0| 0 0 0| 0 0 1]
[--------+--------+--------]
[ 1 0 0| 1 0 0| 0 0 0]
[ 0 1 0| 0 1 0| 0 0 0]
[ 0 0 1| 0 0 1| 0 0 0]
[--------+--------+--------]
[ 1 0 0| 0 0 0|-3 0 0]
[ 0 1 0| 0 0 0| 0 -3 0]
[ 0 0 1| 0 0 0| 0 0 -3]
```

You can check

```
sage: X = matrix([[1,0,0],[1,1,1],[1,2,-1]])
sage: v = vector(X.list())
sage: (A*X).list() == (AA*v).list()
True
sage: (X*B).list() == (BB*v).list()
True
```

Then you can solve your problem with standard linear algebra

```
sage: C = AA - BB
sage: V = [matrix(3,3,v.list()) for v in C.right_kernel().basis()]
sage: m = V[0]
sage: print m
[0 0 0]
[3 2 1]
[0 0 0]
sage: A * m == m * B
True
```

Of course you still have to play with the basis to find an invertible solution... but it might not exists as in my example above.

Vincent

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.