C++矩阵乘法的不同维度

C++ matrix multiplication different dimensions

本文关键字:C++      更新时间:2023-10-16

我想要这样的东西:将3x3矩阵乘以3x1矩阵。我尝试将我的一维数组转换为二维数组。我认为这是可以的,但后来在乘法运算中我会出错。但我不知道为什么。这是我的密码。

    // 20  -20  0          150
    //-20   40  -20   x     0
    // 0   -20  30         400  
    int n = 3;
double *tab_P = new double [n];
tab_P[0] = 150;
tab_P[1] = 0;
tab_P[2] = 400;

double **tab_H;
tab_H = new double* [n];
for(int i=0; i<n; i++)
    tab_H[i] = new double[n];
tab_H[0][0] = 0.2;
tab_H[0][1] = 0.15;
tab_H[0][2] = 0.1;

tab_H[1][0] = 0.15;
tab_H[1][1] = 0.15;
tab_H[1][2] = 0.1;
tab_H[2][0] = 0.1;
tab_H[2][1] = 0.1;
tab_H[2][2] = 0.1;
double **tmp_P;
tmp_P = new double *[n];
for(int i=0; i<n; i++)
    tmp_P[i] = new double [1];
for(int i=0; i<n; i++){
    for(int j=0; j<1; j++) {
        tmp_P[i][j] = tab_P[i];
    }
}
double **result = new double * [n];
for(int i=0; i<n; i++)
    result[i] = new double [1];

int i,j,k;
int s = 0;
for(i=0; i<n; i++) {
    for(j=0; j<1; j++) {
        s = 0;
        for(k =0; k<n; k++)
            s += tab_H[i][k] * tmp_P[k][j];
        result[i][j];
    }
}

您发布的代码不包含任何内存错误(我用valgrind检查过它,这是一个非常有价值的工具,请检查一下)。所以,不知怎么的,你没有把错误复制到你发布的代码中。当你对你发布的内容和你的原始代码进行逐个字符的比较时,你应该会发现你的错误。

但是,您的代码有一个逻辑错误:您对变量s使用了int,用于对中间乘积求和。每当为s赋值时,浮点乘积都会四舍五入为整数。这将导致错误的结果。对变量s使用double

相关文章:
  • 没有找到相关文章