Cálculo del determinante en C/C++ mediante el uso de una función recursiva que se basa en el desarrollo de Laplace. Esta regla permite reducir el cálculo del determinante, al cálculo de sumas y productos. Este método no es ni mucho menos el más eficiente, debido a la función recursiva. Existen otros métodos, basados en la ortogonalización de matrices (Método de Gram-Smith (En Pascal)) que permiten el cálculo numérico de una manera mucho más eficiente para el ordenador.
Este programa ya fue implementado en Pascal, y ahora se ha implementado en C/C++. La limitación de este programa usando una función recursiva es evidente, y únicamente puede llegar a procesar matrices de 20x20.
/*CÁLCULA EL DETERMINANTE DE UNA MATRIZ EN C/C++*/
#include <stdio.h>
int const max=11;
int vis;
float M[max+1][max+1]; /*EN LA POSICION 0,0 SE GUARDA LA DIMENSION DE M*/
float Det;
float Determinante(float Mat[][max+1]);
int main(void)
{
printf("\n\n CALCULO DEL DETERMINANTE DE UNA MATRIZ POR RECURSIVIDAD");
printf("\n\n CYPASCAL.BLOGSPOT.COM\n\n\n\n");
int cont1, cont2;
printf("Introduce el tamano de la matriz: "); scanf("%f", &M[0][0]);
for (cont1=1;cont1<=M[0][0];cont1++)
for (cont2=1;cont2<=M[0][0];cont2++){
printf("(%2i,%2i) ", cont1,cont2);
scanf("%f",&M[cont1][cont2]);
}
printf("Tamano: %f \n La matriz introducida es: \n",M[0][0]);
for (cont1=1;cont1<=M[0][0];cont1++){
for (cont2=1;cont2<=M[0][0];cont2++)
printf(" %5f", M[cont1][cont2]);
printf("\n");
}
printf("Visualizar matrices intermedias? (1=SI, 0=NO): ");scanf("%i",&vis);
Det=Determinante(M);
printf("El determiante de M vale: %f",Det);
scanf("%f",&Det);
return 0;
}
float Determinante(float Mat[][max+1])
{
float aux1,aux2,Maux[max+1][max+1];
int cont1, cont2, cont3, cont4, cont5;
if (Mat[0][0]==1)
return (Mat[1][1]);
else
{
aux1=0;
aux2=1;
for (cont1=1; cont1<=Mat[0][0];cont1++)
{
Maux[0][0]=Mat[0][0]-1;
for (cont2=1;cont2<=Mat[0][0];cont2++)
for (cont3=1;cont3<=Maux[0][0];cont3++){
if (cont2<cont1)
Maux[cont2][cont3]=Mat[cont2][cont3+1];
else if (cont2>cont1)
Maux[cont2-1][cont3]=Mat[cont2][cont3+1];
}
/*ESTOS DOS "FOR" SON PARA GENERAR MATRIZ ADJUNTA*/
if (vis==1){
printf("\n\n");
for (cont4=1;cont4<=Maux[0][0];cont4++){
for (cont5=1;cont5<=Maux[0][0];cont5++)
printf(" %5f", Maux[cont4][cont5]);
printf("\n");
}}/*SE IMPRIMEN EN PANTALLA LAS MATRICES INTERMEDIAS*/
aux1=aux1+Mat[cont1][1]*aux2*Determinante(Maux);
aux2=aux2*(-1);/*ALTERNA 1 Y -1*/
}
return (aux1);
}}
Un saludo.
Resolución de distintos problemas en el ámbito de la ingenieria mediante el uso de la programación. Los programas abarcan todos los niveles de dificultad, así como la mayoría de las herramintas con las que contamos al programar. Si tienes cualquier duda a cerca de un programa, o quieres proponer alguna nueva entrada, no dudes en contactar escribiendo en cualquiera de las entradas del blog ¡Bienvenido!
domingo, 7 de abril de 2013
Determinante matriz en C/C++
Suscribirse a:
Enviar comentarios (Atom)
Como introduzco los valores de la matriz? 3x3... O 3,3? Para ejecutarlo?
ResponderEliminar