A continuación, mostraré como obtener la solución a un sistema de ecuaciones lineales por el método de Gauss. Pero claro, no necesitamos calculadoras ni lápices ni papel… todo lo hará nuestro script de PHP.

Crearemos primero una interfaz sencilla, para conocer primero el numero de filas y columnas, y después los valores de la matriz. Ojo, si es un sistema común, se sobreentiende que el número de filas es menor por uno al número de columnas. De manera que la matriz siempre debe quedar del orden (n,n+1).

Código de la interfaz inicial HTML:

<form action="gauss.php" method="post">
  <fieldset>
    <legend>Orden de la matriz</legend>
    <table>
      <tr>
        <td><p>Numero de filas</p></td>
        <td><p><input name="Matriz[filas]" /></p></td>
      </tr>
      <tr>
        <td><p>Numero de columnas</p></td>
        <td><p><input name="Matriz[columnas]" /></p></td>
      </tr>
      <tr>
        <td colspan="2">
          <p><input type="submit" value=" Crear matriz "></p>
        </td>
      </tr>
    </table>
  </fieldset>
</form>Lenguaje del código: HTML, XML (xml)

Una vez establecido el orden de la matriz, continuamos leyendo los valores la misma. Para esto, cacharemos los valores en un archivo PHP y crearemos dinamicamente una tabla con campos de texto para introducir los valores de la matriz. El archivo se llama en este caso gauss.php.

<?php
$filas = $_POST['Matriz']['filas'];
$columnas = $_POST['Matriz']['columnas'];
?>
 
<form action="gaussiana.php" method="post">
	<table>
	<?php for($i = 1; $i <= $filas; $i++ ) { ?>
		<tr>
		<?php for($j = 1; $j <= $columnas; $j++ ) { ?>
		    <td>
			<input type="text" name="A[<?php echo $i ?>][<?php echo $j ?>]" />
		    </td>
		<?php } ?>
		</tr>
	<?php } ?>
		<tr>
			<td colspan="<?php echo $columnas ?>">
				<input type="submit" class="submit" value=" Resolver matriz"/>
			</td>
		</tr>
	</table>
	<input type="hidden" name="filas" value="<?php echo $filas ?>"/>
	<input type="hidden" name="columnas" value="<?php echo $columnas ?>"/>
</form>
 Lenguaje del código: PHP (php)

Desde el form del archivo anterior llamamos a otro archivo que se llama gaussiana.php, ahi llegarán todos los valores de la matriz. Desde ahí mismo también instanciaremos nuestra clase que será la que resuelva la matriz.

En este archivo debe haber una inclusión al archivo donde vayamos a poner la clase -en caso de tenerla aparte- de manera que, mínimamente, gaussiana.php debe contener:

<h1>Matriz para resolver el sistema por el método de Gauss</h1>

<p>Solución:</p>

<?php
	$matriz = $_POST['A'];

	include 'class.gauss.php';
	$method = new Gauss($matriz);
	$method->getGaussSolution();
?>

<p><a href="https://labs.autumn.ws/gauss/">Resolver otro sistema</a></p>Lenguaje del código: PHP (php)

Crearemos un nuevo archivo, llamado class.gauss.php y ahora sí viene lo bueno porque aquí irá la clase que resuelve la matriz. Tiene 3 propiedades, un constructor, el método de solución y un método de impresión (el método de impresión se manda llamar automáticamente cada vez que se modifica una fila para que de este modo pueda verse el progreso de la solución):

<?php
declare(strict_types=1);

class Gauss {

	private int $filas;
	private int $columnas;
	private array $matriz;

	/**
	 * Constructor. Establace la matriz a resolver,
	 * obtiene numero de filas y columnas.
	 *
	 * @param array Matriz con valores
	 * @return void
	 */
	public function __construct($m){
		$this->matriz = $m;
		$this->filas = count($m);
		$this->columnas = count($m[1]);
	}
	
	/**
	 * Obtiene la solución de la matriz por el método de Gauss
	 *
	 * @param void
	 * @return Array La matriz resultante
	 */
	public function getGaussSolution(): array {
		$this->print();
		for($x = 1; $x <= $this->filas; $x++){
			$pivote = $this->matriz[$x][$x];
			for($i = $x; $i <= $this->filas; $i++ ){
				for($j = $x; $j <= $this->columnas; $j++ ){
					if($i == $x) {
						$this->matriz[$i][$j] /= $pivote;
						continue;
					} elseif($j == $x && $i != $x){
						$aux = $this->matriz[$i][$j] * (-1);
					}
					$this->matriz[$i][$j] = (float) $this->matriz[$x][$j] * $aux + $this->matriz[$i][$j];
				}
				$this->print();
			}
		}
		for($x = $this->filas; $x > 0; $x--){
			$pivote = $this->matriz[$x][$x];
			for($i = $x-1; $i > 0; $i-- ){
				for($j = $x; $j <= $this->columnas; $j++ ){
					if($j == $x){
						$aux = $this->matriz[$i][$j] * (-1);
					}
					$this->matriz[$i][$j] = (float) $this->matriz[$x][$j] * $aux + $this->matriz[$i][$j];
				}
				$this->print();
			}
		}
		return $this->matriz;
	}
	
	/**
	 * Imprime la matriz en una tabla, si solo quieres obtener la matriz
	 * resultante puedes omitir esto comentando las 3 llamadas
	 * al método Gauss::print() desde Gauss::getGaussSolution()
	 *
	 * @param void
	 * @return void
	 */
	private function print(): void {
		echo '<table class="w3-table-all">';
		for($i = 1; $i <= $this->filas; $i++ ){
			echo '<tr>';
			for($j = 1; $j <= $this->columnas; $j++ ){
				echo '<td>';
				$ij = (float) $this->matriz[$i][$j];
				echo '<p>'.round($ij, 2).'</p>';
				echo '</td>';
			}
			echo '</tr>';
		}
		echo '</table>';
	}
}Lenguaje del código: PHP (php)

Es todo… parece que no pero, estoy seguro que a más de uno le va a servir… así como a mí.

Dejo aquí el demo: https://labs.autumn.ws/gauss/