C ++ матричное умножение разных измерений

0

Я хочу что-то вроде этого: Multiply матрица 3x3 с матрицей 3x1. Я пытаюсь преобразовать свой 1-мерный массив в 2 измерения. И я думаю, что это нормально, но позже в умножении я получаю ошибки. Но я не знаю, почему. Вот мой код.

    // 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];
    }
}
  • 0
    Где ты выделил память для * tab_P? И снова, что за ошибка, которую вы видите, Результат умножения? Или 1D массив?
  • 0
    @theAlias Он сделал это прямо вверху, это просто одномерный массив.
Показать ещё 4 комментария
Теги:
matrix
multiplication

1 ответ

0

Код, который вы отправили, не содержит ошибок памяти (я проверил его с помощью valgrind, который является чрезвычайно ценным инструментом, проверьте его). Итак, почему-то вы не скопировали ошибку в код, который вы опубликовали. Вы должны найти свою ошибку, когда вы делаете символ по сравнению с тем, что вы разместили, и вашим исходным кодом.

Однако ваш код имеет логическую ошибку: вы используете int для переменной s, которую вы используете для суммирования промежуточных продуктов. Всякий раз, когда вы присваиваете значение s, продукт с плавающей запятой округляется до целого числа. Это приведет к некорректному результату. Используйте double для переменной s.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню