仿Matlab 矩陣類

2021-08-18 19:30:42 字數 3463 閱讀 1924

**說明:

①模仿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...