#
**Gaël**
| **Ga**uss **El**imination

An educational tool for experimenting with matrices and the Gauss method.

① Edit or generate a random matrix.
② Operate by clicking cells.
③ Have fun!

JavaScript seems to be disabled.

Your Operations: None.

## Matrix data of your operations

We have S A T = B, where A is the initial matrix and B is the current matrix.

Row operations 0.

Col operations 0.

## As a reminder, here is the initial matrix.

## The matrix S accumulates all row operations, acting on A from the left.

## The inverse matrix S^{-1} is obtained by inverting all row operations.

## The matrix T accumulates all column operations, acting on A from the right.

## The inverse matrix T^{-1} is obtained by inverting all column operations.

## Gaël version 0.6 – Instructions

Copyright © 2020–2024 Michael Eisermann, Institut für Geometrie und Topologie (IGT), Universität Stuttgart. You may use my work under the conditions of the Creative Commons Attribution-NonCommercial-ShareAlike License (CC BY-NC-SA 4.0). This interactive calculation tool is purely educational and not intended for any other purpose. It uses JavaScript with native BigInt as provided by your browser.

**What is going on here?**
Gaussian elimination, named after Carl Friedrich Gauss (1777–1855),
is an algorithm for solving systems linear equations over a field.
It readily extends to euclidean domains such as the integers or polynomials over a field.
It proceeds by a sequence of elementary operations
performed on the rows or columns of the coefficient matrix.
This method can also be used to calculate the rank of a matrix, its determinant or its inverse.
The Gaël webpage does the arithmetic and bookkeeping of coefficients for you,
so you can focus on learning matrix operations and easily experiment with them.

**What do the buttons do?**
The buttons are intended to be self-explaining.
*Edit/Resume* [Enter]: Edit the size and the coefficients of the matrix.
The global denominator in the top left corner applies to all entries in the matrix.
*Random* [alt+r]: Randomly set a key and generate the matrix from it.
*Generate* [alt+g]: Generate the matrix from the given key for reproducible randomness.
Special: Vandermonde, Hilbert.
*Clear* [alt+c]: Clear the matrix while keeping its size.
*Reset*: Reset all data, including the size and the history.
*History* [alt+f/p/n/l]: Navigate the archive; first/previous/next/last.
Alternatively you can use [ctrl+z] and [ctrl+y], which seems more standard.
Your browser console [ctrl+shift+i] shows a detailed log of all operations;
press [ctrl+c] to clear the console.
Press [alt+w] to toggle the display style between standard and wide.

**How do I manipulate a matrix?**
Right click on the matrix edits the cell in focus.
Left click triggers a specific action according to the cell position.
*Click top left*: Transpose the matrix.
*Click on coefficient* (inner cell):
mark this cell as source or target for the following matrix operations.

**Row operations:**
Mark positions \( (i,0) \) and \( (j,0) \) to permute rows \( i \) and \( j \).
Mark positions \( (i,j) \) and \( (i,0) \) to normalize coefficient \( (i,j) \) by scaling row \( i \).
Mark positions \( (i,k) \) and \( (j,k) \) in the same column \( k \)
to add a multiple of row \( i \) to row \( j \) in order to reduce coefficient \( (j,k) \).

**Column operations:**
Mark positions \( (0,i) \) and \( (0,j) \) to permute columns \( i \) and \( j \).
Mark positions \( (i,j) \) and \( (0,j) \) to normalize coefficient \( (i,j) \) by scaling column \( j \).
Mark positions \( (k,i) \) and \( (k,j) \) in the same row \( k \)
to add a multiple of column \( i \) to column \( j \) in order to reduce coefficient \( (k,j) \).

**What are symmetric operations?**
Perhaps your matrix represents a symmetric bilinear form over a field
and you want to diagonalize it? We have got you covered!
With the symmetric option, each action is carried out symmetrically on rows and columns.
(If this is impossible, the action is rejected.
Note that the matrix does not have to be symmetric;
this comes handy when working with an extended matrix.)

**What is additive mode?**
This is still experimental. In additive mode you operate
by negation and addition only, so you work over the integers,
acting by \(\GL_m\Z\) from the left with row operations
and by \(\GL_n\Z\) from the right with columns operations.
This can be useful to create exercises with matrices having certain properties:
Start with your desired result, say in reduced row echelon form,
and scramble the matrix by some additive operations.

**Support?**
The Gaël webpage aims to be playful and helpful at the same time.
Your active support and constructive criticism are always very welcome.
My current wish list includes:
(0) Review the existing code and add some minor extensions.
(1) Make the webpage as user friendly as possible and optimize the layout.
(2) Add constructors for special matrices, e.g. tridiagonal.
You can help by suggesting suitable functionality, or by extending the existing code!

**History.**
I started experimenting with this educational tool in 2020 for my course on Linear Algebra.
Back then, JavaScript was the only viable option running natively in the browser.
Since then, WebAssembly has made spectacular progress; perhaps one day
I migrate this project to Rust; or perhaps you feel inspired to do so.

Counting 2712 page hits since 2020-11-01.