martes, 25 de noviembre de 2025

03b.- Programación I - Regla de Cramer (Sistema de tres ecuaciones con tres incognitas)

En algebra lineal uno de los métodos más usados para resolver sistemas de tres (3)  ecuaciones con tres (3) incógnitas es la famosa "Regla de Cramer".

Veamos el siguiente ejemplo de un sistema de tres (3) ecuaciones con tres (3) incógnitas.



La regla de Cramer consiste en:

1ro.- Hallar el “Determinante de la matriz” que se construye a partir de los coeficientes que multiplican a las incógnitas de las tres ecuaciones (Para nuestro ejemplo x - y - z). Este determinante se denomina ∆.

Por ejemplo:


Para hallar el valor del determinante (∆) se copian las primeras dos (2) filas al final del determinante generando un matriz de cinco (5) filas por tres (3) columnas, para nuestro ejemplo la matriz quedaría de la siguiente forma:


Posteriormente se halla el determinante (∆), el cual es igual a la sumatoria de los productos de las diagonales de tres (3) elementos de izquierda a derecha menos la sumatoria de los productos de las diagonales de tres (3) elementos de derecha a izquierda. Veamos el cálculo según nuestro ejemplo:





2do.- Después de hallar el “Determinante de la matriz” se procede a hallar el determinante de cada variable, para nuestro ejemplo hallaremos ∆x. Para hallar ∆x se sustituye el resultado de las ecuaciones en la columna de la variable que queremos determinar, veamos el ejemplo para hallar ∆x:



Ahora repetimos el mismo procedimiento que usamos para hallar ∆ en ∆x. Copiamos las dos primeras filas al final y la convertimos en una matriz de 5 filas y 3 columnas:





Ahora hallamos ∆x:


En consecuencia al conocer ∆ y ∆x podemos obtener el valor de x, 

3ro.- Se repite el proceso para halla ∆y y ∆z. Una vez hallados ambos valores y conociendo el determinante ∆ podemos encontrar los valores de y y z que satisfacen las tres (3) ecuaciones.


En C++ existe la posibilidad de elaborar arreglos de múltiples dimensiones, en consecuencia se podría elaborar un programa que emule la Regla de Cramer, a continuación les presento una versión rápida del mismo: 


PROGRAMA 


/* Programa para resolver sistemas de 3 ecuaciones 

   con 3 incógnitas aplicando el método de Cramer

   elaborado por Carlos Ferrer

   rev 24 de Nov de 2025

*/


#include <iostream>

#include <locale.h>


using namespace std;


main()

{


int fila,col,i,j,k,m,fin;

int ma [4][5]={0};

int aux [6][4]={0};

int delta,deltax,deltay,deltaz;

string frase;

char delt=30;


setlocale (LC_ALL,"spanish");

cout <<"Método de Cramer resolver sistemas de tres ecuaciones"<<endl;

cout <<"con tres incógnitas"<<endl<<endl;


// Leemos los coeficientes de las tres ecuaciones


for (i=1;i<=3;i=i+1)

{

for (j=1;j<=4;j=j+1)

{

if (j==1)

{

frase="el coeficiente de la variable X";

}

if (j==2)

{

frase="el coeficiente de la variable Y";

}

if (j==3)

{

frase="el coeficiente de la variable Z";

}

if (j==4)

{

frase="el valor del resultado";

}

cout <<endl<<endl<<"Ingrese "<<frase<<" de la"<<endl;

cout <<"ecuación Nro. "<<i <<"= ";

cin >>ma[i][j];

system("cls");

// Presentamos las ecuaciones en la medida que se escriben

for (m=1;m<=i;m=m+1)

{

cout <<endl;

if (m==i)

{

fin=j;

    }

else

{

fin=4;

}

for (k=1;k<=fin;k=k+1)

{

if(k==1)

{

cout <<ma[m][k]<<"x";

}

if(k==2 and ma[m][k]>0)

{

cout <<"+"<<ma[m][k]<<"y";

}

if(k==2 and ma[m][k]<0)

{

cout <<ma[m][k]<<"y";

}

if(k==3 and ma[m][k]>0)

{

cout <<"+"<<ma[m][k]<<"z";

}

if(k==3 and ma[m][k]<0)

{

cout <<ma[m][k]<<"z";

}

if(k==4)

{

cout <<"="<<ma[m][k];

}

}

}

}

}

cout <<endl<<endl;

//Imprimimos la matriz ingresada

for (fila=1;fila<=3;fila=fila+1)

{

cout <<"|";

for (col=1;col<=3;col=col+1)

    {

    cout <<ma[fila][col];

if (ma[fila][col]<0)

{

cout <<" ";

}

else

{

cout <<"  ";

}

}

    cout <<"|";

cout<<endl;

}


// Copiamos la matriz ingresada en la matriz aux

for (fila=1;fila<=3;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila][col]=ma[fila][col];

}

}


