1 | initial version |

Hint: you should learn about the *rank* and/or the *kernel* of a linear map (or a matrix,n in which case you should precise whether it is left or right).

2 | No.2 Revision |

Hint: you should learn about the *rank* and/or the *kernel* of a linear map (or a ~~matrix,n ~~matrix, in which case you should precise whether ~~it ~~the action is left or right).

3 | No.3 Revision |

Hint: you should learn about the *rank* and/or the *kernel* of a linear map (or a matrix, in which case you should precise whether the action is left or ~~right).~~right). Both are implemented in Sage.

4 | No.4 Revision |

~~Hint: you ~~You should ~~learn about the ~~use the *rank* and/or *kernel* of a linear map (or a matrix, in which case you should precise whether the action is left or right). Both are implemented in Sage.

Here is an example:

```
sage: A = random_matrix(ZZ,3,4)
sage: A
[ 1 -3 -2 0]
[ 2 1 1 -1]
[-31 1 -12 1]
sage: b = vector((1,1,1))
sage: a = A.solve_right(b)
sage: a
(26/29, 43/29, -66/29, 0)
sage: A*a == b
True
```

So, in this case there is a solution to the equation you are willing to solve (if there is no solution, Sage will raise a `ValueError: matrix equation has no solutions`

, so you have to use a `try: except:`

statement to deal with that).

Now, the set of solutions is the set of `a+c`

where `c`

belongs to the kernel of `A`

. You can get this kernel as follows:

```
sage: K = A.right_kernel()
sage: K
Free module of degree 4 and rank 1 over Integer Ring
Echelon basis matrix:
[ 37 69 -85 58 ]
```

And check the previous statement:

```
sage: k = K.basis()[0]
sage: k
(37, 69, -85, 58)
sage: A*k
(0, 0, 0)
sage: A * (a+k) == b
True
sage: A * (a+42*k) == b
True
```

5 | No.5 Revision |

You should use the *kernel* of a linear map (or a matrix, in which case you should ~~precise ~~specify whether the action is left or right). Both are implemented in Sage.

Here is an example:

```
sage: A = random_matrix(ZZ,3,4)
sage: A
[ 1 -3 -2 0]
[ 2 1 1 -1]
[-31 1 -12 1]
sage: b = vector((1,1,1))
sage: a = A.solve_right(b)
sage: a
(26/29, 43/29, -66/29, 0)
sage: A*a == b
True
```

So, in this case there is a solution to the equation you are ~~willing ~~trying to solve (if there is no solution, Sage will raise a `ValueError: matrix equation has no solutions`

, so you have to use a `try: except:`

statement to deal with that).

Now, the set of solutions is the set of `a+c`

where `c`

belongs to the kernel of `A`

. You can get this kernel as follows:

```
sage: K = A.right_kernel()
sage: K
Free module of degree 4 and rank 1 over Integer Ring
Echelon basis matrix:
[ 37 69 -85 58 ]
```

And check the previous statement:

```
sage: k = K.basis()[0]
sage: k
(37, 69, -85, 58)
sage: A*k
(0, 0, 0)
sage: A * (a+k) == b
True
sage: A * (a+42*k) == b
True
```

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.