?? c_matrix.h
字號:
row_shift=r_ch(MAT);
col_shift=c_ch(MAT);
for( i=0;i<row;i++){
sum=0;
for( j=0;j<col;j++){
if (row_shift.p[i][j]==0){
sum=sum+1;
}
}
if (sum==col){
rank1=i;
tag1=1;
break;
}
}
for( j=0;j<col;j++){
sum=0;
for( i=0;i<row;i++){
if (col_shift.p[i][j]==0){
sum=sum+1;
}
}
if (sum==row){
rank2=j;
tag2=2;
break;
}
}
if(tag1) {rank=rank1<col?rank1:col;}
if(tag2) {rank=rank2<row?rank2:row;}
if(tag1&&tag2){rank=rank1>rank2?rank2:rank1;}
free_matrix(&row_shift);
free_matrix(&col_shift);
return(rank);
}
else{
printf("the arrays is wrong");
return rank;
}
}
struct matrix inv(struct matrix *MAT1){
int i,j,row=size(MAT1,1),col=size(MAT1,2);
int ranks=rank(MAT1);
struct matrix temp,temps;
if(row==col){
if(ranks==row){
temp=eye(row,col);
temps=col_rep(MAT1,&temp);
temps=r_ch(&temps);
for( i=0;i<row;i++){
for( j=0;j<col;j++){
temp.p[i][j]=temps.p[i][col+j];
}
}
return temp;
}
else{
printf("the matrix cannot inv\n");
temp.row=0;
temp.col=0;
return temp;
}
}
else{
printf("the arow and col are not equae\n");
temp.row=0;
temp.col=0;
return temp;
}
}
struct matrix find(struct matrix *MAT1,CLASS NUM,int NUM1){
int row=size(MAT1,1),col=size(MAT1,2);
struct matrix result;
int i,j,index=-1;
if (row<1||col<1){
printf("the matrix is empty\n");
result.row=0;
result.col=0;
}
else if(NUM1==1){
result.row=row;result.col=1;
initial(&result);
for(i=0;i<row;i++){
result.p[i][0]=-1;
for(j=0;j<col;j++){
if(NUM==MAT1->p[i][j]){
result.p[i][0]=j;
break;
}
}
}
}
else if(NUM1==2){
result.row=1;result.col=col;
initial(&result);
for(j=0;j<col;j++){
result.p[0][j]=-1;
for(i=0;i<row;i++){
if(NUM==MAT1->p[i][j]){
result.p[0][j]=i;
break;
}
}
}
}
else{
printf("the parameter shoude be 1 or 2\n");
}
return(result);
}
struct matrix MAX(struct matrix *MAT1,CLASS NUM){
int row=size(MAT1,1),col=size(MAT1,2);
int i,j,id;
CLASS temp;
struct matrix result;
if (row<1||col<1){
printf("the matrix is empty\n");
result.row=0;
result.col=0;
}
else if (NUM==1){
result.row=row;result.col=2;
initial(&result);
for(i=0;i<row;i++){
temp=MAT1->p[i][0];
id=0;
for(j=0;j<col;j++){
if(MAT1->p[i][j]>temp){
temp=MAT1->p[i][j];
id=j;
}
else{
continue;
}
}
result.p[i][0]=temp;result.p[i][1]=id;
}
}
else if(NUM==2){
result.row=2;result.col=col;
initial(&result);
for(j=0;j<col;j++){
temp=MAT1->p[0][j];
id=0;
for(i=0;i<row;i++){
if(MAT1->p[i][j]>temp){
temp=MAT1->p[i][j];
id=i;
}
else{
continue;
}
}
result.p[0][j]=temp;result.p[1][j]=id;
}
}
else{
printf("the parameter should be 1 or 2 \n");
result.row=0;
result.col=0;
}
return(result);
}
struct matrix MIN(struct matrix *MAT1,CLASS NUM){
int row=size(MAT1,1),col=size(MAT1,2);
int i,j,id;
CLASS temp;
struct matrix result;
if (row<1||col<1){
printf("the matrix is empty\n");
result.row=0;
result.col=0;
}
else if (NUM==1){
result.row=row;result.col=2;
initial(&result);
for(i=0;i<row;i++){
temp=MAT1->p[i][0];
id=0;
for(j=0;j<col;j++){
if(MAT1->p[i][j]<temp){
temp=MAT1->p[i][j];
id=j;
}
else{
continue;
}
}
result.p[i][0]=temp;result.p[i][1]=id;
}
}
else if(NUM==2){
result.row=2;result.col=col;
initial(&result);
for(j=0;j<col;j++){
temp=MAT1->p[0][j];
id=0;
for(i=0;i<row;i++){
if(MAT1->p[i][j]<temp){
temp=MAT1->p[i][j];
id=i;
}
else{
continue;
}
}
result.p[0][j]=temp;result.p[1][j]=id;
}
}
else{
printf("the parameter should be 1 or 2 \n");
result.row=0;
result.col=0;
}
return(result);
}
struct matrix reshape (struct matrix *MAT1,int NUM1,int NUM2){
int row=size(MAT1,1),col=size(MAT1,2);
int i,j,itemp,jtemp;
struct matrix result;
if((row*col)==(NUM1*NUM2)&&row>0&&col>0){
result.row=NUM1;
result.col=NUM2;
initial(&result);
for(i=0;i<NUM1;i++){
for(j=0;j<NUM2;j++){
itemp=(i*NUM2+j)/col;
jtemp=(i*NUM2+j)%col;
result.p[i][j]=MAT1->p[itemp][jtemp];
}
}
}
else if(!(row>0)&&(col>0)){
printf("the matrix is empty\n");
result.row=0;
result.col=0;
}
else{
printf("the parameter is wrong,cann't reshape\n");
}
return(result);
}
struct matrix sort_r (struct matrix *MAT1,int NUM1){
int row=size(MAT1,1),col=size(MAT1,2);
int i,j,k;
double temp;
struct matrix result;
if(row>1&&col>1){
if (NUM1==1){
result=copy(MAT1);
for(i=0;i<row;i++){
for(j=0;j<col-1;j++){
for(k=j+1;k<col;k++){
if(result.p[i][j]>result.p[i][k]){
temp=result.p[i][k];
result.p[i][k]=result.p[i][j];
result.p[i][j]=temp;
}
}
}
}
}
else if(NUM1==2){
result=copy(MAT1);
for(j=0;j<col;j++){
for(i=0;i<row-1;i++){
for(k=i+1;k<row;k++){
if(result.p[i][j]>result.p[k][j]){
temp=result.p[k][j];
result.p[k][j]=result.p[i][j];
result.p[i][j]=temp;
}
}
}
}
}
else{
printf("the parameter shoude be 1 or 2\n");
result.row=0;
result.col=0;
}
}
else if(row==1&&col>1){
result.row=2;
result.col=col;
initial(&result);
for(j=0;j<col;j++){
result.p[0][j]=MAT1->p[0][j];
result.p[1][j]=j;
}
if (NUM1==1){
for(j=0;j<col-1;j++){
for(k=j+1;k<col;k++){
if(result.p[0][j]>result.p[0][k]){
temp=result.p[0][k];
result.p[0][k]=result.p[0][j];
result.p[0][j]=temp;
temp=result.p[1][k];
result.p[1][k]=result.p[1][j];
result.p[1][j]=temp;
}
}
}
}
if (!(NUM1==2||NUM1==1)){
printf("the parameter shoude be 1 or 2\n");
result.row=0;
result.col=0;
}
}
else if(row>1&&col==1){
result.row=row;
result.col=2;
initial(&result);
for(i=0;i<row;i++){
result.p[i][0]=MAT1->p[i][0];
result.p[i][1]=i;
}
if (NUM1==2){
for(i=0;i<row-1;i++){
for(k=i+1;k<row;k++){
if(result.p[i][0]>result.p[k][0]){
temp=result.p[k][0];
result.p[k][0]=result.p[i][0];
result.p[i][0]=temp;
temp=result.p[k][1];
result.p[k][1]=result.p[i][1];
result.p[i][1]=temp;
}
}
}
}
if (!(NUM1==2||NUM1==1)){
printf("the parameter shoude be 1 or 2\n");
result.row=0;
result.col=0;
}
}
else{
printf("the matrix is empty\n");
result.row=0;
result.col=0;
}
return(result);
}
struct matrix sort_d (struct matrix *MAT1,int NUM1){
int row=size(MAT1,1),col=size(MAT1,2);
int i,j,k;
double temp;
struct matrix result;
if(row>1&&col>1){
if (NUM1==1){
result=copy(MAT1);
for(i=0;i<row;i++){
for(j=0;j<col-1;j++){
for(k=j+1;k<col;k++){
if(result.p[i][j]<result.p[i][k]){
temp=result.p[i][k];
result.p[i][k]=result.p[i][j];
result.p[i][j]=temp;
}
}
}
}
}
else if(NUM1==2){
result=copy(MAT1);
for(j=0;j<col;j++){
for(i=0;i<row-1;i++){
for(k=i+1;k<row;k++){
if(result.p[i][j]<result.p[k][j]){
temp=result.p[k][j];
result.p[k][j]=result.p[i][j];
result.p[i][j]=temp;
}
}
}
}
}
else{
printf("the parameter shoude be 1 or 2\n");
result.row=0;
result.col=0;
}
}
else if(row==1&&col>1){
result.row=2;
result.col=col;
initial(&result);
for(j=0;j<col;j++){
result.p[0][j]=MAT1->p[0][j];
result.p[1][j]=j;
}
if (NUM1==1){
for(j=0;j<col-1;j++){
for(k=j+1;k<col;k++){
if(result.p[0][j]<result.p[0][k]){
temp=result.p[0][k];
result.p[0][k]=result.p[0][j];
result.p[0][j]=temp;
temp=result.p[1][k];
result.p[1][k]=result.p[1][j];
result.p[1][j]=temp;
}
}
}
}
if (!(NUM1==2||NUM1==1)){
printf("the parameter shoude be 1 or 2\n");
result.row=0;
result.col=0;
}
}
else if(row>1&&col==1){
result.row=row;
result.col=2;
initial(&result);
for(i=0;i<row;i++){
result.p[i][0]=MAT1->p[i][0];
result.p[i][1]=i;
}
if (NUM1==2){
for(i=0;i<row-1;i++){
for(k=i+1;k<row;k++){
if(result.p[i][0]<result.p[k][0]){
temp=result.p[k][0];
result.p[k][0]=result.p[i][0];
result.p[i][0]=temp;
temp=result.p[k][1];
result.p[k][1]=result.p[i][1];
result.p[i][1]=temp;
}
}
}
}
if (!(NUM1==2||NUM1==1)){
printf("the parameter shoude be 1 or 2\n");
result.row=0;
result.col=0;
}
}
else{
printf("the matrix is empty\n");
result.row=0;
result.col=0;
}
return(result);
}
struct matrix reset (struct matrix *MAT1,struct matrix *index){
int row2=size(index,1); int col2=size(index,2);
int row1=size(MAT1,1);int col1=size(MAT1,2);
int i,j,itemp,jtemp,id;
struct matrix result;
if(!(row1>0&&row2>0&&col1>0&&col2>0)){
printf("the matrix is empty\n");
result.row=0;
result.col=0;
}
else if(row1*col1==row2*col2){
result.row=row1;
result.col=col1;
initial(&result);
for(i=0;i<row1;i++){
for(j=0;j<col1;j++){
itemp=(i*col1+j)/col2;
jtemp=(i*col1+j)%col2;
id=(int)(index->p[itemp][jtemp]);
itemp=id/col1;
jtemp=id%col1;
result.p[i][j]=MAT1->p[itemp][jtemp];
}
}
}
else {
printf("the weishu is not equal\n");
result.row=0;
result.col=0;
}
return(result);
}
struct matrix eig (struct matrix *MAT1){
int row1=size(MAT1,1);int col1=size(MAT1,2);
int i;
struct matrix result;
if(!(row1>0)&&(col1>0)){
printf("the matrix is empty\n");
result.row=0;
result.col=0;
}
else if(row1==col1){
result.row=row1;
result.col=1;
initial(&result);
for(i=0;i<col1;i++){
result.p[i][0]=MAT1->p[i][i];
}
}
else{
printf("the matrix is not square\n");
result.row=0;
result.col;0;
}
return(result);
}
struct matrix ay2mat (CLASS *p, int m,int n){
struct matrix result;
int i,j;
if(m>0&&n>0){
result.row=m;
result.col=n;
initial(&result);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
result.p[i][j]=*p;
p++;
}
}
}
else{
printf("the matrix is no mean\n");
result.row=0;
result.col=0;
}
return(result);
}
void mat2ay (CLASS *p, struct matrix *MAT1){
int m=MAT1->row;
int n=MAT1->col;
int i,j;
if(m>0&&n>0){
for(i=0;i<m;i++){
for(j=0;j<n;j++){
*p=MAT1->p[i][j];
p++;
}
}
}
else{
printf("the matrix is no mean\n");
MAT1->row=0;
MAT1->col=0;
}
}
int save(struct matrix *MAT1,char *p){
int tag=1;
const int num=20;
FILE *fp;
char filename[20];
int i,j;
for(i=0;i<num;i++){
filename[i]=*p;
p++;
}
if((fp=fopen(filename,"wb"))==NULL){
printf("the file cannot open\n");
tag=-1;
return(tag);
}
if(fwrite(&(MAT1->row),4,1,fp)!=1){
tag=-1;
printf("row read error!\n");
return(tag);
}
if(fwrite(&(MAT1->col),4,1,fp)!=1){
printf("col read error!\n");
return(tag);
}
for(i=0;i<MAT1->row;i++){
for(j=0;j<MAT1->col;j++){
if(fwrite(&(MAT1->p[i][j]),8,1,fp)!=1){
tag=-1;
printf("element read error!\n");
return(tag);
}
}
}
fclose(fp);
return(tag);
}
int load(struct matrix *MAT1,char *p){
int tag=1;
const int num=20;
FILE *fp;
char filename[20];
int i,j;
for(i=0;i<num;i++){
filename[i]=*p;
p++;
}
if((fp=fopen(filename,"rb"))==NULL){
printf("the file cannot open\n");
tag=-1;
return(tag);
}
if(fread(&(MAT1->row),4,1,fp)!=1){
tag=-1;
printf("row read error!\n");
return(tag);
}
if(fread(&(MAT1->col),4,1,fp)!=1){
tag=-1;
printf("col read error!\n");
return(tag);
}
initial(MAT1);
for(i=0;i<MAT1->row;i++){
for(j=0;j<MAT1->col;j++){
if(fread(&(MAT1->p[i][j]),8,1,fp)!=1){
tag=-1;
printf("element read error!\n");
return(tag);
}
}
}
fclose(fp);
return(tag);
}
int save_dec(struct matrix *MAT1,char *p){
int tag=1;
const int num=20;
FILE *fp;
char filename[20];
int i,j;
for(i=0;i<num;i++){
filename[i]=*p;
p++;
}
if((fp=fopen(filename,"w"))==NULL){
printf("the file cannot open\n");
tag=-1;
return(tag);
}
for(i=0;i<MAT1->row;i++){
fprintf(fp,"\n");
for(j=0;j<MAT1->col;j++){
fprintf(fp,"%lf ",MAT1->p[i][j]);
}
}
fclose(fp);
return(tag);
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -