Проблема в умножении матриц
У меня почему то проблема в функции Multimass , она должна умножить обратную матрицу на матрицу B и получить столбец X , т.е столбец решений, но у меня считается только первый элемент а остальные нули
#include <iostream>
#include <math.h>
#include <ctime>
#include <iomanip>
using namespace std;
#define clean system("cls");
#define next cout<<endl;
void Multimass(double **T,double **B,double **X,int size,int size1)
{
for (int i = 0; i < size; i++) {
for (int j = 0; j <size1; j++)
{
X[i][j] = 0;
for (int k = 0; k < size; k++)
{
X[i][0] += T[i][j] * B[j][i];
}
}
}
}
void Showmtx(double **A,int size,int size1)
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size1; j++)
{
cout << fixed << setprecision(4) << setw(8) << A[i][j] << " ";
}
next
}
}
int Gaussmethod(double** A,double **B, double** T, int size)
{
double eps = 1e-10; int det = 1;
double** X = new double* [size];//матрица X(матрица решений)
for (int i = 0; i < size; i++)
{
X[i] = new double[1];
}
for (int i = 0; i < size; i++)
{
int imax = i;
for (int j = 0; j < size; j++) { if (fabs(A[j][i]) > fabs(A[imax][i])) imax = j; }
if (fabs(A[imax][i] < eps)) { cout << "det(A)=0;Ending the programm"; return 0; }
if (i != imax)
{
for (int j = 0; j < size; j++) { swap(A[i][j], A[imax][j]); swap(T[i][j], T[imax][j]); }
}
double t = A[i][i];
det *= t;
for (int j = 0; j < size; j++)
{
A[i][j] /= t; T[i][j] /= t;
}
for (int j = 0; j < size; j++)
{
if (j == i) continue;
for (int k = 0; k < size; k++)
{
A[j][k] -= A[i][k] * A[j][i]; T[j][k] -= T[i][k] * T[j][i];
}
}
}
cout << "Det(A)=" << det << endl;
cout << "Основная матрица" << endl;
Showmtx(A, size, size); next
cout << "Обратная матрица" << endl;
Showmtx(T, size, size); next
cout << "Столбец решений" << endl;
Multimass(T, B,X,size,1);
cout << "Обратная матрица" << endl; Showmtx(T, size, size);next
cout << "Матрица B" << endl; Showmtx(B, size,1);
Multimass(T, B, X, size, 1);
Showmtx(X, size, 1);
}
int main()
{
setlocale(LC_ALL, "rus");
int size; int choice;
cout << "\t\t\t\tВведите размерность матрицы" << endl;
cin >> size;
srand(time(NULL));
double** A = new double* [size];//матрица A(матрица size * size)
for (int i = 0; i < size; i++)
{
A[i] = new double[size];
}
double** B = new double* [size];//матрица B(матрица size * 1)
for (int i = 0; i < size; i++)
{
B[i] = new double[1];
}
double** T = new double* [size];//матрица T(единичная)
for (int i = 0; i < size; i++)
{
T[i] = new double[size];
}
cout << "Ввод значений матрицы А и В \n1)Автоматически\n2)Вручную" << endl;
cin >> choice;
switch (choice)
{
case 1:
{
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++)
{
A[i][j] = rand() % 20;
}
next;
}
for (int i = 0; i < size; i++)
{
B[i][0] = rand() % 20;
}
break;
}
case 2:
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cout << "A[ " << i << "," << j << " ]= ";
cin >> A[i][j];
}
}
for (int i = 0; i < size; i++)
{
cout << "B[" << i << "][" << 0 << "]= "; cin >> B[i][0];
}
next
break;
}
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (i == j) { T[i][j] = 1; }
else { T[i][j] = 0; }
}
}
Gaussmethod(A,B,T,size);
return 0;
}