CMatrix類 矩陣類 C

2021-10-01 04:39:11 字數 4889 閱讀 3306

#pragma once

class matrix

//返回行

intcol()

const

//返回列

void setsize (

int row,

int col)

;//調整陣列的大小,原有資料不變(未測試)

double

& operator ()(

int row,

int col)

;//獲取矩陣元素

double operator ()(

int row,

int col)

const

;//過載獲取矩陣元素函式,只有const物件能訪問

matrix& operator =

(const matrix& m)

;//注意:友元函式並不是類自己的成員函式

friend matrix operator +

(const matrix& m1,

const matrix& m2)

; friend matrix operator -

(const matrix& m1,

const matrix& m2)

; friend matrix operator *

(const matrix& m1,

const matrix& m2)

; friend matrix operator *

(const

double

& num,

const matrix& m1)

; friend matrix operator *

(const matrix& m1,

const

double

& num)

; friend matrix operator ~

(const matrix& m)

;//矩陣轉置

matrix inv()

;//矩陣求逆

void

unit()

;//生成單位矩陣

};

#include

"stdafx.h"

#include

"matrix.h"

#include

"math.h"

matrix:

:matrix

(int row,

int col)}}

// copy constructor,

//拷貝建構函式的作用:

//(1)以類物件作為函式引數傳值呼叫時;

//(2)函式返回值為類物件;

//(3)用乙個已定義的物件去初始化乙個新物件時;

matrix:

:matrix (

const matrix& m)}}

matrix::~

matrix

(void

) delete[

] dmatdata;

}//返回陣列元素(引用返回)

double

& matrix:

:operator ()(

int row,

int col)

return dmatdata[row]

[col];}

返回陣列元素(過載)

double matrix:

:operator ()(

int row,

int col)

const

return dmatdata[row]

[col];}

//過載預算符+

matrix operator +

(const matrix& m1,

const matrix& m2)

matrix mattmp

(m1.

row(

),m1.

col())

;for

(int i=

0;irow(

);i++)}

return mattmp;

}//過載賦值運算子=,當左右兩邊矩陣的大小不相等時,

//以右邊的大小為基準,調整左邊矩陣的大小

matrix &matrix:

:operator =

(const matrix& m)

if(irow!=m.

row(

)||icol!=m.

col())

for(

int i=

0; i < irow; i++)}

return

*this;

}//調整矩陣大小,原有值不變

void matrix:

:setsize (

int row,

int col)

double

**rsdata = new double

*[row]

;for

(int i=

0; i < row; i++)}

int minrow=

(irow>row)

?row:irow;

int mincol=

(icol>col)

?col:icol;

int colsize = mincol *

sizeof

(double);

for(

int i=

0; i < minrow; i++

)for

(int i=

0; i < minrow; i++

) delete[

] dmatdata;

dmatdata=rsdata;

irow=row;

icol=col;

return;}

//過載預算符-

matrix operator -

(const matrix& m1,

const matrix& m2)

matrix mattmp

(m1.

row(

),m1.

col())

;for

(int i=

0;irow(

);i++)}

return mattmp;

}//過載預算符*,兩個矩陣相乘,m1的列要等於m2的行

matrix operator *

(const matrix& m1,

const matrix& m2)

matrix mattmp

(m1.

row(

),m2.

col())

;for

(int i=

0;irow(

);i++)}

}return mattmp;

}//過載預算符*,矩陣右乘乙個數

matrix operator *

(const matrix& m1,

const

double

& num)

}return mattmp;

}//過載預算符*,矩陣左乘乙個數

matrix operator *

(const

double

& num,

const matrix& m1)

}return mattmp;

}//矩陣轉置

matrix operator ~

(const matrix& m)

return mattmp;

}//矩陣求逆

//採用選全主元法

matrix matrix:

:inv()

int i, j, k, vv;

matrix invmat

(irow,irow)

;//複製矩陣

invmat=

*this;

int* mainrow=new int

[irow]

;int

* maincol=new int

[irow]

;//用於記錄主元素的行和列

double dmaincell;

//主元元素的值

double dtemp;

//臨時變數

for(k =

0;k}if

(fabs

(dmaincell)

<

0.0000000000001

)//矩陣秩虧,不能求逆

if(mainrow[k]

!= k)

//交換行}if

(maincol[k]

!= k)

//交換列

}invmat

(k, k)

=1.0

/invmat

(k, k)

;//計算乘數

for( j =

0;j< irow;j++

)//計算主行

}for

(i =

0;i)//消元}}

}for

( i =

0;i< irow;i++

)//計算主列}}

for( k = irow -

1;k>=

0;k--)}

if(mainrow[k]

!= k)

//交換列}}

delete[

] mainrow;

delete[

] maincol;

return invmat;

}//單位化矩陣

void matrix:

:unit()

}}

C 實現矩陣類和向量類

c 期末作業內容,寫完之後覺得過於臃腫,又重新搞了個新的。新的當作業交,舊的拿來給同學參考。問題描述 請仿照複數類,設計乙個矩陣類,設計矩陣類的構成元素 1.編寫建構函式完成初始化 2.編寫成員函式,讀入乙個矩陣,輸出乙個矩陣 3.編寫成員函式,計算兩個矩陣相加 相減 點乘 4.編寫成員函式,利用運...

C 矩陣運算類(Matrix h)

這個類資料型別是double,包含了常用的矩陣計算,多數方法經過實踐驗證,也難免有不足之處,如有發現歡迎指出。include include include include using namespace std ifndef in opt define in opt endif ifndef ou...

基於C 的矩陣類

這個矩陣類雖然小,但有專門的官網,很適合用小型專案。特別是,它完全過載了所有矩陣的運算子,矩陣的加減乘法,轉置,求逆等等,都實現得非常好。例如下邊這個官網的例項 問題 設定乙個二維陣列 double a new double 4,4 double c new double 4,1 用二維陣列構建乙個...