Sistema de ecuaciones de 2º grado.

Resumen.

Ya hemos visto cómo resolver un sistema de dos ecuaciones con dos incógnitas cuando estas dos ecuaciones son de primer grado, ahora vamos a ver como resolver un sistema de dos ecuaciones con dos incógnitas cuando una de las ecuaciones es de segundo grado. Esta vez lo haremos por el método de sustitución.

Artículo.

Cuando hablamos sobre como resolver un sistema de dos ecuaciones con dos incógnitas lo hicimos partiendo de que las ecuaciones eran de primer grado. Esto quiere decir que el sistema se plantea bajo el supuesto que la incógnita no tiene una potencia, o si se quiere, la potencia es 1 (X1) siendo por tanto lo que se denomina ecuaciones lineales. Las ecuaciones de segundo grado se diferencian de las de primer grado en que el exponente de la incógnita es 2 (X2) y son por tanto, ecuaciones no lineales.

El planteamiento general de este tipo de ecuaciones es el siguiente:
Sistema de ecuaciones de segundo grado
Y alguien dirá, yo no veo ningún cuadrado en esa expresión. Y si es cierto, pero cuando procedemos a despejar por ejemplo la X en la ecuación 1 tenemos lo siguiente:

a1X = – b1Y + c1

y al sustituir en la ecuación 2, tenemos lo siguiente:

(- b1Y + c1) * bY2 – c2 = 0

Por consiguiente:

- bY2 + (bY * c) – c = 0

Como podemos ver, ahora sí que tenemos una ecuación de 2º grado.

Resolviendo esta ecuación de segundo grado, obtenemos los valores de Y en la ecuación, que pueden ser: sin solución, una solución o dos soluciones. Sustituyendo la Y por sus respectivos valores, en la ecuación 1, por ejemplo, obtenemos el valor de X para cada valor de Y.

Llegados a este punto, vamos a ver como trasladamos toda esta tecnoverborrea matemática a PHP. No es tan complicado como parece, y además, ya tenemos una función que nos resuelve ecuaciones de segundo grado, así que gran parte del trabajo, esta hecho.

Sin más preámbulo, el código es el siguiente:
<?php
// Resolvemos un sistema de ecuaciones de segundo grado
/*
Mas informacion en:
https://www.artesaniaweb.es/articulo.php?titulo=sistema_de_ecuaciones_de_2_grado-q5r5l
*/
// Cargamos la funcion que resuelve ecuaciones de segundo grado
function Ecu_2g($a,$b,$c,$rd){
    
$menosb $b * -1
    
$oper1 pow($b2); 
    
$oper2 $a $c
    
$resta $oper1 $oper2
    
$raiz sqrt($resta); 
    
$dosa $a
        
$result1 round(($menosb $raiz) / $dosa$rd);
        
$result2 round(($menosb $raiz) / $dosa$rd);
    
$array_result2g = array(=> $result1=> $result2);
        return 
$array_result2g
}
// Funcion que genera la ecuacion de segundo grado
// y el valor de la incognita restante 
function Sistema_2g($a1,$b1,$c1,$a2,$b2,$c2,$rd){
    
// Optenemos la ecucacion de segundo grado    
    
$a $b1 $a2$b2 * -1;
    
$b $a2 $b2 $c1;
    
$c $a1 $c2 * -1;
    
    
// Guardamos la ecuacion en una variable
    
$ecuacion_2g "$a X<sup>2</sup> $b X $c = 0";
    
// Calculamos la ecuacion de segundo grado y dejamos 
    // todos los decimales, de ahi 15
    
$calcula_ecuacion Ecu_2g($a,$b,$c,15);

    
$soluc_y1 $calcula_ecuacion[1];
    
$soluc_y2 $calcula_ecuacion[2];

    
// Calculamos X1
    
$soluc_x1 $c2 / ($a2 $soluc_y1 $b2);        // Solucion 1 para X

    // Calculamos X2
    
$soluc_x2 $c2 / ($a2 $soluc_y2 $b2);        // Solucion 2 para X
    
    // Generamos el array con todos los resultados y redondeamos las soluciones
    
$sol_sistem_2g = array($ecuacion_2ground($soluc_x2$rd), round($soluc_y2$rd), round($soluc_x1$rd), round($soluc_y1$rd));
        return 
$sol_sistem_2g;
}
// Aplicamos la funcion
// =====================================================
// --------------- INICIO DATOS DE ENTRADA
// Ecuacion 1            
$a1 3;    $b1 4;    $c1 18;
// Ecuacion 2
$a2 1;    $b2 2;    $c2 12;

