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

Тема в разделе "C/C++/C#", создана пользователем dimared, 27 мар 2013.

  1. dimared

    dimared New Member

    Регистрация:
    17 мар 2012
    Сообщения:
    3
    Симпатии:
    0
    Дана разреженная матрица общего вида. Найти матрицу, обратную к ней... Нужно написать функцию которая вычисляет обратную матрицу, при этом принимает два значения(массив и размерность)....
    вот что я наработал
    Код (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;
    }
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    много не систематизированного кода,чтобы всё разбирать
    в чём конкретно вопрос?
     
Загрузка...

Поделиться этой страницей