矩阵乘法最naive的版本,自己数学弱爆了,矩阵乘法已经不知道怎么算了……
先科普下吧。
3 0 0 5
(A) 0 -1 0 0
2 0 0 0
乘
0 2
(B) 1 0
-2 4
0 0
首先乘出来的结果是,新矩阵的行是A的行,新矩阵的列是B的列。
计算方法是,首先A的第1行点乘(每个位置上分别乘)B第1列的元素,做为结果矩阵(1, 1)上的元素。然后A的第1行点乘第2列,做为结果矩阵(1, 2[......]
矩阵乘法最naive的版本,自己数学弱爆了,矩阵乘法已经不知道怎么算了……
先科普下吧。
3 0 0 5
(A) 0 -1 0 0
2 0 0 0
乘
0 2
(B) 1 0
-2 4
0 0
首先乘出来的结果是,新矩阵的行是A的行,新矩阵的列是B的列。
计算方法是,首先A的第1行点乘(每个位置上分别乘)B第1列的元素,做为结果矩阵(1, 1)上的元素。然后A的第1行点乘第2列,做为结果矩阵(1, 2[......]
矩阵在数值运算中很常见,本节关注如何存储矩阵的元,从而使矩阵的各种运算能有效进行。
如果矩阵中有许多相同值的元素或者很多零元素。有时为了节省存储空间,可以对这类矩阵进行存储压缩,称为稀疏矩阵。更进一步的,如果稀疏矩阵的相同值或零元素分布还是有规律的,我们可以称他们为特殊矩阵。
对称矩阵
例如:
1 2 4
2 3 5
4 5 6
我们可以为每一对称元分配一个存储空间,即可以将n^2个元压缩存储到n*(n+1)/2个空间中。
假设在线性(一元)数组中存储,下[......]
开始恢复写程序了,快正常了~这次的程序很难的,而且系列性啊……最让我惊诧的是看到了别人的减法算法,太牛了……
Matrix.h:定义了基本操作
#include <iostream>
using namespace std;
enum {OK=-1,WRONG=0,MAX=100};
typedef int Status;
typedef int Elem;
struct Triple
{
int i,j;[......]