C++矩阵运算的实现简单

C++矩阵运算的实现简单

矩阵是一种十分常见的数据结构,它在计算机科学、数学、物理等领域中都有广泛的应用。而C++是一种强大而且易于使用的编程语言。如何在C++中实现矩阵运算呢?本文将为大家详细讲解。

矩阵的定义和存储方式

矩阵是一个二维的数值数组,在C++中定义可以使用数组、vector等容器,同时也可以使用结构体表示,例如:

struct Matrix{
    int row, col;
    vector<vector<double>> data;
    Matrix(int r, int c): row(r), col(c), data(r, vector<double>(c,0)){};
};

这里定义了一个 Matrix 类型,包含两个成员变量 rowcol 分别表示矩阵的行数和列数,以及一个二维 vector 数组 data 储存矩阵的数据。在初始化时,我们可以使用构造函数(传入行数和列数)初始化 data 为全 0 的矩阵。

矩阵的加法和减法

矩阵加法和减法的定义十分简单,只需要对应元素相加或相减即可。代码实现如下:

Matrix operator+(const Matrix& A, const Matrix& B){
    assert(A.row==B.row && A.col==B.col);
    Matrix C(A.row, A.col);
    for(int i=0; i<A.row; i++){
        for(int j=0; j<A.col; j++){
            C.data[i][j] = A.data[i][j] + B.data[i][j];
        }
    }
    return C;
}

Matrix operator-(const Matrix& A, const Matrix& B){
    assert(A.row==B.row && A.col==B.col);
    Matrix C(A.row, A.col);
    for(int i=0; i<A.row; i++){
        for(int j=0; j<A.col; j++){
            C.data[i][j] = A.data[i][j] - B.data[i][j];
        }
    }
    return C;
}

这里使用了运算符重载的方式,使得矩阵型变量可以直接进行加减运算,其中使用断言语句进行矩阵维度的检查。

以下是矩阵加减法的两个实例。

实例1:两个矩阵相加

Matrix A(2,2), B(2,2);
A.data = {{1,2},{3,4}};
B.data = {{5,6},{7,8}};
Matrix C = A + B;
for(int i=0; i<C.row; i++){
    for(int j=0; j<C.col; j++){
        cout << C.data[i][j] << " ";
    }
    cout << endl;
}

输出结果为:

6 8
10 12

实例2:两个矩阵相减

Matrix A(2,2), B(2,2);
A.data = {{1,2},{3,4}};
B.data = {{5,6},{7,8}};
Matrix C = A - B;
for(int i=0; i<C.row; i++){
    for(int j=0; j<C.col; j++){
        cout << C.data[i][j] << " ";
    }
    cout << endl;
}

输出结果为:

-4 -4
-4 -4

矩阵的乘法

矩阵乘法的定义稍微复杂一些,假设矩阵 $A$ 为 $m \times n$ 的矩阵,矩阵 $B$ 为 $n \times p$ 的矩阵,那么矩阵 $C$ 的大小为 $m \times p$,其中 $C_{i,j} = \sum_{k=1}^{n} A_{i,k} B_{k,j}$。代码实现如下:

Matrix operator*(const Matrix& A, const Matrix& B){
    assert(A.col==B.row);
    Matrix C(A.row, B.col);
    for(int i=0; i<A.row; i++){
        for(int j=0; j<B.col; j++){
            for(int k=0; k<A.col; k++){
                C.data[i][j] += A.data[i][k] * B.data[k][j];
            }
        }
    }
    return C;
}

同样使用了运算符重载的方式,这里断言语句用于检查矩阵乘法的可行性。以下是矩阵乘法的实例:

实例3:矩阵相乘

Matrix A(2,3), B(3,4);
A.data = {{1,2,3},{4,5,6}};
B.data = {{7,8,9,10},{11,12,13,14},{15,16,17,18}};
Matrix C = A * B;
for(int i=0; i<C.row; i++){
    for(int j=0; j<C.col; j++){
        cout << C.data[i][j] << " ";
    }
    cout << endl;
}

输出结果为:

74 80 86 92
173 188 203 218

总结

