1樓:
#ifndef __matrix_dot_h__
#define __matrix_dot_h__
template
void swap(t& a, t& b)
class cmatrix
//返回矩陣行數
int getcol()const //返回矩陣列數
int rowswap(int x, int y); //行交換,成功返回1,否則0
int colswap(int x, int y); //列交換
static void setzero(double z); //設定zero的值,所有cmatrix例項精度都將改變
const cmatrix transpose()const; //返回轉置矩陣
const cmatrix adjoint()const; //伴隨矩陣
const cmatrix residue(int row, int col)const;//求對應元素的餘子式
const cmatrix contrary()const;//逆矩陣
const cmatrix gauss_jordan(double* pdet = null)const;//逆矩陣(高斯-約旦法),pdet為行列式,
//此法精度較低,但效率較高
double residue_a(int row, int col)const;//求對應元素的代數餘子式
double determinant()const; //返回方陣的行列式
double det_recursion()const; //返回方陣的行列式(遞迴)
int iszero()const; //判斷元素是否全為0(零矩陣)
int isphalanx()const; //判斷是否為方陣
int isreverse()const; //判斷矩陣是否可逆
int isnonfunnyphalanx()const; //判斷是否非奇異方陣
double* operator(int i)const; //操作單個元素
cmatrix& operator=(const cmatrix& right);
cmatrix& operator=(const double* pright);
cmatrix& operator=(const double** ppright);
const cmatrix& operator+()const; //一元操作符
const cmatrix operator-()const; //一元操作符
const cmatrix operator+(const cmatrix& right)const;
const cmatrix operator-(const cmatrix& right)const;
const cmatrix operator*(const cmatrix& right)const;
const cmatrix operator*(const double& right)const;
const cmatrix operator/(const double& right)const;
cmatrix& operator+=(const cmatrix& right);
cmatrix& operator-=(const cmatrix& right);
cmatrix& operator*=(const cmatrix& right);
cmatrix& operator*=(const double& right);
cmatrix& operator/=(const double& right);
int operator==(const cmatrix& right)const;
int operator!=(const cmatrix& right)const;
private:
int m_irow; //行數
int m_icol; //列數
double** m_ppdata; //資料
}; #endif //__matrix_dot_h__
//matrix.cpp
// #include
#include
#include
#include
#include
#include "matrix.h"
double cmatrix::zero = 1e-10;
cmatrix::cmatrix(int row/*=3*/, int col/*=3*/)
//拷貝建構函式
cmatrix::cmatrix(const cmatrix& right) }
cmatrix::~cmatrix()
void cmatrix::free()
m_ppdata = null;
} }int cmatrix::resize(int row, int col)
//初始化
for(i = 0; i < m_irow; i++)
return 1;
} //zero
void cmatrix::setzero(double z)
//show
void cmatrix::show(const char* pre/*=null*/)const
for(i = 0; i < m_irow; i++)
strcat(buf, "\n");
} messagebox(null, buf, "提示資訊", mb_ok);
#else
if(pre != null)
puts(pre);
for(i = 0; i < m_irow; i++)
#endif //_windows
} ///////////////////////////////////////計算//////////////////////////////////////
//行交換
int cmatrix::rowswap(int x, int y)
return 1;
} //列交換
int cmatrix::colswap(int x, int y)
return 1;
} //轉置
const cmatrix cmatrix::transpose()const
return tr;
} //計算方陣的行列式(精度不高)
double cmatrix::determinant()const
if (m == m_irow)
else
for (n = j; n < m_irow; n++)
k *= (-1);
} for (s = m_irow-1; s>i; s--) }
for (i = 0; i < m_irow; i++)
f *= temp[i][i];
sn = k * f;
return sn;
} //行列式(遞迴,精度較高)
double cmatrix::det_recursion()const
else if(m_irow == 2)
else }
return ans;
} //計算方陣的餘子式
const cmatrix cmatrix::residue(int row, int col)const
re = pdata;
delete pdata;
pdata = null;
return re;
} //計算方陣的代數餘子式
double cmatrix::residue_a(int row, int col)const
//伴隨矩陣
const cmatrix cmatrix::adjoint()const
return ad;
} //逆矩陣
const cmatrix cmatrix::contrary()const
//高斯-約旦法求逆矩陣(全選主元), pdet為原方陣的行列式
const cmatrix cmatrix::gauss_jordan(double* pdet/*=null*/)const }
} //if(fmax < 0.00001)//元素全為0
// if((int)rhs[0][k] != k)
if((int)rhs[1][k] != k)
//計算行列值
fdet *= m[k][k];
//計算逆矩陣
//第二步
m[k][k] = 1.0f/m[k][k];
//第三步
for(j = 0; j < m_icol; j++)
//第四步
for(i = 0; i < m_irow; i++) }
} //第五步
for(i = 0; i < m_irow; i++) }
}//end for(k);
for(k = m_irow-1; k >= 0; k--)
if((int)rhs[0][k] != k) }
fdet *= flag;
if(pdet != null)
*pdet = fdet;
return m;
} ///////////////////////////////////////判斷//////////////////////////////////////
//零矩陣
int cmatrix::iszero()const
return 1;
} //方陣
int cmatrix::isphalanx()const
//非奇異方陣
int cmatrix::isnonfunnyphalanx()const
//可逆矩陣
int cmatrix::isreverse()const
//double* cmatrix::operator (int i)const
// =
cmatrix& cmatrix::operator =(const cmatrix& right)
for(int i = 0; i < m_irow; i++)
return *this;
} // =
cmatrix& cmatrix::operator =(const double* pright)
return *this;
} // =
cmatrix& cmatrix::operator =(const double** ppright)
return *this;
} // 一元操作符+
const cmatrix& cmatrix::operator +()const
// 一元操作符-
const cmatrix cmatrix::operator -()const
return temp;
} // +
const cmatrix cmatrix::operator +(const cmatrix& right)const }
return temp;
} // -
const cmatrix cmatrix::operator -(const cmatrix& right)const }
return m_temp;
} // *
const cmatrix cmatrix::operator *(const cmatrix& right)const }
return m_temp;
} // *
const cmatrix cmatrix::operator *(const double& right)const
return m_temp;
} // /
const cmatrix cmatrix::operator /(const double& right)const
return m_temp;
} // +=
cmatrix& cmatrix::operator +=(const cmatrix& right)
// -=
cmatrix& cmatrix::operator -=(const cmatrix& right)
// *=
cmatrix& cmatrix::operator *=(const cmatrix& right)
// *=
cmatrix& cmatrix::operator *=(const double& right)
// /=
cmatrix& cmatrix::operator /=(const double& right)
// ==
int cmatrix::operator ==(const cmatrix& right)const
for(int i = 0; i < m_irow; i++)
return 1;
} // !=
int cmatrix::operator !=(const cmatrix& right)const
c語言程式設計實現23的矩陣轉置,C語言程式設計實現2 3的矩陣轉置
include iostream usingnamespacestd voidzhuangzhi inta 3 3 intm,n,i for m 0 m 2 m for i 0 i 3 i if m!1 i!0 n a i m a i m a m i a m i n intmain inta 3 3...
c語言程式設計求幫忙,C語言程式設計求幫忙
include include include 給我400財富 void updatetime char shuzi 9 12 int i,j,h1,h2,m1,m2 char buf 9 60 shj 128 time t t,t1,t2 struct tm ptm int main time t...
如何用C語言輸出3 3的矩陣,C語言程式設計 二維陣列 輸出一個2 3的矩陣
include define n 3 void fun int a n int m int i,j for i 0 i n i for j 0 j i j a j i a j i m int main int i,j int a n n printf input a number n for i 0...