$rd 4;    // Numero de decimales
// --------------- FIN DATOS DE ENTRADA

$calcula_sistema_2g Sistema_2g($a1,$b1,$c1,$a2,$b2,$c2,$rd);

    
// Imprimimos el array con todos los resultados
    
echo '<pre>';
    
print_r($calcula_sistema_2g);
    echo 
'</pre>';

// Soluciones

echo "
<h3>Sistema a calcular</h3>
$a1 X<sub>1</sub> $b1 Y<sub>1</sub> = $c1 <br />
$a2 X<sub>2</sub> * $b2 Y<sub>2</sub> = $c2 <br />

<h3>Ecuacion de segundo grado que genera</h3>
$calcula_sistema_2g[0]

<h3>Soluciones</h3>
<b>X<sub>1</sub></b> = 
$calcula_sistema_2g[1] <b>Y<sub>1</sub></b> = $calcula_sistema_2g[2]<br />
<b>X<sub>2</sub></b> = 
$calcula_sistema_2g[3] <b>Y<sub>2</sub></b> = $calcula_sistema_2g[4]
"
;
?>
Lo primero que hemos hecho a sido cargar la función para resolver ecuaciones de segundo grado antes mencionada. Tras esto, creamos una nueva función para el cálculo de las incógnitas del sistema.

Lo segundo es el cálculo de los coeficientes a, b y c de la ecuación, una vez los tenemos, guardamos en una variable $ecuacion_2g la ecuación de segundo grado para tener la opción de presentarla junto con las soluciones del sistema.

Seguidamente aplicamos la función para resolver la ecuación de segundo grado, con una particularidad, le hemos asignado 15 al número de decimales. El motivo, muy simple, hacer redondeos antes de llegar al resultado final restará precisión a los cálculos.

Un inciso: la función que calcula la ecuación de segundo grado podríamos haberla cargada con include(), no seria problema alguno, pero si dos funciones están en un mismo archivo podemos guardarlas las dos en el mismo archivo y tras la carga del archivo, bien podemos llamar a una, a la otra o a las dos. En este caso, en la segunda función Sistema_2g() llama a la primera, con lo que no tenemos que estar pendiente de incluirla. Otra posibilidad seria incluir la función Ecu_2g() dentro de la función Sistema_2g(), pero si así lo hiciéramos, no podríamos llamar a Ecu_2g() dado que Sistema_2g() no se estaría ejecutando.

A continuación extraemos las soluciones para la incógnita Y, y a partir de esta, calculamos los valores de la incógnita X. Y con esto, ya tenemos toda la información y cálculos hechos.

Por ultimo, y para poder devolver todos estos datos como resultado de la función, los guardamos en la variable tipo array $sol_sistem_2g, siendo este el momento en que aplicamos la función de redondeo round().

Para la extracción de resultados de la función debemos tener en cuenta que es una variable tipo array, en la que con la key 0 devuelve la ecuación de segundo grado, y las 4 restantes, las posibles soluciones del sistema, que pueden ser desde ninguna hasta 1 o 2 para cada incógnita. No es infrecuente que este tipo de sistemas no tenga ninguna solución, con lo que mostrará como resultado NAN.

Respecto al método de envío de datos, lo que se dijo para el sistema de dos ecuaciones de primer grado, es igualmente válido para este. Sobre la validación, como siempre digo, muy recomendable.

Esperamos os haya gustado este artículo donde podemos ver que no hay cálculo matemático que se resista a PHP.
Tags: Ecuación || sistema || incógnita || segundo grado

Comentarios.

Sin comentarios, publica el tuyo.