#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 用二維陣列構建乙個...