Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Обратная матрица C++

Ответить
Настройки темы
C/C++ - Обратная матрица C++

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток!
Возникла необходимость найти обратную матрицу любым из способов, так как в программировании только делаю первые шаги, обратился к форуму. Нашел множество работающих решений в темах форума, но не смог до конца разобраться.
Нашел этот простой рабочий код (спасибо автору).

Код: Выделить весь код
#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}};
Если у кого-то есть пару минут, объясните пожалуйста.

Отправлено: 14:27, 11-04-2017

 

Аватара для shisik

Ветеран


Сообщения: 3247
Благодарности: 596

Профиль | Отправить PM | Цитировать


Ну вот в функции main с самого начала и до вызова inversion - это что? Это и есть создание и заполнение матрицы. Вот вместо него и вставляйте код с заранее определённой матрицей.

Да, если матрица создаётся не динамически, то освобождение памяти тоже не нужно:

Код: Выделить весь код
    for (int i = 0; i < N; i++)
        delete [] matrix[i];
 
    delete [] matrix;
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:20, 11-04-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для nikita_lu

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


YURITIGER, От души, спасибо, всех благ) Часа 2 искал код для рассчета обратной матрицы

Отправлено: 02:51, 29-10-2020 | #3


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


А как мне совместить данный код с другим?
Дело в том что мне нужно сделать что-то на подобии матричного калькулятора, где так же нужно реализовать нахождение обратной матрицы, только её я и не могу сделать XD
Не могу понять в какую часть кода мне вставить это, так как вижуал ругаеться постоянно на что-то.
Хотя без моей программы всё работает хорошо

Отправлено: 20:29, 12-02-2021 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Обратная матрица C++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
DNS/DHCP - обратная зона, у кого настроить? wp2 Сетевые технологии 2 17-08-2015 15:52
USB 3.1 и обратная совместимость CrashTest Хочу все знать 3 18-01-2015 21:37
[решено] JS. Обратная транслитерация. VeshchiyOleg Вебмастеру 1 27-01-2007 21:00




 
Переход