|
|
Обратная матрица C++
Доброго времени суток!
Возникла необходимость найти обратную матрицу любым из способов, так как в программировании только делаю первые шаги, обратился к форуму. Нашел множество работающих решений в темах форума, но не смог до конца разобраться.
Нашел этот простой рабочий код (спасибо автору).
Код:
#include <iostream>
void inversion(double **A, int N)
{
double temp;
double **E = new double *[N];
for (int i = 0; i < N; i++)
E[i] = new double [N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
{
E[i][j] = 0.0;
if (i == j)
E[i][j] = 1.0;
}
for (int k = 0; k < N; k++)
{
temp = A[k][k];
for (int j = 0; j < N; j++)
{
A[k][j] /= temp;
E[k][j] /= temp;
}
for (int i = k + 1; i < N; i++)
{
temp = A[i][k];
for (int j = 0; j < N; j++)
{
A[i][j] -= A[k][j] * temp;
E[i][j] -= E[k][j] * temp;
}
}
}
for (int k = N - 1; k > 0; k--)
{
for (int i = k - 1; i >= 0; i--)
{
temp = A[i][k];
for (int j = 0; j < N; j++)
{
A[i][j] -= A[k][j] * temp;
E[i][j] -= E[k][j] * temp;
}
}
}
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
A[i][j] = E[i][j];
for (int i = 0; i < N; i++)
delete [] E[i];
delete [] E;
}
int main()
{
int N;
std::cout << "Enter N: ";
std::cin >> N;
double **matrix = new double *[N];
for (int i = 0; i < N; i++)
matrix[i] = new double [N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
{
std::cout << "Enter matrix[" << i << "][" << j << "] = ";
std::cin >> matrix[i][j];
}
inversion(matrix, N);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
std::cout << matrix[i][j] << " ";
std::cout << std::endl;
}
for (int i = 0; i < N; i++)
delete [] matrix[i];
delete [] matrix;
std::cin.get();
return 0;
}
Но не могу до конца понять что изменить, чтобы исходную матрицу задавать не с клавиатуры, а она была задана изначально:
Код:
double matrix [N][N] = {{x1, x2,x3},
{x7, x8, x9}
{x4, x5, x6}};
Если у кого-то есть пару минут, объясните пожалуйста.
|
Ну вот в функции main с самого начала и до вызова inversion - это что? Это и есть создание и заполнение матрицы. Вот вместо него и вставляйте код с заранее определённой матрицей.
Да, если матрица создаётся не динамически, то освобождение памяти тоже не нужно:
Код:
for (int i = 0; i < N; i++)
delete [] matrix[i];
delete [] matrix;
|
YURITIGER, От души, спасибо, всех благ) Часа 2 искал код для рассчета обратной матрицы :teeth:
|
А как мне совместить данный код с другим?
Дело в том что мне нужно сделать что-то на подобии матричного калькулятора, где так же нужно реализовать нахождение обратной матрицы, только её я и не могу сделать XD
Не могу понять в какую часть кода мне вставить это, так как вижуал ругаеться постоянно на что-то.
Хотя без моей программы всё работает хорошо
|
Время: 16:01.
© OSzone.net 2001-