Cómo encontrar el rango de una matriz usando lenguaje C
Este es un proceso de implementación de algoritmo. Primero, es necesario comprender cuál es el rango de una matriz y cómo se calcula. Después de descubrir el algoritmo, simplemente impleméntelo en lenguaje C.
En álgebra lineal, el rango de las columnas de una matriz A es el número máximo de columnas linealmente independientes de A. De manera similar, el rango de fila es el número máximo de filas linealmente independientes de A. En términos sencillos, si la matriz se considera como vectores de fila o vectores de columna, el rango es el rango de estos vectores de fila o vectores de columna, es decir, el número de vectores contenidos en el grupo irrelevante máximo.
El algoritmo es principalmente el método de eliminación. La siguiente es una rutina: /*La entrada m al principio es el número de filas de la matriz y la entrada n es el número de columnas de la matriz*/
#include
#include
#include
#define? MAX?10?//Número máximo de línea (columna)
typedef?struct
{?int?m,n int?a[MAX][MAX];
}?matrix;
void?input_matrix(matrix?*dat);
void?output_matrix(matrix?dat);
void? exchang_row(int?*a,int? *b,int?n);?//Intercambiar dos filas
void?mul_row(int?*a,int?k,int?n);?/ /Multiplicar una determinada fila por k
p>void?add_row(int?*a1,int?*a2,int?k,int?n);?//Sumar k veces de la fila a2 a la fila a1
int?rank_matrix(matrix?dat,matrix?*res);
void?main()
{?matrix?a,b; ?r; input_matrix(&a); r= rango_matrix(a,&b); printf("La?matriz?original:\n"); \n"); salida_matrix(b); printf("\nr(A)=%d\n",r); getch();?
}
void? input_matrix(matrix?*dat)//Matriz de entrada
{?int?i,j; do
{?printf("m(1-%d)=",MAX ); scanf("%d",& (dat->m));
}? while((dat->m)<1||(dat->m)>MAX);
{?printf ("n(1-%d)=",MAX scanf("%d",&(dat->n));
}? while((dat->n)<1 ||(dat->n)>MAX); for(i=0;i<(dat->m);i++)
for(j= 0;j<(dat->n) ;j++)
{?printf("a(%d,%d)=",i+1,j+1); ",&(dat->a[i ][j]));
}
}
void?output_matrix(matrix?dat)?/ /Mostrar matriz
{?int?m,n,i,j; m=dat.m;n=dat.n; for(i=0;i {?for(j=0 ;j } } void?exchang_row(int?*a,int?*b,int?n) {?int?i, t; para(i=0;i {?t=a[i]; a[i]=b[i]; > } } void?mul_row(int?*a,int?k,int?n) {?int?i; for(i=0;i a[i]*=k; } void?add_row(int?*a1 ,int?*a2,int?k,int?n) {?int?i; para(i=0;i a1[i] +=a2[i]*k; } int?rank_matrix(matrix?dat,matrix?*res)?//Encontrar el rango (el valor de retorno es el rango, segundo Cada parámetro es la matriz de pasos transformada) {?int?m,n,i,t; int?ri,ci;?//Marca de fila y marca de columna int?f_z;//Una determinada columna Bandera de si todos son 0, 1 significa todos 0 m=dat.m;n=dat.n; for(ri=ci=0;ci {?f_z= 1; for(i=ri;i {?if(i!=ri) if(f_z) exchang_row(&(dat.a[ri][ci]),&(dat.a[i][ci]),n-ci {?t =dat); .a[i][ci]; mul_row(&(dat.a[i][ci]),dat.a[ri][ci],n-ci); add_row(&(dat.a[i][ci]),&(dat.a[ri][ci]),-t,n-ci); } f_z =0; } if(!f_z)?ri++; } *res=dat; return?ri; }