資源簡介
將常用矩陣運算(如加、減、乘、逆、轉置等)用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
評論
共有 條評論