Как умножить транспонированную матрицу на эту матрицу (X ^ T) * X? - PullRequest
0 голосов
/ 11 ноября 2019

Моя задача - создать матрицу A [w] [k] (w, k - не указано), найти ее транспонирование AT [k] [w] и затем умножить их. Но не как AxAT, а как ATxA.

Я нашел транспонированную матрицу, но я не могу сделать это умножение.

int tabA[100][100], tabAT[100][100], tabATA[100][100], w, k, i, p, u;
cin >> w;
cin >> k;
for (i = 0; i < w; i++) { //A
    for (p = 0; p < k; p++) {
        cin >> tabA[i][p];
    }
}
for (i = 0; i < w; i++, cout << endl) {//show A
    for (p = 0; p < k; p++) {
        cout << tabA[i][p] << " ";
    }
}

for (i = 0; i < k; i++) { //AT
    for (p = 0; p < w; p++) {
        tabAT[i][p] = tabA[p][i];
    }
}
for ( i = 0; i < k; i++, cout<<endl) { //show AT
    for (p = 0; p < w; p++) {
        cout << tabAT[i][p];
    }
}

for (i = 0; i < k; i++)  //ATA
    for (p = 0; p < k; p++) {
        tabATA[i][p] = 0;
        for (u = 0; u < k; u++) 
            tabATA[i][p] += tabAT[i][u] * tabA[u][p];

    }

for (i = 0; i < k; i++, cout<<endl) { //show ATA
    for (p = 0; p < k; p++) {
        cout << tabATA[i][p]<<" ";
    }
}

Я думаю, что есть некоторая ошибка в части "создать матрицу ATA"но я не знаю где. Выходные данные показывают матрицу с хорошим размером, но неправильными числами.

...