如何在C中将4x4矩阵与1x3矩阵相乘?

时间:2016-09-11 16:11:43

标签: c matrix

如果您已经设置了4x4矩阵。 实施例

Matrix A = [1 2 3 4;
            5 6 7 8;`
            9 10 11 12;
            13 14 15 16]

Matrix B = [1, 2, 3]

您如何将Matrix A转换为C编码?还有什么位置代码?对于位置我的意思是:如果我试图将第一行乘以矩阵B,我可以这样做吗?

A[1][0]*B[0]+A[1][1]*B[1]+A[1][2]*B[2]

大纲代码:

main(){

    int matrixA[4][4] = [{"1","2","3","4"};
                        {"5","6","7","8"};
                        {"9","10","11","12"};
                        {"13","14","15","16"}];
    printf(matrix A);
    return 0;
}

4 个答案:

答案 0 :(得分:1)

首先,你不能将1×3矩阵与4×4矩阵相乘。 你应该有m×n和n×p这样的矩阵来使它们相乘(结果将是m×p矩阵)。

对于在C中使用4×4矩阵,您应该像这样实现它:

int main()
{
    int mat[4][4];
    for(int i=0;i<=3;i++)
    {
        for(int j=0;j<=3;j++)
        {
            scanf("%d", &mat[i][j]);
        }
    }

    return 0;
}

答案 1 :(得分:0)

据我所知,你想制作一个程序来执行与矩阵相关的数学分数。线性代数中的例子。不检查矩阵大小,但您明白了。在除法中,您必须计算Array2 ^ -1才能找到它。希望我帮忙。找到后,将结果乘以Array1。然而,在分工中,事情变得更加复杂。您需要以不同的方式处理编码,具体取决于您拥有的数组(矩阵)维度。必须包含例外,并且需要阅读关于如何划分这些矩阵的一些理论。有关详细信息,请参阅https://en.wikipedia.org/wiki/Division_(mathematics)

#include <stdio.h>
#include <math.h>
int main(){
//counters
int i=0,j=0,k=0,sum=0;
//first array
int Array1[4][4] ={
        {87,96,70,22},
        {18,65,77,78},
        {76,72,84,65},
        {87,93,73,77}};
//second array
int Array2[4][4]={
        {14,45,66,88},
        {45,32,97,44},
        {34,64,23,66},
        {39,98,55,32}};
//result array.
int ResultArray[4][4];
// Add
for (i = 0; i < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        ResultArray[i][j]= Array1[i][j]+Array2[i][j];
    }
}
//result
printf("\tAdd Array1 and Array2\n");
for (i = 0; i < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        printf(" %10d \t",ResultArray[i][j]);
    }
    printf("\n");
}
//subtract
for (i = 0; i < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        ResultArray[i][j]= Array1[i][j]-Array2[i][j];
    }
}
//result
printf("\tSubtract Array1 and Array2\n");
for (i = 0; i < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        printf(" %10d \t",ResultArray[i][j]);
    }
    printf("\n");
}
//multiply
for (i = 0; i < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        for (k = 0; k < 4; ++k) {
            sum=sum+Array1[i][k]*Array2[k][j];
        }
        ResultArray[i][j]=sum;
        sum=0;
    }
}
//result
printf("\tMultiplication Array1 and Array2\n");
for (i = 0; i    < 4; ++i) {
    for (j = 0; j < 4; ++j) {
        printf(" %10d \t",ResultArray[i][j]);
    }
    printf("\n");
}
return 0;
}

答案 2 :(得分:-1)

你可以这样写:

int matrixA[4][4] = {
    { 1,  2,  3,  4},//matrixA[0][0] is 1
    { 5,  6,  7,  8},//matrixA[1][1] is 6
    { 9, 10, 11, 12},
    {13, 14, 15, 16}
};
int matrixB[] = { 1, 2, 3};
for(int r = 0; r < 4; ++r){
    for(int c = 0; c < 4; ++c){
        printf("%3d", matrixA[r][c]);
    }
    printf("\n");
}

答案 3 :(得分:-1)

让我帮助你一点,但你反过来帮助我理解这个问题。 :)

表示

Ok矩阵使用二维数组表示。 像

int a[][]= { {1,2,3,4}, {5,6,7,8},{9,10,11,12},{13,14,15,16}};

Matrix准备就绪。 :)

如果您想动态创建它.. malloc()将成为您的朋友。 这里我想说你必须动态分配数组。 例如:

int **a;
a= malloc(sizeof(int*)*m);
for(int i=0;i<m;i++)
  a[i]=malloc(sizeof(int)*n);

Forming mxn matrix where m and n are got as input maybe.

如何乘以2个矩阵[ofcourse compatible]?

在您的案例中A[4x4] B[1x4] so p=4,m=1,q=4.

for (c = 0; c < m; c++) {
      for (d = 0; d < q; d++) {
        for (k = 0; k < p; k++) {
          sum = sum + first[c][k]*second[k][d];
        }

        multiply[c][d] = sum;
        sum = 0;
      }
    }