| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 471 人关注过本帖
标题:求个矩阵类主函数,谢谢
只看楼主 加入收藏
我无奈
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-4-14
收藏
 问题点数:0 回复次数:0 
求个矩阵类主函数,谢谢

这个是.cpp文件
#include "matrix.h"

BigMatrix::BigMatrix(int iRow,int iColumn)
{
m_iRow = iRow;
m_iColumn = iColumn;

//现在定义一个 iRow X iColumn 大小的数组
m_f_pMatrix = new float *[iRow];
for(int i = 0;i < iRow;i ++)
m_f_pMatrix[i] = new float [iColumn];

for( i = 0;i < m_iRow;i ++)
{
for(int j = 0;j < m_iColumn;j ++)
{
m_f_pMatrix[i][j] = 0.0f;
}
}

//现在定义一个 iRow X iColumn 大小的数组
/*Matrix.resize(iRow);
for(int i = 0;i < iColumn;i ++)
Matrix[i].resize(iColumn);*/

}
BigMatrix::~BigMatrix(void)
{
for(int i = 0;i < m_iRow;i ++)
delete []m_f_pMatrix[i];
delete []m_f_pMatrix;
}
BigMatrix& BigMatrix::operator += (BigMatrix cM)
{
for(int i = 0;i <m_iRow;i ++)
{
for(int j = 0;j < m_iColumn;j ++)
{
m_f_pMatrix[i][j] += cM.m_f_pMatrix[i][j];
}
}
return *this;
}
BigMatrix& BigMatrix::operator -= (BigMatrix cM)
{
for(int i = 0;i <m_iRow;i ++)
{
for(int j = 0;j < m_iColumn;j ++)
{
m_f_pMatrix[i][j] -= cM.m_f_pMatrix[i][j];
}
}
return *this;
}
BigMatrix& BigMatrix::operator *= (float fMultiplicand)
{
for(int i = 0;i <m_iRow;i ++)
{
for(int j = 0;j < m_iColumn;j ++)
{
m_f_pMatrix[i][j] *= fMultiplicand;
}
}
return *this;
}
BigMatrix& BigMatrix::operator /= (float fMultiplicand)
{
for(int i = 0;i <m_iRow;i ++)
{
for(int j = 0;j < m_iColumn;j ++)
{
m_f_pMatrix[i][j] += fMultiplicand;
}
}
return *this;
}

BigMatrix* MatrixInverse(BigMatrix* pOut,const BigMatrix* pM)
{
float Pivot;
int iRow = pM->GetRow();//因为求逆时只能是方阵,只需行;

//建立一个ROW X ROW的单位矩阵,用来储存结果
float** f_pResult = new float* [iRow];
for(int i = 0;i <iRow;i ++)
f_pResult[i] = new float [iRow]; ;

//初始化单位矩阵;
for( i = 0;i < iRow;i ++)
{
for(int j = 0;j< iRow;j ++)
{
if(i == j)
f_pResult[i][j] = 1.0f;
else
f_pResult[i][j] = 0.0f;
}
}

//使主对角线的元为 1;
for( i = 0;i < iRow;i ++)
{
Pivot = pM->m_f_pMatrix[i][i];
if(Pivot != 1)
{
for(int k = 0;k < iRow;k ++)
{
pM->m_f_pMatrix[i][k] /= Pivot;
f_pResult[i][k] /= Pivot;
}
}

for(int j = 0;j < iRow;j ++)
{
//以 i 变量为列,遍历除 i 行的所有行 (因为是方阵,所以 主对角线的元的 行 和 列是一样的)
Pivot = pM->m_f_pMatrix[j][i];
if(Pivot != 0 && j != i)
{
for(int k = 0;k < iRow;k ++)
{
pM->m_f_pMatrix[j][k] = pM->m_f_pMatrix[j][k] - pM->m_f_pMatrix[i][k] * Pivot;
f_pResult[j][k] = f_pResult[j][k] - f_pResult[i][k] * Pivot;
}
}
}
}
for(i =0;i < iRow;i ++)
{
for(int j = 0;j < iRow;j ++)
{
pOut->m_f_pMatrix[i][j] = f_pResult[i][j];
}
}

for( i = 0;i < iRow;i ++)
delete []f_pResult[i];
delete []f_pResult;

return pOut;
}

BigMatrix* MatrixTranspose(BigMatrix* pOut,const BigMatrix* pM)
{
float **f_pTemp = new float *[pM->GetColumn()];
for(int i = 0;i <pM->GetColumn();i ++)
f_pTemp[i] = new float [pM->GetRow()];

for( i = 0;i <pM->GetRow();i ++)
{
for(int j = 0;j < pM->GetColumn();j ++)
{
f_pTemp[j][i] = pM->m_f_pMatrix[i][j];
}
}

for( i = 0;i <pM->GetRow();i ++)
{
for(int j = 0;j < pM->GetColumn();j ++)
{
pOut->m_f_pMatrix[i][j] = f_pTemp[i][j];
}
}

return pOut;
}


BigMatrix *MatrixAdd(BigMatrix *pOut,const BigMatrix *pM1,const BigMatrix *pM2)
{

for(int i = 0;i < pM1->GetRow();i ++)
{
for(int j = 0;j < pM1->GetColumn();j ++)
{
pOut->m_f_pMatrix[i][j] = pM1->m_f_pMatrix[i][j] + pM2->m_f_pMatrix[i][j];
}
}

return pOut;
}

BigMatrix *MatrixSubtract(BigMatrix *pOut,const BigMatrix *pM1,const BigMatrix *pM2)
{

for(int i = 0;i < pM1->GetRow();i ++)
{
for(int j = 0;j < pM1->GetColumn();j ++)
{
pOut->m_f_pMatrix[i][j] = pM1->m_f_pMatrix[i][j] - pM2->m_f_pMatrix[i][j];
}
}
return pOut;
}

BigMatrix *MatrixMultiply(BigMatrix *pOut,const BigMatrix *pM1,const BigMatrix *pM2)
{

for(int i = 0;i < pM1->GetRow();i ++)
{
for(int j = 0;j < pM2->GetColumn();j ++)
{
for(int k = 0;k <pM1->GetColumn();k ++)
{
pOut->m_f_pMatrix[i][j] += pM1->m_f_pMatrix[i][k] * pM2->m_f_pMatrix[k][j];

}

}
}

return pOut;
}

搜索更多相关主题的帖子: 函数 矩阵 
2007-04-15 21:56
快速回复:求个矩阵类主函数,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017961 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved