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:
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:
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