Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/190: Рейтинг темы: голосов - 190, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 9

Найти обратную матрицу и умножить ее на вектор

08.11.2010, 20:49. Показов 40971. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Очень нужна помощь для нахождения обратной матрицы на С++.
Дело в том что мне нужно реализовать такую задачу:
найти обратную матрицу и умножить ее на вектор.
каким методом лучше находить обратную матрицу и какой алгоритм нахождения...помогите пожалуйста.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.11.2010, 20:49
Ответы с готовыми решениями:

в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А
2. в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А заранее...

Умножить вектор-строку на матрицу
Есть вектор-строка размера 1*6, её надо умножить на матрицу размером 6*27. Не понимаю как сделать такое умножение. Сколько не пробовал не...

Умножить матрицу квадратную на вектор
уже не знаю, что делать до ужаса глупейшая ошибка, из-за чего весь алгоритм к чертям:( for (int i = 1; i < size; i++) for...

25
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
23.02.2014, 16:11
Студворк — интернет-сервис помощи студентам
C++ (Qt)
1
template <typename T> void swap(T& a, T& b) { T c(a); a = b; b = c; }
0
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 7
23.02.2014, 16:59
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// ìåòîäîì ãàóññà - æîðäàíà 
#include <windows.h>
#include <fstream.h>
#include <iostream.h>
#include <math.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <stack>
#include <deque>
#include <set>
#include <string>
#include <limits>
#include <fstream>
 
 
 
float inversion(float **mass, int n) // ñîçäàåì ôóíêöèþ
{
 
 
 
//float a[n];
// ðåçåðâèðóåì ïàìÿòü äëÿ äèíàìè÷åñêèé ìàññèâ ôóíêöèè
    float **mass2 = new float *[n]; 
    for (int i=0; i<n; i++)
    mass2[i]=new float [n];
 
 
 
 
    for (int i = 0; i < n; i++)
    {
        mass2[i][i] = 1;
    }  
    for (int i = 0; i < n; i++){
        int row = i;
        float mx = mass[i][i];
        for(int k = i + 1; k < n; k++){
            if (fabs(mass[k][i]) > mx){
                row = k;
                mx = fabs(mass[k][i]);
            }
        }
        for(int i=0; i<n; i++)
        {
        for (int j=0; j<n; j++)
        {
        if (row != i) {
           mass[row][j]= mass[i][j];
            mass2[row][j]= mass2[i][j];
            }
        }
        }
        for (int j = i+1; j < n; j++){
            float e = mass[j][i]/mass[i][i];
            for (int k = 0; k < n; k++){
                mass[j][k] -= e*mass[i][k];
                mass2[j][k] -= e*mass2[i][k];
            }
        }
    }
    for (int i = n - 1; i >= 0; i--) {
        for (int j = i - 1; j >= 0; j--){
            float e = mass[j][i]/mass[i][i];
            for (int k = 0; k < n; k++){
                mass[j][k] -= e*mass[i][k];
                mass2[j][k] -= e*mass2[i][k];
            }
        }
        for (int j = 0; j < n; j++) {
            mass2[i][j] /= mass[i][i];
        }
        
 
    }
               for (int i=0; i<n; i++)
           for (int j=0; j<n; j++)
// ??????????????? ???????, mass2 -???????? ??????? ?????????? ?? ? ???????? ???????
           mass[i][j] = mass2[i][j];   
//    î÷èùàåì ïàìÿòü ìàññèâà ôóíêöèè mass2
           for (int i=0; i<n; i++)
           delete [] mass2[i];
           delete [] mass2;
           
    
}
 
 
 
int main()
{
// ñòàíäàðòíûé ââîä
    int n;
    //cout<<"\n enter n"<<endl;
    //cin>>n;
  
    float **matrix=new float *[n];
    for (int i=0; i<n; i++)
    matrix[i] = new float [n];
    char *str = new char [1024];
    int i=0;
    ifstream base("matrix.txt");
    while (!base.eof())
    {
        base.getline(str, 1024, '\n');
        i++;
    }
    base.close();
    delete str;
    n=pow(i,0.5);
    ifstream fin("matrix.txt");
    for (int i=0; i<n; i++)
    for (int j=0; j<n; j++)
    {
        fin>>matrix[i][j];
    }
    fin.close();
    for (int i=0; i<n; i++)
    {
    for(int j=0; j<n; j++)
    {
            cout<<matrix[i][j];
            }
            cout<<endl;
            }
// âûçûâàåì ôóíêöèþ
    inversion(matrix, n);
// âûâîäèì îáðàòíóþ ìàòðèöó
    for (int i=0; i<n; i++)
    {
    for (int j=0; j<n; j++)
    cout<<matrix[i][j]<<" ";
    cout<<endl;
    }
    ofstream fout("out.txt");
    for (int i=0; i<n; i++)
    {
    for (int j=0; j<n; j++)
        fout<<matrix[i][j]<<"   ";
        fout<<endl;
    }
    fout.close();
    for (int i=0; i<n; i++)
    delete [] matrix[i];
    delete [] matrix;
    system("pause");
    return 0;
}
прошу помочь с кодом(выдернул из этой же темы). сроки сдачи на завтра. ломается на нулях, если я введу матрицу. можно ли исправить код, не особенно мудря?
0 0 2
0 5 4
6 5 6
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.02.2014, 07:12
Sabijan, чем не подходит мой код? В нём обратная матрица для указанной вами считается правильно (и обратная к обратной, в том числе, даёт исходную). Кроме того, реализация достаточно простая.
2
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 7
24.02.2014, 08:20
silent_1991, спасибо большое. я из вашего первого кода взял алгоритм, из последнего сдеал функцию swaper для обмена строк и от себя добавил динамические массивы и ввод и вывод в файл. сдача программы прошла на ура.
0
0 / 0 / 1
Регистрация: 24.12.2014
Сообщений: 5
07.04.2017, 14:28
silent_1991, спасибо за код. подскажите, а что в нем необходимо изменить, чтобы задавать исходную матрицу не с клавиатуры, а прямо в теле программы?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
07.04.2017, 15:01
Цитата Сообщение от silent_1991 Посмотреть сообщение
Если уверены, что матрица не вырожденная - проверка не нужна. Но лучше её всё же оставить (я бы оставил), универсальность никогда не повредит.
Проверка и перестановка для того чтобы делить всегда на максимальный по модулю элемент для того чтобы запятая не утонула. если к примеру встретится элемент 1e+4 и раза 3 поделится на 1e-4 то будет очень не хилый улет в небеса и мусор в младших разрядах. А если делить на 1e-4 на 1e+4 то результат будет быстро идти в ноль куда ему и дорога.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.04.2017, 15:01

Умножить квадратную матрицу на вектор
У кого-нибудь не завалялась функция умножения квадратной матрицы на вектор? Результатом должен быть вектор.

Умножить матрицу 10х10 на вектор из 10 элементов
дана матрица:10*10.умножить ее на вектор 10.помогите пожалуйста...очень нужно

Найти обратную матрицу
Ребят немогу в конда сделал провереку, ошибку выдаёт, не могу найти ошибку помогите!!#include &lt;iostream&gt; #include &lt;cmath&gt; ...

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

Найти обратную матрицу
Здравствуйте, уважаемые программисты! Прощу помощи. Для заданной матрицы A(3,3), найти обратную А в -1 степени. Нужно ли самому в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru