要求
本次实验是编写矩阵类 Matrix_4x4,使类满足以下要求:
- 矩阵为 4*4,数据类型为 double
- 默认构造函数,初始化矩阵为单位阵
- 拷贝构造函数
- 带参数构造函数,可以用一个 4x4 的二维数组初始化
- 重载 加(+),减(-),乘(*),幂次(^) ,输入,输出 等操作
- 重载 = 操作,可以实现矩阵间赋值,或者二维数组向矩阵赋值
- 重载( ), 实现矩阵元素访问, 例如矩阵类的对象 m 可以实现 m(1, 2)=2;
- 实现求逆功能,转置功能,求行列式功能
知识点
- 构造函数
- 运算符重载
- 友元函数的使用
实现
矩阵求逆和求行列式的原理
矩阵求逆:通过高斯-若尔当消元法,通过初等行变换将矩阵 A 化为单位矩阵 E,将矩阵 E 化为 A^(-1)。对于每一行,首先判断对角方向的元素是否为 0,然后将对角位置转换为 1,接着将该列非对角位置转换为 0。最终可得矩阵 A 的逆矩阵
行列式运算:使用高斯消去法,通过对矩阵 A 的一系列行变换,使之成为
上三角形矩阵,其主对角线上诸元素乘积即为行列式之值。判断每列的最大元素,
通过交换行放到主对角线,然后根据 $A[j][k] = A[j][k] - A[i][k] * A[j][i] / A[i][i]$,将每
一列下三角转化为 0,最终可得一个上三角行列式。
代码
头文件
1 |
|
测试代码
1 |
|
运行结果
结语
本次实验的重点在于运算符的重载、友元函数的使用和二维数组构造函数。
写这份代码的时候时间更多的是花在矩阵的求逆和求行列式上,其他倒还好。
重载输入输出流运算符时,普通的方法需要将cin与cout放在运算符的右边,不符合代码编写习惯。通过友元函数,可以自由定义cin和cout与输入对象的相对位置,改成符合编写习惯的代码。