Sistema de dos ecuaciones con PHP.
Resumen.
En este artículo vamos a ver como resolveremos un sistema de dos ecuaciones de primer grado con dos incógnitas usando PHP. Seguro que a mas de uno esto lo trajo de cabeza en sus años de estudiante, y ahora vamos a recordar uno de los métodos, el método de reducción, que es el más simple y el que primero se aprendimos que es perfecto para aplicarlo mediante un lenguaje de programación.Artículo.
Programar la resolución de un sistema de ecuaciones puede resultar de entrada un tanto complicado, pero no lo es tanto como parece. Lo primero que tenemos que hacer es plantearnos un sistema, y resolverlo de forma manual, analizar los pasos realizados y trasladarlos a PHP.
Un sistema de ecuaciones toma la forma:
Para resolver un sistema de ecuaciones como este hay tres métodos: reducción, sustitución e igualación. El más simple de todos y el que primero se aprende es el método de reducción, pero este método para el cálculo manual puede no resultar demasiado práctico. Veamos un caso.
El método de reducción consiste en conseguir que el coeficiente que multiplica a una de las incógnitas tenga el mismo valor absoluto y diferente signo, algo así como esto:
Multiplicamos la primera ecuación por 5 y la segunda por 2, y el resultado es:
Si sumamos las dos ecuaciones, obtenemos:
Si, por ejemplo, en la segunda ecuación sustituimos la X por su valor tenemos:
Y ya lo hemos resuelto. X = 2 e Y = 4.
Aunque este ejemplo es muy sencillo, la lógica se basa el multiplicar el coeficiente de la incógnita por el mínimo común múltiplo. Se hace así para no obtener valores demasiado altos. Pero como a PHP le da lo mismo multiplicar por un valor que por otro, hacemos lo siguiente:
Y obtenemos:
Lo que hemos hecho ha sido calcular las ecuaciones equivalentes multiplicando la primera ecuación por el coeficiente de Y de la segunda, y en la segunda ecuación, por el coeficiente de Y en la primera y lo cambiamos de signo multiplicándolo por -1. En este caso concreto, el mínimo común múltiplo era sencillo de calcular, pero no siempre ocurre lo mismo, por lo que hemos buscado un procedimiento que siempre nos de el resultado que precisamos.
Así, la función PHP resultante quedaría de la siguiente manera:
Como podemos ver, esta función tiene 7 parámetros de entrada, 3 para cada coeficiente de cada una de las dos ecuaciones y un séptimo, que será el número máximo de decimales que deseamos obtener. Los coeficientes serán números reales, salvo $rd que tendrá un valor natural inferior a 15.
Una puntualización muy importante, la variable $a1 debe ser distinta de cero. Solucionar esto es sencillo, cambiar la posición de las ecuaciones tal y como se expresa en los comentarios del código. El motivo es sencillo, no se puede dividir por 0. El cambio de posición de las ecuaciones no altera el resultado.
Alguien estará pensando, ¿y que pasa si $a1 y $a2 valen 0? La respuesta es sencilla, en ese caso no estamos ante un sistema de dos ecuaciones con dos incógnitas, estamos ante un sistema de dos ecuaciones con una incógnita, lo cual no tiene sentido matemático.
Por último indicar que, si bien en otros artículos hemos desaconsejado el uso del método REQUEST “$a1 = $_REQUEST['a1'];”, para casos como este, puede ser válido, ya que la información que se envía no tiene relevancia que pueda comprometer la seguridad. El segundo método seria GET, que es por el que yo personalmente me decanto “$a1 = $_GET['a1'];”, ahora esta decisión queda en vuestra mano.
Un sistema de ecuaciones toma la forma:
Para resolver un sistema de ecuaciones como este hay tres métodos: reducción, sustitución e igualación. El más simple de todos y el que primero se aprende es el método de reducción, pero este método para el cálculo manual puede no resultar demasiado práctico. Veamos un caso.
3X -2Y = -2
-4X + 5Y = 12
El método de reducción consiste en conseguir que el coeficiente que multiplica a una de las incógnitas tenga el mismo valor absoluto y diferente signo, algo así como esto:
Multiplicamos la primera ecuación por 5 y la segunda por 2, y el resultado es:
15X -10Y = -10 | * 5
-8X + 10Y = 24 | *2
Si sumamos las dos ecuaciones, obtenemos:
7X + 0Y = 14
X = 14/7
X = 2
Si, por ejemplo, en la segunda ecuación sustituimos la X por su valor tenemos:
-16 +10Y = 24
10Y = 16 + 24
10Y = 40
Y = 4
Y ya lo hemos resuelto. X = 2 e Y = 4.
Aunque este ejemplo es muy sencillo, la lógica se basa el multiplicar el coeficiente de la incógnita por el mínimo común múltiplo. Se hace así para no obtener valores demasiado altos. Pero como a PHP le da lo mismo multiplicar por un valor que por otro, hacemos lo siguiente:
3X -2Y = -2 | *5
-4X + 5Y = 12 | *(-2*-1) = 2
Y obtenemos:
15X -10Y = -10
-8X +10Y = 24
7X = 14
X = 2
Lo que hemos hecho ha sido calcular las ecuaciones equivalentes multiplicando la primera ecuación por el coeficiente de Y de la segunda, y en la segunda ecuación, por el coeficiente de Y en la primera y lo cambiamos de signo multiplicándolo por -1. En este caso concreto, el mínimo común múltiplo era sencillo de calcular, pero no siempre ocurre lo mismo, por lo que hemos buscado un procedimiento que siempre nos de el resultado que precisamos.
Así, la función PHP resultante quedaría de la siguiente manera:
<?php
// Sistema de dos ecuaciones y dos incognitas
/*
Desarrollado por ArtesaniaWeb.ES
Mas informacion en la URL
https://www.artesaniaweb.es/articulo.php?titulo=sistema_de_dos_ecuaciones_con_php-8m1nv
*/
function Sistema_1g($a1,$b1,$c1,$a2,$b2,$c2,$rd){
// Ecuacion 1
$ta1 = $a1 * $a2; $tb1 = $b1 * $a2; $tc1 = $c1 * $a2;
// Ecuacion 2
$ta2 = $a2 * $a1 * -1; $tb2 = $b2 * $a1 * -1; $tc2 = $c2 * $a1 * -1;
$sol_y = round(($tc1 + $tc2) / ($tb1 + $tb2), $rd); // Valor de X
$sol_x = round(($c1 - ($sol_y * $b1) ) / $a1, $rd); // Valor de Y
$soluciones = array(1=>$sol_x, 2=>$sol_y);
return $soluciones;
}
// Aplicamos la funcion
/*
Otros datos de ejemplo
a b c
2 -3 -9 X = 3
3 1 14 Y = 5
Este sistema tiene solucion
-4 5 12 X = -1.75
0 -2 -2 Y = 1
Pero si cambiamos la posicion de las ecuaciones
NO tendra solucion
0 -2 -2 X = NAN
-4 5 12 Y = 1
*/
// Ecuacion 1
$a1 = 3; $b1 = -2; $c1 = -2;
// Ecuacion 2
$a2 = -4; $b2 = 5; $c2 = 12;
$rd = 4; // Numero de decimales
$calcula_sistema = Sistema_1g($a1,$b1,$c1,$a2,$b2,$c2,$rd);
echo '<pre>';
print_r($calcula_sistema);
echo '</pre>';
$sol_x = $calcula_sistema[1];
$sol_y = $calcula_sistema[2];
// Escribo ecuacion
echo "
Sistema a resolver: <br />
$a1 X $b1 Y = $c1 <br />
$a2 X $b2 Y = $c2 <br />
<br />
Soluciones <br />
X = $sol_x <br />
Y = $sol_y <br />
";
?>
Como podemos ver, esta función tiene 7 parámetros de entrada, 3 para cada coeficiente de cada una de las dos ecuaciones y un séptimo, que será el número máximo de decimales que deseamos obtener. Los coeficientes serán números reales, salvo $rd que tendrá un valor natural inferior a 15.
Una puntualización muy importante, la variable $a1 debe ser distinta de cero. Solucionar esto es sencillo, cambiar la posición de las ecuaciones tal y como se expresa en los comentarios del código. El motivo es sencillo, no se puede dividir por 0. El cambio de posición de las ecuaciones no altera el resultado.
Alguien estará pensando, ¿y que pasa si $a1 y $a2 valen 0? La respuesta es sencilla, en ese caso no estamos ante un sistema de dos ecuaciones con dos incógnitas, estamos ante un sistema de dos ecuaciones con una incógnita, lo cual no tiene sentido matemático.
Por último indicar que, si bien en otros artículos hemos desaconsejado el uso del método REQUEST “$a1 = $_REQUEST['a1'];”, para casos como este, puede ser válido, ya que la información que se envía no tiene relevancia que pueda comprometer la seguridad. El segundo método seria GET, que es por el que yo personalmente me decanto “$a1 = $_GET['a1'];”, ahora esta decisión queda en vuestra mano.
Tags: Ecuación || sistema || incógnitas || matemáticas