什么是矩阵?

    在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。

矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。 矩阵的运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。对一些应用广泛而形式特殊的矩阵,例如稀疏矩阵和准对角矩阵,有特定的快速运算算法。关于矩阵相关理论的发展和应用,请参考矩阵理论。在天体物理、量子力学等领域,也会出现无穷维的矩阵,是矩阵的一种推广。

        ——来自百度百科


例如:A是一个由m*n个元素组成的m行n列矩阵的矩阵:

        wKiom1cvRAKh73qYAAAGD6j3hR8531.jpg


矩阵的乘法的定义:

    设A为n*p的矩阵,B为p*n的矩阵。则将生成一个n*n的矩阵,假定为C.

    则C中的i行j列的元素可以表示为

    



那么在计算机程序中怎么表示呢?

    首先是矩阵的定义,这里我们知道。c语言中的二维数组和其具有相似特征。wKiom1cv42SzXiH9AAASTYw8Zxg959.png


    我打算用二级指针来表示所求矩阵,你想啊,给的A,B矩阵,长度要是变化了,就要修改所求矩阵的大小,不是一件很无聊的事嘛???

       wKioL1cv513x8Wr0AAAQl6gqnr0252.png

不过,用到了二级指针,那么注定了内存要自己管理啦。


    由基础的高等代数常识,我们可以得出。不是什么矩阵都可以做乘法的,这需要满足一定条件。

A的行长度要和B的列长度相同才行。怎么获取A B的长度呢?这里需要用到一个小技巧。

wKiom1cv5O6zOLwzAAAdOD5w3qY806.png

里面的原理,就不仔细说了。我们主要演示算法部分。


值得注意的是,程序如果计算了一半,出错了,那么已分配内存的释放,是一个值得考虑的问题。

我给出了以下的解决方案,请看。。。

wKioL1cv6Q_A1klCAAAkwVyYZek780.png



为了方便操作,提供以下函数解耦和

wKioL1cwFOqjBHHcAAAboNkXZF0420.png


更多细节,请下载源代码。。