• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Найти Обратную Матрицу

  • Автор темы dimared
  • Дата начала
D

dimared

Дана разреженная матрица общего вида. Найти матрицу, обратную к ней... Нужно написать функцию которая вычисляет обратную матрицу, при этом принимает два значения(массив и размерность)....
вот что я наработал
C++:
#include "stdafx.h" 
#include <iostream> 
#include <cstdlib>

using namespace std; 

void Input(double ** array, int size) 
{
for (int v = 0; v < size; v++)
{ 
for (int h = 0; h < size; h++)
{ 
if (abs(v-h) > size/4)
{ 
cout << "(" << v << ")(" << h << "): 0";// << endl;
} 
else
{ 
cout << "(" << v << ")(" << h << "): ";
cin >> array[v][h - (v - size/4 - 1)];
}
}
}
}
int getEl(double ** array, int v, int h, int size) 
{
if (abs(v-h) > size/4)
{ 
return 0; 
} 
else 
{ 
return array[v][h - (v - size/4 - 1)]; 
}
}
void Output(double ** array, int size) 
{  
cout << endl <<"Matrica:" << endl;
for(int v = 0; v < size; v++)
{ 
for(int h = 0; h < size; h++) 
cout <<getEl(array, v, h, size);
cout << endl;
}
}



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() 
{
//-------Задаём размерность матрицы
cout << "Vvedite razmernost': ";
int size; 
cin >> size;
//-------Создаём матрицу
double **array1 = new double *[size]; 
for (int v = 0; v < size; v++) 
array1[v] = new double[size/2 + 1]; 
cout << "Vvedite matricy: " << endl;
Input(array1, size);
Output(array1, size);
//--------Сумма элементов
//Mult(array1, size);
inversion(array1, size);
return 0;
}
 
W

Whatka

много не систематизированного кода,чтобы всё разбирать
в чём конкретно вопрос?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!