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;
}