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語言程式設計,c語言的程式設計
如果n大於1 就執行 return n fun n 1 前邊一個return 執行函式就返回了,於是後邊的return沒有執行。若果n小於等於1,這個函式就不會執行前邊的return而繼續向後執行,後邊的程式就是這個return 1 後邊一個return 和前邊一個return作用是一樣的,只是在 ...
C語言,求1 3 5n的程式設計,怎樣利用C語言程式設計求1 3 5 N 的值?
庚午子李 有技術含量的,遞迴求解 include int a int n void main 給你個完整點吧 include int main while n 2 0 for int sum 0,i 1 i n i 2 sum i printf sum d n sum return 0 扛菸頭的大槍...
c語言程式設計求輸入,c語言程式設計 求輸入一個0 99的整數,判斷其是否為同構數,要求寫了程式還要有中文解釋其核心語句的作
思路 同構數是會出現在它的平方的右邊的數。具體見 include int main return 0 執行結果 15 62576 include stdio.h int main int argc,char argv 執行結果 include stdio.h int main int n,i,j,a...