Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 25.12.2018
Сообщений: 7
1

Нахождение обратной матрицы методом Гаусса

22.03.2019, 18:07. Просмотров 804. Ответов 6

Доброго времени суток!
На просторах интернета нашел исправный код на языке C++ для нахождения обратной матрицы методом Гаусса.
Мне нужно его изменить так, чтобы он обращал матрицы типа double ( изначально все работает с типом int).
После моего вмешательства компилятор сообщает об ошибке "E2060 Illegal use of floating point" .
Помогите разобраться и устранить ошибку, быть может какую то часть кода нужно переписать?


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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int i,j,k;
    double Ai[3][3]={{7.5,4.2,6},{1,0.5,4},{12.7,10,11}};
    double F[3], G[3]={2.05,10.1,94};
        //==========СОСТАВЛЕНИЕ РАБОЧЕЙ МАТРИЦЫ А========
 
    //размерность матрицы
    int n=3;
    //рабочая матрица
    double A[3][6];
    //копируем исходную в рабочую
    for (i=0; i<n; i++)
        for (j=0; j<n; j++)
            A[i][j]=Ai[i][j];
    //прибавляем единичную матрицу
    for (i=0; i<n; i++)
        for (j=n; j<2*n; j++)
        {
            if (i+n==j)
                A[i][j]=1;
            else
                A[i][j]=0;
        }
 
    // METOD Gaussa
 
    for (i=0; i<n; i++)
    {
        if (A[i][i]==0)
            for (j=i+1; j<n; j++)
            {
                if (A[j][i]==1)
                {
                    for (k=0; k<2*n; k++)
                    {
                        int c=A[j][k];
                        A[j][k]=A[i][k];
                        A[i][k]=c;
                    }
                    break;
                }
            }
        for (k=i+1; k<n; k++)
        {
            if (A[k][i]==1)
            {
                for (j=0; j<2*n; j++)
                {
                    A[k][j]^=A[i][j];
                }
            }
        }
    }
        for (i=n-1; i>=0; i--)
        {
            for (k=i-1; k>=0; k--)
            {
                if (A[k][i]==1)
                {
                    for (j=0; j<2*n; j++)
                    A[k][j]^=A[i][j];
                }
            }
        }
 
    //обратная матрица
    int B[3][3];
 
    //копируем в обратную матрицу В
    for (i=0; i<n; i++)
        for (j=0, k=n; j<n; j++, k++)
            B[i][j]=A[i][k];
    //Выводим на экран обратную матрицу
    for (i=0; i<n; i++){
        for (j=0; j<n; j++)
            StringGrid1->Cells[i][j]=FloatToStr (B[i][j]);}
//Проверка. А*В=Е
double E[3][3];
for (i=0; i<n; i++){
    for (j=0; j<n; j++)
                E[i][j]=0;
    }
 
    for (i=0; i<n; i++){
        for (j=0; j<n; j++){
            for (k=0; k<n; k++)
                E[i][j]^=Ai[i][k] & B[k][j];
        }
    }
    //Выводим на экран единичную матрицу
    for (i=0; i<n; i++){
        for (j=0; j<n; j++)
    StringGrid1->Cells[i][5+j]=FloatToStr (E[i][j]);}
    StringGrid1->Cells[1][4]="Проверка";
 
    //Умножение матриц
    for (j=0; j<n; j++){
        for (i=0; i<n; i++)
    F[j]=B[i][j]*G[j];
    StringGrid1->Cells[2][9+j]=FloatToStr (F[j]);}
    StringGrid1->Cells[1][8]="Результат Умножения";
 }
 
//---------------------------------------------------------------------------
0
Вложения
Тип файла: zip obr_matrix_Gauss.zip (56.3 Кб, 2 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2019, 18:07
Ответы с готовыми решениями:

Поиск обратной матрицы методом Гаусса
#include&lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt; using namespace...

Нахождение определителя матрицы методом гаусса
Нахождение определителя методом гауса #include &lt;stdio.h&gt; #include&lt;locale.h&gt; #include&lt;math.h&gt;...

Нахождение обратной матрицы методом алгебраических дополнений
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt;...

Нахождение определенного интеграла методом Гаусса
Помогите мне пожалуйста... Очень надо, горю...........

6
0 / 0 / 0
Регистрация: 25.12.2018
Сообщений: 7
24.03.2019, 11:18  [ТС] 2
Неужели никто не может помочь?
0
Продавец времени
3588 / 2003 / 456
Регистрация: 12.03.2015
Сообщений: 10,026
24.03.2019, 11:50 3
Цитата Сообщение от nmb Посмотреть сообщение
Неужели никто не может помочь?
Ты взял чужой левый говнокод.

Это плохая идея, но ошибку видно невооружённым ухом: оператор XOR неприменим к операндам с плавающей точкой.
Вывод: выкинь эту хрень, найди модуль с матричными функциями и напиши годную прогу вокруг него.
1
0 / 0 / 0
Регистрация: 25.12.2018
Сообщений: 7
26.03.2019, 08:56  [ТС] 4
Какую лабу, вы о чем вообще?? Я не прошу что то за меня делать, лишь направить в нужное русло и указать ошибки, возможно посоветовать какое то решение, которое проверено.
П.С. Никакие лабы, курсачи и прочее не делаю, осваиваю с++ ради собственного интереса.
0
Продавец времени
3588 / 2003 / 456
Регистрация: 12.03.2015
Сообщений: 10,026
26.03.2019, 09:20 5
И тем не менее, я настаиваю, что
Цитата Сообщение от Verevkin Посмотреть сообщение
оператор XOR неприменим к операндам с плавающей точкой.
Спасибо за внимание.
0
Модератор
Эксперт С++
9498 / 8160 / 4986
Регистрация: 18.12.2011
Сообщений: 21,769
26.03.2019, 09:50 6
nmb, такой метод неприменим для действительных матриц.
Посмотрите ссылки внизу страницы, например,
Поиск обратной матрицы методом Гаусса
1
0 / 0 / 0
Регистрация: 25.12.2018
Сообщений: 7
26.03.2019, 17:10  [ТС] 7
Добавлено через 3 минуты
Цитата Сообщение от zss Посмотреть сообщение
nmb, такой метод неприменим для действительных матриц.
Посмотрите ссылки внизу страницы, например,
Поиск обратной матрицы методом Гаусса

Добавлено через 6 минут
Спасибо за ссылку, находил ранее что то подобное но не удалось переделать под оконное приложение. Наверное где то связь на ссылки нарушил. Буду разбираться
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2019, 17:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Умножение матрицы на матрицу, и нахождение обратной матрицы
Здравствуйте! нужно написать программу, которая могла бы производить всякие операции над матрицами...

Нахождение обратной матрицы
помогите, пожалуйста, для моей матрицы найти обратную ? моя матрица. Можно уменьшить код для нее?...

Нахождение обратной матрицы
Доброго времени суток! Помогите, пожалуйста, с нахождением обратной матрицы. Нашел такой код тут на...

Нахождение обратной матрицы
Доброго времени суток! Возникла необходимость найти обратную матрицу любым из способов, так как в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.