// Copiamos las dos primeras filas en las filas cuatro y cinco

for (fila=1;fila<=2;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

    aux[fila+3][col]=aux[fila][col];

}

}



// Calculamos delta


delta=0;

col=1;

for (fila=1;fila<=3;fila=fila+1)

{

delta=delta+ ((aux[fila][1]*aux[fila+1][2]*aux[fila+2][3])-(aux[fila][3]*aux[fila+1][2]*aux[fila+2][1]));

}



// Copiamos la matriz original en la matriz aux

for (fila=1;fila<=3;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila][col]=ma[fila][col];

}

}


//Copiamos los resultados en la primera columna


aux[1][1]=ma[1][4];

aux[2][1]=ma[2][4];

aux[3][1]=ma[3][4];


// Repetimos las dos primeras filas en las filas cuatro y cinco

for (fila=1;fila<=2;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila+3][col]=aux[fila][col];

}

}


// Calculamos delta x

deltax=0;

col=1;

for (fila=1;fila<=3;fila=fila+1)

{

deltax=deltax+ ((aux[fila][1]*aux[fila+1][2]*aux[fila+2][3])-(aux[fila][3]*aux[fila+1][2]*aux[fila+2][1]));

}



// Copiamos la matriz original en la matriz aux

for (fila=1;fila<=3;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

  {

      aux[fila][col]=ma[fila][col];

}

}


//Copiamos los resultados en la segunda columna


aux[1][2]=ma[1][4];

aux[2][2]=ma[2][4];

aux[3][2]=ma[3][4];


// Repetimos las dos primeras filas en las filas cuatro y cinco

for (fila=1;fila<=2;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila+3][col]=aux[fila][col];

}

}

// Calculamos delta y

deltay=0;

col=1;

for (fila=1;fila<=3;fila=fila+1)

{

deltay=deltay+ ((aux[fila][1]*aux[fila+1][2]*aux[fila+2][3])-(aux[fila][3]*aux[fila+1][2]*aux[fila+2][1]));

}



// Copiamos la matriz original en la matriz aux

for (fila=1;fila<=3;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila][col]=ma[fila][col];

}

}


//Copiamos los resultados en la tercera columna


aux[1][3]=ma[1][4];

aux[2][3]=ma[2][4];

aux[3][3]=ma[3][4];


// Repetimos las dos primeras filas en las filas cuatro y cinco

for (fila=1;fila<=2;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila+3][col]=aux[fila][col];

}

}

// Calculamos delta z


deltaz=0;

col=1;

for (fila=1;fila<=3;fila=fila+1)

{

deltaz=deltaz+ ((aux[fila][1]*aux[fila+1][2]*aux[fila+2][3])-(aux[fila][3]*aux[fila+1][2]*aux[fila+2][1]));

}



// Presentamos resultados


cout <<endl<<delt<<"="<<delta<<endl;

cout <<delt<<"x="<<deltax<<endl;

cout <<delt<<"y="<<deltay<<endl;

cout <<delt<<"z="<<deltaz<<endl;


cout <<endl<<"El valor de la variable x="<<deltax/delta<<endl;

cout <<"El valor de la variable y="<<deltay/delta<<endl; 

cout <<"El valor de la variable z="<<deltaz/delta<<endl;

}




No hay comentarios.:

Publicar un comentario