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

📄

📁 c 的一些经典算法,满好的,适合初学者. 也可以当作小程序看,对初学者会很有帮助
💻
字号:

  
文章标题:矩阵运算代码(包括加减乘除以及求逆运算等)
原 作 者:黄运新
原 出 处:不详
发 布 者:loose_went
发布类型:转载
发布日期:2004-08-31
今日浏览:27
总 浏 览:999
 下载本文所附源代码  

 
程序运行效果截图:
 


矩阵运算程序 
功能分析: 
本程序能完成矩阵的输入、输出。具有相同行数和列数的矩阵间的加法、减法。符合矩阵乘法规则要求的矩阵间的乘法。方阵间的除法,方阵的求逆。矩阵的求转置矩阵等功能。 
设计思想: 
本程序要完成矩阵的一般运算。同时本程序的截面要友好,操作要简单,并具有较强的自我适应能力,即根据每人输入矩阵的方法不同,在生成矩阵时,程序能适当根据输入的各种格式来达到输入矩阵的功能; 
本程序为每个矩阵变量都分配一个矩阵变量名,用户可以通过操作矩阵变量来达到运算目的。如果用户对同一个矩阵变量定义了多次,则程序能根据系统内是否存在这个矩阵变量名,来给同一个矩阵变量进行多次赋值。 
本程序能根据矩阵表达式来进行表达式求解。也就是说程序能判定各个运算符的优先权,然后进行分析计算。 
结构分析: 
class CArrayMatrix : public CObject 
该类是Cobject类的派生类。是用来存储数据和进行一般矩阵运算的类。在vc用户手册中强烈建议如果程序自己定义的类,最要是从Cobject派生出来。详细原因请参考MSDN。 
数据成员: 
CArray<float,float &> m_Array; 
CString m_Name; 
UINT m_wRow; 
UINT m_wCon; 
m_Array是CArray类的一个对象,用来保存矩阵中每个元素的值。 
m_Name是一个字符串类的对象,用来保存矩阵对象的名称。 
m_wRow是用来保存矩阵的行数。 
m_wCon是用来保存矩阵的列数。 
成员函数: 
BOOL CArrayMatrix::CanAddSub(const CArrayMatrix &m)const 
这个函数是用来判断矩阵是否可以相加。如果是返回TRUE;反之返回FALSE。 
BOOL CArrayMatrix::CanContrary()const 
这个函数是用来判断矩阵是否可逆。如果是返回TRUE;反之返回FALSE。 
BOOL CArrayMatrix::CanMutiply(const CArrayMatrix &m)const 
这个函数是用来判断矩阵是否可相乘。如果是返回TRUE;反之返回FALSE。 
CArrayMatrix::CArrayMatrix() 
无参构造函数。 
CArrayMatrix::CArrayMatrix(const CArrayMatrix & m) 
拷贝构造函数。进行深拷贝。 
CArrayMatrix::~CArrayMatrix() 
析构函数。 
BOOL CArrayMatrix::ConvertToNum 
(const CString & sRowString, const int & nAtCon, float & fResult)//nAtCon从0---m_wCon-1 
此函数是把字符串中第nAtCon个子字符串转化成浮点型。 
void CArrayMatrix::DeleteHeadEnter(CString & RightString) 
void CArrayMatrix::ProcString(CString & RightString) 
void CArrayMatrix::ProcStringBlank(CString & sHead) 
void CArrayMatrix::ProcStringComma(CString & sHead) 
void CArrayMatrix::ProcStringEnter(CString & sHead) 
这些函数是用来过滤输入字符串的。 
BOOL CArrayMatrix::DisPlay(CString & out)const 
显示矩阵函数,把结果存到out里。 
CArrayMatrix CArrayMatrix::GetAccompany()const 
得到矩阵的伴随矩阵,并返回 
CString CArrayMatrix::GetName() 
得到矩阵的名称 
float CArrayMatrix::GetRange() const 
得到矩阵的行列式的值。 
BOOL CArrayMatrix::InputCon(const CString & RS,CString * &PtRSBuffer) 
根据过滤函数得出的字符串来给矩阵的类数赋值,并返回一个指向子字符串项的指针。 
BOOL CArrayMatrix::InputRow(const CString & RS) 
得到矩阵的行数。 
CArrayMatrix CArrayMatrix::operator *(float m) 
CArrayMatrix CArrayMatrix::operator *(const CArrayMatrix &m) 
如果乘法运算符重载。 
CArrayMatrix CArrayMatrix::operator +(const CArrayMatrix & m) 
矩阵加法运算符重载。 
CArrayMatrix CArrayMatrix::operator -(const CArrayMatrix & m) 
矩阵减法运算符重载。 
CArrayMatrix CArrayMatrix::operator /(float m) 
CArrayMatrix CArrayMatrix::operator / (CArrayMatrix &m) 
矩阵除法运算符重载。 
CArrayMatrix & CArrayMatrix::operator =(float m) 
CArrayMatrix & CArrayMatrix::operator =(const CArrayMatrix & m) 
矩阵赋值运算符重载。 
CArrayMatrix CArrayMatrix::operator ~() 
求逆运算符重载。 
BOOL CArrayMatrix::SetName(CString m) 
给矩阵对象名称赋值。 
BOOL CArrayMatrix::SetStringName(CString &DataString,CString & sName) 
自动截断输入字符串等号,右边是矩阵对象的数据部分,左边是矩阵对象的名称。 
CArrayMatrix CArrayMatrix::T()const 
求转置矩阵的函数。 
template<class T> 
class CStack:public CList<T,T &> 
标准栈类,是从链表类派生出来的。用来进行表达式求解时用到。 
程序测试: 
1、测试赋值和加法。 
输入数据: 
a=2 4 6 7 
  6 9 3 4 
  5 7 8 3 
  3 2 5 7; 
b=1 0 -1 2 
-1 1 3 0 
0 5 7 -6 
6 8 0 4; 
c=a+b; 
c=; 
输出结果: 
c= 
3   4   5   9    
5   10   6   4    
5   12   15   -3   
9   10   5   11   ; 
2、减法测试 
输入数据: 
d=c-b; 
d=; 
输出结果: 
d= 
2   4   6   7   
6   9   3   4   
5   7   8   3   
3   2   5   7   ; 
3、乘法测试 
输入数据: 
a=1 0 -1 2 
-1 1 3 0 
0 5 7 -6; 
b=0 -4 
1 2 
-3 -2 
-1 1; 
c=a*b; 
c=; 
输入结果: 
c= 
1    0    
-8   0    
-10   -10   ; 
4、求转置测试: 
输入: 
d=c'; 
d=; 
输出: 
d= 
1    -8   -10   
0    0    -10   ; 
5、求逆 
输入: 
a=3 2 1 
  1 1 1 
  1 0 1; 
b=~a; 
b=; 
输出: 
b= 
0.5   -1   0.5   
0    1    -1    
-0.5  1    0.5   ; 
6、除法 
输入: 
a=1 2 -3 
  3 2 -4 
  2 -1 0; 
b=1 -3 0 
  10 2 7 
  10 7 8; 
c=b/a; 
c=; 
输出: 
c= 
20    -15   13    
-105   77    -58    
-152   112   -87   ; 
程序改进: 
本程序还须改进: 
1、 输入要求更灵活。 
2、 能进行矩阵的更多运算。 
3、 帮助系统更完善。 
由于时间仓促,本程序还存在很多不完善的地方,甚至是错误。所以还许更多的调试。 

黄运新 
计算机992 

 

 

 
 
 

⌨️ 快捷键说明

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