C与指针 五 矩阵相乘
来源:互联网 发布:网络推广协议 编辑:程序博客网 时间:2024/05/29 08:29
如果A是个x行y列的矩阵,B是个y行Z列的矩阵,把A和B相乘,其结果将是另一个\行2列的矩阵0。这个矩阵的每个元素是由下面的公式决定的:
结果矩阵中14这个值是通过2X-2加上-6X-3得到的。编写一个函数,用于执行两个矩阵的乘法。函数的原型应该如下:
void matrix_multiply( int *ml, int *m2, int *r,int x, int y, int z );
m1是一个x行y列的矩阵,m2是一个y行Z列的矩阵。这两个矩阵应该相乘,结果存储于r中,它是一个x行z列的矩阵。记住,你应该对公式作些修改。
//矩阵相乘
#include<stdio.h>
void matrix_multiply1(int (*m1),int (*m2),int (*r),int x,int y,int z);
void matrix_multiply2(int (*m1),int (*m2),int (*r),int x,int y,int z);
int main(void)
{
int m1[3][3]={
{
2,-6,1
},
{
3,5,2
},
{
1,-1,3
}
};
int m2[3][4]={
{
4,-2,-4,-5
},
{
-7,-3,6,7
}
,
{
-7,-3,6,7
}
};
int r[3][4]={
0
};
int q[3][4],r[3][4];
matrix_multiply1(m1,m2,q,3,3,4);
for(int t=0;t<3;t++)
{
for(int j=0;j<4;j++)
{
printf("%-10d ",q[t][j]);
}
printf("\n");
}
printf("\n");
matrix_multiply2(m1,m2,r,3,3,4);
for(int t=0;t<3;t++)
{
for(int j=0;j<4;j++)
{
printf("%-10d ",r[t][j]);
}
printf("\n");
}
return 0;
}
void matrix_multiply1(int (*m1),int (*m2),int (*r),int x,int y,int z)
{
int num=0,a,b;
int col=0,raw=0;
for(int i=0;i<x;i++)
{
raw=i*y;//行列
int rawcol=i*z;
for(int t=0;t<z;t++)
{
num=0;
for(int j=0;j<y;j++)
{
col=j*z;//行
a=*(m1+raw+j);
b=*(m2+col+t);
num+=a*b;
}}
*(r+rawcol+t)=num;
}
}
}
void matrix_multiply2(int (*m1),int (*m2),int (*r),int x,int y,int z)
{
register int *m1p;
register int *m2p;
register int k;
int row,column;
for(row=0;row<x;row++)
{
for(column=0;column<z;column++)
{
m1p=m1+row*y;
m2p=m2+column;
for(k=0;k<y;k++)
{
*r+=*m1p * *m2p;
m1p+=1;
m2p+=z;
}
r++;
}
}
}
输出结果:
- C与指针 五 矩阵相乘
- C和指针之数组编程练习5 (矩阵相乘)
- C++:矩阵相乘
- C编程:矩阵相乘
- c语言矩阵相乘
- C语言矩阵相乘
- 矩阵相乘C语言
- 向量与矩阵相乘
- C语言实现矩阵相乘
- c 动态规划 矩阵相乘
- C语言实现矩阵相乘
- CUDA C 任意矩阵相乘
- 矩阵相乘(C案例)
- C语言实现矩阵相乘
- 矩阵相乘 C语言实现
- 向量与矩阵的相乘
- 实现两个矩阵的相乘(指针)
- 数组与矩阵(1)_矩阵相乘
- 常用排序算法汇总
- 解决iOS10不能跳转系统WiFi列表的问题
- IP-TOS字段
- 支持向量机SVM引导
- 常用的网站和工具
- C与指针 五 矩阵相乘
- 如何修改WAMP中mysql默认空密码
- 将图片打造铅笔素描效果
- RadioGroup调用check()方法onCheckedChanged()调用多次
- mysql搭建(_mysql 安装-centos)
- Android四大组件之BroadcastReceiver
- css中px,em和rem的区别
- 有关于tftp32无法下载
- Hibernate的组件映射