求逆矩阵算法

求逆矩阵算法

#include 
#include 
#include

using namespace std; 
#define DataType double

/*矩阵基本数据结构*/ 
typedef struct { 
 int row,col; 
 DataType** mat; 

/*初始化矩阵,即创建矩阵*/ 
int Init_Mat(Matrix* m) 
{ 
 int i=0,j=0; 
 co**pdata=m->mat=new DataType*[m->row];//申请行指针数组

if (NULL==pdata) 
 { 
 cout

cout

return 0; 
}


/*输出矩阵*/ 
void Out_Mat(Matrix* m) 
{ 
 int i,j; 
 coutrow;i++) 
 { 
 for (j=0;jcol;j++)


 { 
 coutmat)[i][j] cout


/*矩阵乘法,t=m1*m2*/ 
int Mul_Mat(Matrix* m1,Matrix* m2,Matrix* t) 
{ 
 in if (m1->col != m2->row) 
 { 
 cout

for (j=0;jcol;j++) 
 { 
 for (t->mat[i][j]=0,p=0;pcol;p++) 
 { 
 t->mat[i][j]+=m1->mat[i][p]*m2->mat[p][j]; 
 } 
 } 
 }

return 0; 
}


/*矩阵求逆——全选主元高斯-约当(Gauss-Jordan)法*/ 
int Inv_Mat(Matrix *m,Ma if(m->row!=m->col) 
 { 
 cout

if(NULL==t->mat)
 { 
 cout

n=m->row; 
 t->row=m->row; 
 t->col=m->col; 
 is=new int[n]; 
 js=new if (NULL==is || NULL==js)
 { 
 cout

for (i=k;imat[i][j]); if (p>d)
 { 
 d=p; 
 is[k]=i; 
 js[k]=j; 
 } 
 } 
 } if(1.0==d+1.0)
 { 
 delete []is; 
 delete []js; 
 printf(


 { 
 p=t->mat[k][j]; 
 t->mat[k][j]=t->mat[is[k]][j]; 
 t->mat[is[k]][j]= if(js[k] != k) /*列交换*/ 
 { 
 for (i=0;i


 { 
 p=t->mat[i][k]; 
 t->mat[i][k]=t->mat[i][js[k]]; 
 t->mat[i][js[k]]= t->mat[k][k]=1/t->mat[k][k];

for (j=0;jmat[k][j]=t->mat[k][j]*t->mat for (i=0;imat[i][j]=t->mat[i][j]-t->mat[i][k]*t->mat[k][j]; 
 } 
 } 
 for (i=0;imat[i][k]=-t->mat[i][k]*t->mat[

for (k=n-1;k>=0;k--)
 { 
 if (js[k]!=k)
 { 
 for (j=0;j


 { 
 p=t->mat[k][j]; 
 t->mat[k][j]=t->mat[js[k]][j]; 
 t->mat[js[k]][j]= if (is[k] != k)
 { 
 for (i=0;i


 { 
 p=t->mat[i][k]; 
 t->mat[i][k]=t->mat[i][is[k]]; 
 t->mat[i][is[k]]= delete []is; 
 delete []js; 
 return 0; 
}

/*求矩阵行列式值——全选主元高斯消去法*/ 
DataType Det_Mat(Matrix *m,Matrix f=1.0,det=1.0,q,d; 
 
 if(m->row!=m->col) 
 { 
 cout

if(NULL==t->mat)
 { 
 cout

n=m->row; 
 t->row=m->row; 
 t->col=m->col;

for(k=0;k

for(i=k;imat[i][j]); if(d>q)
 { 
 q=d; 
 is=i; 
 js=j; 
 } 
 }

if(1.0==q+1.0)
 { 
 det=0.0; 
 return(det); 
 }

if(is!=k)
 { 
 f=-f;

for(j=k;jmat[k][j]; 
 t->mat[k][j]=t->mat[is][j]; if(js!=k)
 { 
 f=-f;

for(i=k;imat[i][js]; 
 t->mat[i][js]=t->mat[i][k];

det=det*t->mat[k][k];

for(i=k+1;imat[i][k]/t->mat[k][k];

for(j=k+1;jmat[i][j]-=d*t->mat[k][j]; 
 } 
 } 
 det=f*det*t->mat[n-1][n-1]; 
 return (det); 
}


//主函数
int main() 
{

Matrix m1,ans;

Init_Mat(&m1);//输入矩阵
 
 Out_Mat(&m1); //输出原始矩阵
 
 /*求矩阵行列式值 Inv_Mat(&m1,&ans);//求逆矩阵 
 
 Out_Mat(&ans);//输出逆矩阵
 
 getchar();


求逆矩阵算法

#include 
#include 
#include

using namespace std; 
#define DataType double

/*矩阵基本数据结构*/ 
typedef struct { 
 int row,col; 
 DataType** mat; 

/*初始化矩阵,即创建矩阵*/ 
int Init_Mat(Matrix* m) 
{ 
 int i=0,j=0; 
 co**pdata=m->mat=new DataType*[m->row];//申请行指针数组

if (NULL==pdata) 
 { 
 cout

cout

return 0; 
}


/*输出矩阵*/ 
void Out_Mat(Matrix* m) 
{ 
 int i,j; 
 coutrow;i++) 
 { 
 for (j=0;jcol;j++)


 { 
 coutmat)[i][j] cout


/*矩阵乘法,t=m1*m2*/ 
int Mul_Mat(Matrix* m1,Matrix* m2,Matrix* t) 
{ 
 in if (m1->col != m2->row) 
 { 
 cout

for (j=0;jcol;j++) 
 { 
 for (t->mat[i][j]=0,p=0;pcol;p++) 
 { 
 t->mat[i][j]+=m1->mat[i][p]*m2->mat[p][j]; 
 } 
 } 
 }

return 0; 
}


/*矩阵求逆——全选主元高斯-约当(Gauss-Jordan)法*/ 
int Inv_Mat(Matrix *m,Ma if(m->row!=m->col) 
 { 
 cout

if(NULL==t->mat)
 { 
 cout

n=m->row; 
 t->row=m->row; 
 t->col=m->col; 
 is=new int[n]; 
 js=new if (NULL==is || NULL==js)
 { 
 cout

for (i=k;imat[i][j]); if (p>d)
 { 
 d=p; 
 is[k]=i; 
 js[k]=j; 
 } 
 } 
 } if(1.0==d+1.0)
 { 
 delete []is; 
 delete []js; 
 printf(


 { 
 p=t->mat[k][j]; 
 t->mat[k][j]=t->mat[is[k]][j]; 
 t->mat[is[k]][j]= if(js[k] != k) /*列交换*/ 
 { 
 for (i=0;i


 { 
 p=t->mat[i][k]; 
 t->mat[i][k]=t->mat[i][js[k]]; 
 t->mat[i][js[k]]= t->mat[k][k]=1/t->mat[k][k];

for (j=0;jmat[k][j]=t->mat[k][j]*t->mat for (i=0;imat[i][j]=t->mat[i][j]-t->mat[i][k]*t->mat[k][j]; 
 } 
 } 
 for (i=0;imat[i][k]=-t->mat[i][k]*t->mat[

for (k=n-1;k>=0;k--)
 { 
 if (js[k]!=k)
 { 
 for (j=0;j


 { 
 p=t->mat[k][j]; 
 t->mat[k][j]=t->mat[js[k]][j]; 
 t->mat[js[k]][j]= if (is[k] != k)
 { 
 for (i=0;i


 { 
 p=t->mat[i][k]; 
 t->mat[i][k]=t->mat[i][is[k]]; 
 t->mat[i][is[k]]= delete []is; 
 delete []js; 
 return 0; 
}

/*求矩阵行列式值——全选主元高斯消去法*/ 
DataType Det_Mat(Matrix *m,Matrix f=1.0,det=1.0,q,d; 
 
 if(m->row!=m->col) 
 { 
 cout

if(NULL==t->mat)
 { 
 cout

n=m->row; 
 t->row=m->row; 
 t->col=m->col;

for(k=0;k

for(i=k;imat[i][j]); if(d>q)
 { 
 q=d; 
 is=i; 
 js=j; 
 } 
 }

if(1.0==q+1.0)
 { 
 det=0.0; 
 return(det); 
 }

if(is!=k)
 { 
 f=-f;

for(j=k;jmat[k][j]; 
 t->mat[k][j]=t->mat[is][j]; if(js!=k)
 { 
 f=-f;

for(i=k;imat[i][js]; 
 t->mat[i][js]=t->mat[i][k];

det=det*t->mat[k][k];

for(i=k+1;imat[i][k]/t->mat[k][k];

for(j=k+1;jmat[i][j]-=d*t->mat[k][j]; 
 } 
 } 
 det=f*det*t->mat[n-1][n-1]; 
 return (det); 
}


//主函数
int main() 
{

Matrix m1,ans;

Init_Mat(&m1);//输入矩阵
 
 Out_Mat(&m1); //输出原始矩阵
 
 /*求矩阵行列式值 Inv_Mat(&m1,&ans);//求逆矩阵 
 
 Out_Mat(&ans);//输出逆矩阵
 
 getchar();



相关文章

  • 置换密钥矩阵加密算法的改进
  • 第38卷第1期2008年1月 东南大学学报(自然科学版) JOURNALOF SOUTHEAST VoL38 Edition) No.1 UNIVERSITY(Nann_al Science Jan.2008 置换密钥矩阵加密算法的改进 叶 ...查看


  • 一种基于核心矩阵的原始对偶算法
  • 第17卷第5期 运 筹 与 管 理 V01.17,No.5 2008年10月 OPERATIONSRESEARCHANDMANAGEMENTSCIENCE Oct.2008 一种基于核心矩阵的原始对偶算法 姜波, 蓝伯雄 (清华大学经济管理 ...查看


  • 一种改进的稀疏子空间聚类算法_欧阳佩佩
  • 2014年8月 第27卷第3期 青岛大学学报(自然科学版) )OURNALOFINGDAOUNIVERSITY(NaturalScienceEditionJ Q ol.27No.3V Au.2014 g ()文章编号:10000603720 ...查看


  • 网络系统最小割集的一种矩阵分解
  • 2007年4月 第30卷第2期 北京邮电大学学报 Journal of Beijing University of Posts and Telecommunications Apr. 2007Vol. 30No. 2 文章编号:100725 ...查看


  • 动态规划之矩阵连乘 算法设计
  • 动态规划之矩阵连乘 卓淑琴 (安徽中医学院 医药信息工程:安徽 合肥 230009) 摘要:动态规划是求解最优化问题的一种方法,该文主要研究其求解问题的基本思想及其具体步骤,详细分析其用于矩阵连乘问题上的算法设计. 关键词:动态规划,矩阵连 ...查看


  • 简单加密技术
  • 简单加密技术 [摘要]本文首先在引言中介绍了数据加密的一些相关背景,其次在数据加密方法中简要介绍了数据加密的对称加密(传统加密算法)和非对称加密(基于公钥加密算法)的实现方法及各自优点缺点.最后在编写新的算法中本人结合传统加密算法用C语言实 ...查看


  • 关于压缩感知的20篇论文点评
  • 压缩传感不是万能的, 虽然它是信号和图像处理领域最热门的研究对象 但是它不可能解决所有问题 就像中科院李老师的话: "压缩感知根植于数学理论,它给目前国内浮躁的学术环境提了一个警钟!因为只有很好地钻研它的基本理论和方法,才能将其有 ...查看


  • 北京邮电大学本科毕业设计(论文)中期进展情况检查表
  • 北 京 邮 电 大 学 本科毕业设计(论文)中期进展情况检查表 学院 学生姓名 指导教师姓名 设计(论文)题目 信息与通信工程 学院 专业 学号 所在单位 复杂网络社团发现算法研究 信息工程 班级 班内序号 职称 主要内容: (毕业设计(论 ...查看


  • 遗传算法编码方案比较
  • 第28卷第3期2011年3月 计算机应用研究ApplicationResearchofComputers Vo.l28No.3 Mar.2011 遗传算法编码方案比较 张超群,郑建国,钱 洁 1,2 1 1 * (1.东华大学旭日工商管理学 ...查看


  • 压缩感知技术综述
  • 压缩感知技术综述 摘要:信号采样是模拟的物理世界通向数字的信息世界之必备手段.多年来,指导信号采样的理论基础一直是著名的Nyquist 采样定理,但其产生的大量数据造成了存储空间的浪费.压缩感知(Compressed Sensing )提出 ...查看


热门内容