矩阵乘法怎么乘?

矩阵乘法怎么乘?,第1张

方法:左边矩阵第一行的元素分别与右边矩阵第一列的元素相乘,求和得到相乘矩阵的第一行的历迅第一个元素。左边矩阵第一行的元素分别与右边矩阵第二液闹列的元素相乘,求和得到相乘矩阵的第一行的第二个元素,以此类推。

值得注意的是,当提及“矩阵相乘”或者“矩阵乘法”的时候,并不是指代这些特殊的乘积形式,而是定义中所描述的矩阵乘法。在描述这些特殊乘积闹烂罩时,使用这些运算的专用名称和符号来避免表述歧义。

矩阵乘法注意事项

1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。

2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。

3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

可以调用 matrix2() 或 matrix() 做矩阵相乘。

下面主函数 以 调用 matrix() 为例,介绍过程:

输入参数,动态分配数组友念,输入矩阵数据,调用,输出,释放内存。

#include<iostream>

using namespace std

#include<stdio.h>

/*---------------------

c[j]][i] = a[j][k] * b[k][i] = c[j][i]

a[ny][nk]

b[nk][nx]

c[ny][nx]

*---------------------*/

void matrix2(int *a,int *b, int *c, int nx, int ny, int nk)

{

int i,j,k

for(j=0j<nyj++){

for(i=0i<nxi++){

c[j*nx+i]=0

for(k=0k<nkk++)c[j*nx+i]+= a[j*nk+k] * b[k*nx+i]

}

}

}

/*---------------------

b[j][k] * c[k][i] = a[j][i]

*---------------------*/

void matrix(int **b,int **c, int **a, int nx, int ny, int nk)

{

int i,j,k

for (j=0j<nyj++)for(i=0i<nxi++)a[j][i]= 0

for(j=0j<nyj++){

for(i=0i<nxi++){

for(k=0k<nkk++)a[j][i]+= b[j][k]*c[k][i]

}

}

}

int main()

{

int i,j,k,tmp

int b_row,b_col

int c_row,c_col

int a_row,a_col

int **b,**c,**a

printf("please enter b_row b_col of matrix B\n")

scanf("%d %d"羡粗,&b_row,&b_col)

c_row = b_col

printf("please enter c_col of matrix C\n")

scanf("%d",&c_col)

a_row = b_row

a_col = c_col

a = (int **) malloc(sizeof(int *) * a_row)

for (j=0j<a_rowj++){

a[j] = (int *) malloc(sizeof(int) * a_col)

}

b = (int **) malloc(sizeof(int *) * b_row)

for (j=0j<b_rowj++){

b[j] = (int *) malloc(sizeof(int) * b_col)

}

c = (int **) malloc(sizeof(int *) * c_row)

for (j=0j<兄告镇c_rowj++){

c[j] = (int *) malloc(sizeof(int) * c_col)

}

if (!c[c_row-1]) {

printf("no enought memory\n")exit(0)

}

printf("Please input int matrix b[%d][%d]\n",b_row,b_col)

for (j=0j<b_rowj++)

for (i=0i<b_coli++){

scanf("%d",&tmp)

b[j][i] = tmp

}

printf("Please input int matrix c[%d][%d]\n",c_row,c_col)

for (j=0j<c_rowj++)

for (i=0i<c_coli++){

scanf("%d",&tmp)

c[j][i] = tmp

}

matrix( b ,c,a, a_col, a_row, b_col)

for(j=0j<a_rowj++)

{

for (i=0i<a_coli++) printf("%d ",a[j][i])

printf("\n")

}

for (i=0i<a_rowi++) free((void *)a[i])free((void *)a)

for (i=0i<b_rowi++) free((void *)b[i])free((void *)b)

for (i=0i<c_rowi++) free((void *)c[i])free((void *)c)

return 0

}

数据和结果例子:

please enter b_row b_col of matrix B

3 2

please enter c_col of matrix C

3

Please input int matrix b[3][2]

1 2 3 4 5 6

Please input int matrix c[2][3]

1 2 3 4 5 6

9 12 15

19 26 33

29 40 51


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12499338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存