• 大小: 258KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: C/C++
  • 标签: 矩阵  C语言  

资源简介

将常用矩阵运算(如加、减、乘、逆、转置等)用C语言实现

资源截图

代码片段和文件信息

#include “Matrix.h“
matrix matrix::Add(matrix &b)//加法运算 
{
int ij;
matrix*c=(matrix*)malloc(sizeof(matrix));
for(i=0;i for(j=0;j c->m[i][j]=m[i][j]+b.m[i][j];
return(*c);
}
float* Add(float* Matrix1int Row1int Col1float* Matrix2int Row2int Col2)//加法运算 
{
if(Row1!=Row2||Col1!=Col2)
return 0;
int ijindex;
float*c=(float*)malloc(Row1*Col2*sizeof(float*));
index=0;
for(i=0;i {
for(j=0;j {
c[index]=Matrix1[index]+Matrix2[index];
index++;
}
}
return c;
}
matrix matrix::Sub(matrix &b)//减法运算 
{
int ij;
matrix*c=(matrix*)malloc(sizeof(matrix));
for(i=0;i for(j=0;j c->m[i][j]=m[i][j]-b.m[i][j];
return *c;
}
float* Sub(float* Matrix1int Row1int Col1float* Matrix2int Row2int Col2)//加法运算 
{
if(Row1!=Row2||Col1!=Col2)
return 0;
int ijindex;
float*c=(float*)malloc(Row1*Col2*sizeof(float*));
index=0;
for(i=0;i {
for(j=0;j {
c[index]=Matrix1[index]-Matrix2[index];
index++;
}
}
return c;
}
matrix matrix::Mul(matrix &b)//乘法运算
{
int ijk;
double sum=0;
matrix*c=(matrix*)malloc(sizeof(matrix));
for(i=0;i {
for(j=0;j {
for(k=0;k sum+=m[i][k]*(b.m[k][j]);
c->m[i][j]=sum;
sum=0;
}
}
return(*c);
}
float* Mul(float* Matrix1int Row1int Col1float* Matrix2int Row2int Col2)//乘法运算
{
if(Col1!=Row2)
return 0;
int ijkindexindex1indextmp1index2indextmp2;
double sum=0;
float*c=(float*)malloc(Row1*Col2*sizeof(float*));
index=0;index1=0;index2=0;
for(i=0;i {
for(j=0;j {
indextmp1=index1;
indextmp2=j;
for(k=0;k {
//sum+=Matrix1[i*Col1+k]*Matrix2[k*Col2+j];
sum+=Matrix1[indextmp1]*Matrix2[indextmp2];
indextmp1++;
indextmp2+=Col2;
}
c[index]=sum;
sum=0;
index++;
//index2++;
}
index1+=Col1;
}
return c;
}
matrix matrix::Div(matrix &b)//除法运算
{
//除法直接求解,参见主函数
matrix c;
return(c);
}
matrix matrix::Inverse()//求逆运算
{
//http://www.cnblogs.com/rollenholt/articles/2050662.html 
int ijkM=colN=2*col;
double b[col][col*2];
matrix*c=(matrix*)malloc(sizeof(matrix));
for(i=0;i for(j=0;j b[i][j]=m[i][j];
for(i=0;i for(j=M;j {
if(i==(j-M))
b[i][j]=1;
else
b[i][j]=0; 
}
/***************下面进行求逆运算*********/ 
for(i=0;i {
if(b[i][i]==0)
{
for(k=i;k {
if(b[k][i]!=0) //作者的博客里面此处为b[k][k]貌似是不正确的,//因为这对比如说是{001101011}的矩阵就会判断为不可逆,
{ //而实际上该矩阵是可逆的,这里应该是作者笔误,待进一步求证
for(j=0;j {
double temp;
temp=b[i][j];
b[i][j]=b[k][j];
b[k][j]=temp;
}
break;
}
}
if(k==M)
{
printf(“该矩阵不可逆!\n“);
exit(0);
}
}
for(j=N-1;j>=i;j--)
b[i][j]/=b[i][i];
for(k=0;k {
if(k!=i)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-04-15 20:56  MatrixCalc\
     目录           0  2014-01-30 10:50  MatrixCalc\Debug\
     文件       24688  2014-01-02 17:44  MatrixCalc\Debug\Matrix.obj
     文件      225340  2014-01-02 17:37  MatrixCalc\Debug\MatrixCalc.exe
     文件      288620  2014-01-02 17:37  MatrixCalc\Debug\MatrixCalc.ilk
     文件      492544  2014-01-02 17:37  MatrixCalc\Debug\MatrixCalc.pdb
     文件       41984  2014-01-02 17:44  MatrixCalc\Debug\vc60.idb
     文件       53248  2014-01-02 17:44  MatrixCalc\Debug\vc60.pdb
     文件        7354  2014-01-02 17:44  MatrixCalc\Matrix.cpp
     文件         629  2013-12-31 12:02  MatrixCalc\Matrix.h
     文件        4383  2013-12-31 11:49  MatrixCalc\MatrixCalc.dsp
     文件         545  2013-12-31 11:41  MatrixCalc\MatrixCalc.dsw
     文件       41984  2014-04-15 20:56  MatrixCalc\MatrixCalc.ncb
     文件       49664  2014-04-15 20:56  MatrixCalc\MatrixCalc.opt
     文件        1024  2014-01-02 17:44  MatrixCalc\MatrixCalc.plg

评论

共有 条评论