Método de Gauss en PHP
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 XHTML:
<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> </fieldset> </form>
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 ?>">
<p><input type="submit" class="submit" value=" Resolver matriz"
></p>
</td>
</tr>
</table>
<input type="hidden" name="filas" value="<?php echo $filas ?>"/>
<input type="hidden" name="columnas" value="<?php $columnas ?>"/>
</form>
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, minimamente, gaussiana.php debe contener:
<?php $A = $_POST['A']; $filas = $_POST['filas']; $columnas = $_POST['columnas']; $method = new Gauss(); $method->setRows( $filas ); $method->setCols( $columnas ); $method->setMatrix( $A ); $method->getGaussSolution(); ?>
Ahora sí, viene lo bueno: la clase que resuelve la matriz. Tiene 3 propiedades, 3 métodos set, el método de solución y un método de impresión:
class Gauss {
private $filas;
private $columnas;
private $matriz;
/**
* Establece el número de filas de la matriz
* @param int filas
* @return void
*/
public function setRows( $filas ){
$this->filas = $filas;
}
/**
* Establece el número de columnas de la matriz
* @param int columnas
* @return void
*/
public function setCols( $columnas ){
$this->columnas = $columnas;
}
/**
* Establece la matriz a la que se aplicará el método de solución
* @param array matriz
* @return void
*/
public function setMatrix( $matriz ){
$this->matriz = $matriz;
}
/**
* Obtiene la solución de la matriz por el método de Gauss
* @param void
* @return void
*/
public function getGaussSolution(){
$this->mostrarMatriz();
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] =
$this->matriz[$x][$j] * $aux
+ $this->matriz[$i][$j];
}
$this->mostrarMatriz();
}
}
for($x = 4; $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] =
$this->matriz[$x][$j] * $aux
+ $this->matriz[$i][$j];
}
$this->mostrarMatriz();
}
}
}
/**
* Imprime la matriz en una tabla
* @param void
* @return void
*/
private function mostrarMatriz(){
echo '<table>';
for($i = 1; $i <= $this->filas; $i++ ){
echo '<tr>';
for($j = 1; $j <= $this->columnas; $j++ ){
echo '<td>';
echo '<p>'.$this->matriz[$i][$j].'</p>';
echo '</td>';
}
echo '</tr>';
}
echo '</table>';
}
}
Es todo… parece que no pero, estoy seguro que a más de uno le va a servir… así como a mi.
Relacionados
Tags: Gauss, PHP, Programacion
Siéntete libre de dejar tu comentario.
Comentarios
Hola, estube tratando de correr el pogramaica y me encuentro con un problema, es que cuando me tendria que mostar la matriz resuelta no me muestra nada, osea gaussiana.php no me muestra nada. Otro duda es; yo a la classe la tengo aparte, hice la inclucion pero quiero saber si esta bien. Gracias espero una respueta
Hola Nelson, pues no sé cuál podría ser el error contigo. Si estás ejecutando el método getGaussSolution() ahí está la llamada al método que hace la impresión de la matriz.
Falta que expliques si el PHP está tirando algún error o si el error es de semántica.
Hola, Abel, gracias por responder, yo segui los pasos tal cual vos indicaste para utilizarlo. Solo que cree otro archivo aparte para poner la el codigo de la clase que vos das y lo llame: “Classgauss.php”
En el archivo “gaussiana.php” puse el codigo que indacas en el post y le agregue un: include(“ClassGauss.php”), solo eso agregue al codigo de gaussiana.php; Ahora bien, ejecuto y pongo los rangos de la matrz, luego los valores y cuando le doy en Resolver matriz, pasa a la pantalla siguiente pero me la muestra en blanco, ni datos ni la tabla dibujada, solo todo en blanco.
Bueno Abel desde ya graias por responderme, y espero que esta informacion te aya servido para mandarme un nuva repuesta.
Gracias amigo me ha servido de guía para un programa similar, mmm pero tengo un error con tu programa, lo que sucede es que no veo el resultado, pero eta bueno. Gracias, espero y pongas mas codigos, se te agradecen.
Eres el segundo que dice que no ve el resultado… :S no sé que pasará, quizás tuve algún error a la hora pasar de los archivos fuentes a aquí…
Voy a checarlo a ver qué es… pero de verdad sí funciona, de eso estoy satisfecho
[...] El método es estático pues está dentro de una clase final (no instanciable ni extendible). Espero que a más de uno le sirvan así como les sirvieron tambien los scripts para resolver matrices con el método de Gauss en PHP. [...]
encontré el error
<?php for($i = 1; $i
<?php for($j = 1; $j
<input type="text" name="A[][]“/>
<td colspan="”>
<input type="hidden" name="filas" value="”/>
<input type="hidden" name="columnas" value="”/>
en la linea 25 faltaba la impresion de las columnas, aqui ya esta bien, muchas gracias por este gran aporte, me sirvió de mucho.


esta bien facil solo intentelo xD
aggrreee loco