c语言 用c语言编写函数求矩阵乘法,求一个6*6矩阵中主对角线上方的所有元素的和。 ”

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

你写的这段函数错误太多:

函数里边用的imax、jmax、maxsize等其实用的是你定义的全局变量

2:C語言不允许用变量来作为数组长度,也就是以下几个语句是错误的

其它错误懒得看了好好努力吧

Strassen的矩阵乘法算法虽然时间复杂度為Θ(n^lg7)比Θ(n^3)小,但是常数项很大在实际应用中不多见。

下面呈现的算法是最普通的Θ(n^3)

printf("请输入第一个矩阵的行数和列数:\n"); printf("请输入第二个矩陣的列数(该矩阵行数等于第一个矩阵的列数):\n"); double **a=NULL;/*二级指针用来代表一个二维数组在声明指针的时候将其赋值为NULL;释放后再赋值为NULL在一些进行有效性判断的地方用a==NULL来判断指针是否为空指针*/ result[i]=NULL;/*将之前分配的内存空间释放后,把指针置0是一个好的习惯*/

1.矩阵相乘矩阵相乘应满足的条件:
(1) 矩阵A的列数必须等于矩阵B的行数矩阵A与矩阵B才能相乘;
(2) 矩阵C的行数等于矩阵A的行数,矩阵C的列数等于矩阵B的列数;
(3) 矩阵C中第i行第j列的え素等于矩阵A的第i行元素与矩阵B的第j列元素对应乘积之和即

2. 常用矩阵相乘算法    用A的第i行分别和B的第j列的各个元素相乘求和,求得C的第i行j列的元素这种算法中,B的访问是按列进行访问的代码如下:


3. 改进的算法    矩阵A、B、C都按行(数据的存储顺序)访问,以提高存储器访问效率对于A的第i行中,第j列的元素分别和B的第j行的元素相乘对于B中相同的列k在上述计算过程中求和,从而得到C第i行k列的数据代码如下:


这种算法很容易转到稀疏矩阵的相乘算法。

PS:斯特拉森算法的实现斯特拉森方法是由v.斯特拉森在1969年提出的一个方法。

我们先讨论二阶矩阵的计算方法


先计算下面7个量(1)


再设C = AB。根据矩阵相乘的规则C的各元素为(2)


比较(1)(2),C的各元素可以表示为(3)


根据以上的方法我们就可以计算4階矩阵了,先将4阶矩阵A和B划分成四块2阶矩阵分别利用公式计算它们的乘积,再使用(1)(3)来计算出最后结果




在标准的定义算法中我们需要进荇n * n * n次乘法运算,新算法中我们需要进行7log2n次乘法对于最常用的4阶矩阵:   原算法 新算法
新算法要比原算法多了24次减法运算,少了15次乘法泹因为浮点乘法的运算速度要远远慢于加/减法运算,所以新算法的整体速度有所提高

我要回帖

更多关于 用c语言编写函数求矩阵乘法 的文章

 

随机推荐