⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix.c

📁 矩阵运算简单运算(求转秩
💻 C
字号:
/* Note:Your choice is C IDE */
#include "stdio.h"
#include<stdlib.h>
#include<math.h>

#define M1 100
#define M2 100
typedef struct{
	int row;
	int col;
	float d[M1][M2];
}matrix;

void getvalue(matrix *p)					/*initial matrix*/
{int i,j;
	printf("input the row and column numbers of the matrix:");
	scanf("%d%d",&p->row,&p->col);
	printf("The matrix[%d]*[%d] is:\n",p->row,p->col);
	for(i=0;i<p->row;i++)
	for(j=0;j<p->col;j++)scanf("%f",&p->d[i][j]);
}

void print(matrix *p)                        /*output matrix*/
{int i,j;
	for(i=0;i<p->row;i++)
	{for(j=0;j<p->col;j++)printf("%f\t",p->d[i][j]);printf("\n");}
}

void trans(matrix *m,matrix *n)				/*transfor of matrix*/
{int i,j;
	n->col=m->row;
	n->row=m->col;
	for(i=0;i<m->row;i++)
	for(j=0;j<m->col;j++)n->d[j][i]=m->d[i][j];
}

void Mj(matrix *p,matrix *q,int i)
{int j,i1;
	q->row=p->row-1;q->col=p->col-1;
	for(i1=0;i1<q->row;i1++)
	for(j=0;j<p->col;j++){if(j>i-1)q->d[i1][j-1]=p->d[i1][j];
	else q->d[i1][j]=p->d[i1][j];}	
}

float sign(int x,int y)
{float s;
	int sum;
	sum=x+y;
	if(sum%2)s=-1.0;
	else s=1.0;
	return s;}

float val(matrix *p)						/*return value of matrix*/
{float z=0;float s;
	matrix tempm;
	int j;
	if(p->row==p->col)
	{if(p->row==1)z=p->d[0][0]; 
		else	for(j=1;j<p->row+1;j++){s=sign(p->row,j);Mj(p,&tempm,j);z=z+p->d[p->row-1][j-1]*s*val(&tempm);}
	return z;}
}


void Mij(matrix *p,matrix *q,int x,int y)
{int i,j;
	q->row=p->row-1;q->col=p->col-1;
	for(i=0;i<p->row;i++)
	for(j=0;j<p->col;j++){if(j>y-1)q->d[i][j-1]=p->d[i][j];else q->d[i][j]=p->d[i][j];}
	for(i=0;i<p->row;i++)
	for(j=0;j<q->col;j++){if(i>x-1)q->d[i-1][j]=q->d[i][j];}
}

void reverse(matrix *p,matrix *q)			/*get reverse of matrix*/
{matrix tempm;int i,j;float s,de;
	de=val(p);
	q->row=p->col;q->col=p->row;
	if(p->row==p->col)
	{for(i=0;i<p->row;i++)
	 for(j=0;j<p->col;j++){s=sign(i+1,j+1);Mij(p,&tempm,i+1,j+1);q->d[j][i]=s*val(&tempm)/de;}
	}
}

void mul(matrix *m,matrix *n,matrix *q)		/*multiply of matrix*/
{int i,j,k;
	if(m->col==n->row)
	{q->row=m->row;q->col=n->col;
	 for(i=0;i<q->row;i++)
	 for(j=0;j<q->col;j++)
	 {q->d[i][j]=0;
	 for(k=0;k<m->col;k++)q->d[i][j]+=m->d[i][k]*n->d[k][j];}
	}
}


void main()
{matrix m1,m2,m3;
	getvalue(&m1);
	print(&m1);
	printf("%f",val(&m1));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -