2x2矩阵教程

发布于:2025-07-24 ⋅ 阅读:(16) ⋅ 点赞:(0)

2x2矩阵教程

1. 简介

2x2矩阵是线性代数中的基本概念,用于表示二维线性变换。本教程将介绍如何使用C++实现2x2矩阵的基本运算,包括矩阵加减、乘法、行列式、逆矩阵等操作。

2. 代码实现

2.1 头文件 (matrix2x2.h)

#ifndef MATRIX2X2_H
#define MATRIX2X2_H

#include <cmath>
#include <iostream>
#include <stdexcept>

namespace math {
   
   
namespace linear_algebra {
   
   

/**
 * @brief 2x2矩阵类
 * 
 * 这个类实现了2x2矩阵的基本运算,包括:
 * - 矩阵加减
 * - 矩阵乘法
 * - 标量乘法
 * - 行列式
 * - 逆矩阵
 * - 转置
 * - 特征值和特征向量
 */
class Matrix2x2 {
   
   
public:
    // 矩阵元素,按行优先顺序存储
    double m[2][2];

    // 构造函数
    Matrix2x2();  // 默认构造函数,初始化为单位矩阵
    Matrix2x2(double a00, double a01, double a10, double a11);  // 带参数的构造函数

    // 矩阵加法:返回两个矩阵的和
    Matrix2x2 operator+(const Matrix2x2& other) const;

    // 矩阵减法:返回两个矩阵的差
    Matrix2x2 operator-(const Matrix2x2& other) const;

    // 矩阵乘法:返回两个矩阵的乘积
    Matrix2x2 operator*(const Matrix2x2& other) const;

    // 标量乘法:返回矩阵与标量的乘积
    Matrix2x2 operator*(double scalar) const;

    // 标量除法:返回矩阵除以标量的结果
    // 注意:当标量为0时抛出异常
    Matrix2x2 operator/(double scalar) const;

    // 行列式:返回矩阵的行列式值
    double determinant() const;

    // 逆矩阵:返回矩阵的逆矩阵
    // 注意:当行列式为0时抛出异常
    Matrix2x2 inverse() const;

    // 转置:返回矩阵的转置
    Matrix2x2 transpose() const;

    // 特征值:计算矩阵的特征值
    // 返回一个包含两个特征值的数组
    void eigenvalues(double& lambda1, double& lambda2) const;

    // 特征向量:计算对应特征值的特征向量
    // 返回一个包含两个特征向量的数组
    void eigenvectors(double lambda1, double lambda2, 
                     double& x1, double& y1,
                     double& x2, double& y2) const;

    // 判断矩阵是否可逆
    bool isInvertible() const;

    // 判断矩阵是否对称
    bool isSymmetric() const;

    // 判断矩阵是否正交
    bool isOrthogonal() const;

    // 输出运算符重载:用于打印矩阵
    friend std::ostream& operator<<(std::ostream& os, const Matrix2x2& m);
};

} // namespace linear_algebra
} // namespace math

#endif // MATRIX2X2_H

2.2 实现文件 (matrix2x2.cpp)

#include "matrix2x2.h"
#include <stdexcept>
#include <cmath>

namespace math {
   
   
namespace linear_algebra {
   
   

// 默认构造函数:初始化为单位矩阵
Matrix2x2::Matrix2x2() {
   
   
    m[0][0] = 1.0; m[0][1] = 0.0;
    m[1][0] = 0.0; m[1][1] = 1.0;
}

// 带参数的构造函数:用给定的元素初始化矩阵
Matrix2x2::Matrix2x2(double a00, double a01, double a10, double a11) {
   
   
    m[0][0] = a00; m[0][1] = a01;
    m[1][0] = a10; m

网站公告

今日签到

点亮在社区的每一天
去签到