通过对矩阵的加、减、乘的实现,我们可以看出C++在处理矩阵运算时非常方便,同时也非常高效,可以方便地用于各种科学计算和数值计算领域。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++矩阵运算的实现简单 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 荣耀畅玩8c如何双卡切换流量 荣耀畅玩8c双卡切换流量方法

    荣耀畅玩8c如何双卡切换流量 荣耀畅玩8c双卡切换流量方法 在使用荣耀畅玩8c手机时,如果你希望切换流量卡,可以通过以下方法进行设置。 1. 打开设置 首先,在手机主界面,点击“设置”图标进入设置界面。 2. 进入双卡设置 在设置界面中,找到“双卡和移动网络”选项,点击进入。 3. 切换流量卡 在双卡设置界面中,找到“流量使用情况”选项,点击进入。在“流量使…

    C 2023年5月23日
    00
  • java Unsafe详细解析

    Java Unsafe详细解析 简介 Java Unsafe 是 JDK 提供的一个支持直接操作内存、线程、JVM 的类库。由于 Unsafe 操作的是内存,所以它可以绕过 JVM 的安全检查,说白了就是越过了 Java 的限制,直接操作底层内存。不是直接通过 new 实例化对象进行使用,而是通过反射或本地方法调用获取一个实例。 使用 Unsafe 类主要包…

    C 2023年5月23日
    00
  • 如何理解C++ 临时变量的常量性

    理解 C++ 中临时变量的常量性需要从以下几个方面入手: 临时变量是什么? 什么是常量性? 如何理解 C++ 中临时变量的常量性? 1. 临时变量是什么? 在 C++ 中,临时变量是指在表达式求值过程中,根据表达式的运算结果临时生成的变量。临时变量通常用于传递函数参数、返回函数结果及运算过程中一些中间变量的存储。 举个例子,如下所示的代码: int sum(…

    C 2023年5月23日
    00
  • C++ 智能指针的模拟实现实例

    C++智能指针的模拟实现实例 简介 在C++中,有一种叫做智能指针的类型,它的作用是自动管理指针资源,避免内存泄漏等问题。C++智能指针是C++11标准引入的一个新特性,包括了unique_ptr、shared_ptr、weak_ptr三种智能指针。本文将介绍C++智能指针的模拟实现方式,让各位读者了解智能指针的本质和实现方式,从而更好地应用智能指针。 un…

    C 2023年5月23日
    00
  • 探讨:程序在内存中的分配(常量,局部变量,全局变量,程序代码)问题

    探讨:程序在内存中的分配问题 程序在运行过程中需要使用计算机内存存储数据和代码,其中包括常量、局部变量、全局变量和程序代码等。不同类型的数据和代码在内存中的存储方式也不同,掌握这些知识可以帮助我们更好地了解程序的内部运行机制。 常量 常量通常是指程序中固定不变的数据,例如数字、字符、字符串等。这些常量通常存储在代码段(也叫只读数据段)中,由于它们的值在整个程…

    C 2023年5月30日
    00
  • 神奇的c/c++小游戏((提高你的编程兴趣)

    神奇的C/C++小游戏 介绍 这是一个神奇的C/C++小游戏,它可以帮助你提高你的编程兴趣。这个游戏包含了一个简单的文本界面,并且涉及到了C/C++中的一些基础知识,如输入/输出、条件语句和循环等。 游戏说明 这个游戏的玩法很简单,它会随机选择一个整数,你需要根据提示猜测这个整数的值。每次猜测后,游戏会给出一些提示,告诉你你的猜测值比答案大还是小,直到你猜中…

    C 2023年5月24日
    00
  • 浅析c语言中的内存

    浅析C语言中的内存 什么是内存 内存是一种存储数据的硬件设备,是计算机中最基本的组成部分之一。内存根据尺寸的不同,又分成不同的级别,从而形成了”字节(Byte)”、”千字节(KB)”、”兆字节(MB)”、”吉字节(GB)”等不同的规模。在C语言中,内存被划分为若干个地址,每个地址可以存储一个字节(Byte)的数据。 C语言中内存的使用 在C语言中,我们可以通…

    C 2023年5月24日
    00
  • C++ qt 使用jsoncpp json 读写操作

    下面是关于C++ Qt使用jsoncpp进行json读写操作的完整攻略。 步骤一:安装jsoncpp库 作为我们使用jsoncpp的前提,需要先安装jsoncpp库。可以通过如下命令进行安装: sudo apt-get update sudo apt-get install libjsoncpp-dev 步骤二:头文件及命名空间声明 在使用jsoncpp时,…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部