**說明:
①模仿matlab的思想對矩陣進行操作
②利用(double*) data動態分配記憶體來儲存矩陣的的元素
主要功能(持續更新):
執行例項:
matrix.h(持續更新):
#include #include #include using namespace std;
void swap( double& a, double& b )
class matrix ;
int matrix::precision = 4;
int matrix::getrow() const
int matrix::getcol() const
double& matrix::getvalue( int i, int j )
}matrix::matrix( const matrix & a )
matrix::matrix( int r, int c )
matrix::matrix( int r, int c, const double* a )
matrix::~matrix()
matrix& matrix::operator = ( const matrix & a )
void matrix::setvalue( const double* a )
inline void matrix::random( int low, int high )
inline void matrix::setprecision( int a )
bool operator == ( const matrix& a, const matrix& b )
istream& operator >> ( istream& input, matrix& a )
ostream& operator << ( ostream& output, const matrix& a )
return output;
}matrix operator + ( const matrix& a, const matrix& b )
matrix temp( a.col, a.row );
for (int i = 0; i < a.row * a.col; ++i)
temp.data[i] = a.data[i] + b.data[i];
return temp;
}matrix operator - ( const matrix& a, const matrix& b )
matrix temp( a );
for (int i = 0; i < a.row * a.col; ++i)
temp.data[i] -= b.data[i];
return temp;
}matrix operator * ( const matrix& a, const matrix& b )
matrix temp( a.row, b.col );
for (int i = 1; i <= a.row; ++i)
return temp;
}matrix operator * ( const matrix& a, double b )
matrix operator * ( double b, const matrix& a )
void matrix::swaprow( int i0, int i1 )
void matrix::linearchange( int des, double times, int src ) //des += times src
int matrix::legalify( int col )
} return 0; //若沒找到,返回0
}double matrix::det()
double times, res = 1, flag; //times為線性係數,flag為符號位
for (int j = 1; j < col; ++j) }
for (int i = 1; i <= row; ++i)
res *= tmp.getvalue( i, i );
return res == 0 ? 0.0 : res;
}matrix matrix::operator ^ ( int b )
if (b == 0) return matrix::eye( row );
if (b < 0) return inv() ^ (-b);
matrix base( *this );
matrix res( matrix::eye( row ) );
while (b)
return res;
}matrix matrix::triu()
} return tmp;
}matrix matrix::inv()
//配置ae
matrix ae( row, 2 * col );
for (int i = 1; i <= row; ++i)
for (int j = 1; j <= col; ++j)
ae.getvalue( i, j ) = getvalue( i, j );
for (int i = 1; i <= row; ++i)
ae.getvalue( i, row + i ) = 1;
ae = ae.triu(); //a化為上三角
double times;
for (int j = col; j > 1; --j)
for (int i = j - 1; i >= 1; --i)
for (int i = 1; i <= ae.row; ++i) //對角矩陣化為e
matrix inver( row, col );
for (int i = 1; i <= row; ++i)
for (int j = 1; j <= col; ++j)
inver.getvalue( i, j ) = ae.getvalue( i, j + col );
return inver;
}matrix matrix::tran()
matrix matrix::eye( int n )
仿指標類與仿函式類
乙個類,如果它的物件使用時像是指標,或者函式那麼這個類就是乙個仿指標類與仿函式類。在使用指標時,我們使用的運算子通常是 對於函式我們使用的是函式呼叫運算子,也就是 因此要使得乙個類像指標,那麼類內過載指標所使用的運算子不就行了。同理,要使得類像乙個函式,那麼類內過載函式呼叫符就行了。智慧型指標 乙個...
Matlab矩陣與矩陣運算
1.矩陣的建立函式 特殊矩陣 a.矩陣轉置 inv a 矩陣求逆 sparse a 稀疏矩陣 full a 將稀疏矩陣轉換為普通矩陣 eye n n階單位矩陣 zeros m,n m n的零矩陣 ones m,n m n的元素全為1的矩陣 rand m,n m n的隨機矩陣,元素在0 1間均勻分布 ...
Matlab 矩陣索引
獲取矩陣元素 a row,column 線性索引 matlab儲存矩陣並非以它的形狀的形式,而是乙個線性元素列,將每一列連線起來。比如 a 2 6 9 4 2 8 3 5 1 a 2 6 9 4 2 8 3 5 1 存為2,4,3,6,2,5,9,8,1 所以a 3,2 也為a 6 尺寸為 d1 d...