Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
qwen1234
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 97
#1

Численное решение системы линейных уравнений - C++

12.12.2014, 03:40. Просмотров 650. Ответов 7
Метки нет (Все метки)

Решить систему линейных уравнений:
-сформировать матрицу А коэффициентов и матрицу В правых частей (матрицы должны быть размещены в файле in_file.txt);
-вычислить обратную матрицу http://www.cyberforum.ru/cgi-bin/latex.cgi?{A}^{-1};
-вычислить матрицу X - решение системы уравнений;
-напечатать решение в файл o_file.txt


x1-x2+x4=0
x2-x3+x5=0
-x1+x3+x6+0
-5*x1-25*x2-9*x3=-2
25*x2+7*x4-43*x5=17
9*x3+43*x5-31*x6=-20

P.S. впереди фигурная скобка.


Вот такая вот задачка, как найти правильно обратную матрицу не пойму, выходит ерунда!
Выручайте, помогите разобраться во всем этом задании
Если не сложно, то желательно программу написать с комментариями, что бя я вас не переспрашивал по сто раз, что и где происходит и т.п., новичок же еще
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2014, 03:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Численное решение системы линейных уравнений (C++):

Решение системы линейных уравнений - C++
Не могу сделать прогу на С++. Кто сделает - огромное спасибо. Решить систему линейных уравнений 3x-5y+2z=2, 3x-7y+2z=0, x+5y-4z=-2

Решение системы линейных уравнений - C++
Компилятор wxDev-c++. Ошибка:C:\Program Files\Dev-Cpp\çàäà÷è\ãëàâà1\Ïåðâàÿ çàäà÷à\Makefile.win Error 1 #include <cstdlib> #include...

Решение системы линейных уравнений. - C++
\begin{cases} & \text{ } cos(ax+2)...... x>2 \\ & \text{ } tg |x-2a| .... .. x\leq 2 \end{cases} x а h по а = 0.2 ...

Решение системы линейных уравнений - C++
Помогите решить на Си

Найти решение системы линейных уравнений - C++
Даны действительные числа a1, b1, c1, a2, b2, c2. Выяснить, верно ли, что a1b2-a2b1 0.0001 и если верно, то найти решение системы...

Найти решение системы линейных уравнений - C++
Даны действительные числа a1, b1, c1, a2, b2, c2. Выяснить, верно ли, что |a1*b2-a2*b1|>=0.0001, и если верно, то найти решение системы...

7
zss
Модератор
Эксперт С++
6626 / 6188 / 2047
Регистрация: 18.12.2011
Сообщений: 16,132
Завершенные тесты: 1
12.12.2014, 05:27 #2
Большая коллекция решенных задач
См. спойлер Решение систем линейных уравнений.
0
qwen1234
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 97
13.12.2014, 22:43  [ТС] #3
Это конечно хорошо, но там не совсем то, что мне нужно...
0
qwen1234
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 97
15.12.2014, 03:42  [ТС] #4
Помогите пожалуйста сделать по данному заданию решение этих уравнений, с меня спасибо конечно же....
0
qwen1234
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 97
21.12.2014, 00:54  [ТС] #5
Подскажите, пожалуйста, как можно решить данную систему уравнение (т.е. матрица 6 на 6) методом Крамера?

Добавлено через 8 часов 44 минуты
Неужели так никто и не поможет? Я просто в этом деле еще новичок. Просматривал я кодировки, где решается методом Гауса, но это не то, мне нужно именно Крамера, так что что бы еще была видна обратная матрица.
Все это сделать очень сложно, для меня, уж точно.
0
qwen1234
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 97
23.12.2014, 21:21  [ТС] #6
zss, можете ли вы помочь с данной задачей?
Цитата Сообщение от qwen1234 Посмотреть сообщение
Решить систему линейных уравнений:
-сформировать матрицу А коэффициентов и матрицу В правых частей (матрицы должны быть размещены в файле in_file.txt);
-вычислить обратную матрицу ;
-вычислить матрицу X - решение системы уравнений;
-напечатать решение в файл o_file.txt
x1-x2+x4=0
x2-x3+x5=0
-x1+x3+x6+0
-5*x1-25*x2-9*x3=-2
25*x2+7*x4-43*x5=17
9*x3+43*x5-31*x6=-20
0
zss
Модератор
Эксперт С++
6626 / 6188 / 2047
Регистрация: 18.12.2011
Сообщений: 16,132
Завершенные тесты: 1
23.12.2014, 21:36 #7
Так этот пример практически то, что у Вас:
Крамер для коллекции
0
qwen1234
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 97
05.01.2015, 22:19  [ТС] #8
Подскажите, пожалуйста, где у меня тут есть ошибка? Это все по той же теме, вроде все хорошо, но программа выдает не то, что нужно, если говорить о том, что она выдает, то вот:
Кликните здесь для просмотра всего текста
3.53562e+041 1.08434e-311 2.69493e-312 3.14281e-317 6.94713e-308
6.94796e-308 1.21696e-008 6.94772e-308 2.1319e-312 1.08434e-311
2.12213e-313 1.4822e-323 1.08434e-311 5.57703e-307 -1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

1.#QNAN 1.#QNAN 1.#QNAN 0 6.94713e-308
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

1.#QNAN 1.#QNAN 1.#QNAN 0 6.94713e-308
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

1.#QNAN 1.#QNAN 1.#QNAN 0 6.94713e-308
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

1.#QNAN 1.#QNAN 1.#QNAN 0 6.94713e-308
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

1.#QNAN 1.#QNAN 1.#QNAN 0 6.94713e-308
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

-1 0 1 0 0
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 0 1 0 0
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 1 0 0
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 0
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 0
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 1
1.#QNAN 1.#QNAN 1.#QNAN 0 1.08434e-311
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

-1 0 1 0 0
1 -1 0 1 0
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 0 1 0 0
-1 -1 0 1 0
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 1 0 0
-1 0 0 1 0
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 0
-1 0 1 1 0
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 0
-1 0 1 0 0
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 1
-1 0 1 0 0
1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN 1.#QNAN
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

-1 0 1 0 0
1 -1 0 1 0
0 1 0 0 1
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 0 1 0 0
-1 -1 0 1 0
-5 1 0 0 1
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 1 0 0
-1 0 0 1 0
-5 -25 0 0 1
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 0
-1 0 1 1 0
-5 -25 -9 0 1
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 0
-1 0 1 0 0
-5 -25 -9 0 1
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 1
-1 0 1 0 0
-5 -25 -9 0 0
6.36887e-314 5.03947e-322 2.92907e+267 6.94803e-308 7.35627e-314
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

-1 0 1 0 0
1 -1 0 1 0
0 1 0 0 1
-25 -9 0 0 0
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 0 1 0 0
-1 -1 0 1 0
-5 1 0 0 1
0 -9 0 0 0
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 1 0 0
-1 0 0 1 0
-5 -25 0 0 1
0 25 0 0 0
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 0
-1 0 1 1 0
-5 -25 -9 0 1
0 25 0 0 0
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 0
-1 0 1 0 0
-5 -25 -9 0 1
0 25 0 7 0
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

0 1 -1 0 1
-1 0 1 0 0
-5 -25 -9 0 0
0 25 0 7 -43
1.31778e+048 1.08434e-311 4.41376e-312 1.79087e-307 3.05514e+267

-1 0 1 0 0
1 -1 0 1 0
0 1 0 0 1
-25 -9 0 0 0
25 0 7 -43 0

0 0 1 0 0
-1 -1 0 1 0
-5 1 0 0 1
0 -9 0 0 0
0 0 7 -43 0

0 1 1 0 0
-1 0 0 1 0
-5 -25 0 0 1
0 25 0 0 0
0 0 7 -43 0

0 1 -1 0 0
-1 0 1 1 0
-5 -25 -9 0 1
0 25 0 0 0
0 0 9 -43 0

0 1 -1 0 0
-1 0 1 0 0
-5 -25 -9 0 1
0 25 0 7 0
0 0 9 0 0

0 1 -1 0 1
-1 0 1 0 0
-5 -25 -9 0 0
0 25 0 7 -43
0 0 9 0 43

1.#QNAN 1.#QNAN 1.#QNAN 1.#INF 1.#INF 1.#INF
1.#QNAN 1.#QNAN 1.#QNAN -1.#IND -1.#INF 1.#INF
1.#QNAN 1.#QNAN 1.#QNAN -1.#INF -1.#INF 1.#INF
1.#QNAN 1.#QNAN 1.#QNAN -1.#IND 1.#INF 1.#INF
1.#QNAN 1.#QNAN 1.#QNAN 1.#INF -1.#INF -1.#INF
1.#QNAN 1.#QNAN 1.#QNAN -1.#INF 1.#INF -1.#INF
X1=1.#QNAN
X2=1.#QNAN
X3=1.#QNAN
X4=1.#QNAN
X5=1.#QNAN
X6=1.#QNAN

(В самом конце, корни, которые, похоже на то, что делятся на 0)

Исходная матрица(находится в файле in_file) такова:
Кликните здесь для просмотра всего текста
6
1 -1 0 1 0 0 0
0 1 -1 0 1 0 0
-1 0 1 0 0 1 0
-5 -25 -9 0 0 0 -2
0 25 0 7 -43 0 17
0 0 9 0 43 -31 -20


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
#include <iostream>
#include <fstream>
#include <math.h>
#include <stdio.h>
 
using namespace std;
double opr(double* , int,int);
int main()
{ 
    int N,M,i,j,i0,j0;
    double res,c,res1;
    ifstream f("in_file.txt");
    ofstream r("out_f.txt");
    f>>N;
    double mas[N][N], vd[N-1][N-1],d[N][N],x[N];
    double B[N];
    for (i=0;i<N;i++)
    {
        for (j=0;j<N;j++)
        {
            f>>mas[i][j];
        }
        f>>B[i];
        
    }
    for (i0=0;i0<N;i0++)
    {
        for (j0=0;j0<N;j0++)
        {
            
            for (i=0;i<N-1;i++)
            {
                for (j=0;j<N-1;j++)
                {
                    if (i<i0&&j<j0)
                        vd[i][j]=mas[i][j];
                    if (i<i0&&j>=j0)
                        vd[i][j]=mas[i][j+1];
                    if(i<i0&&j<j0)
                        vd[i][j]=mas[i+1][j];
                                
                }
            }
            
            for (i=0;i<N-1;i++)
            {
                for (j=0;j<N-1;j++)
                r<<vd[i][j]<<'\t';
                r<<endl;
            }
            r<<endl;
            
            res1=opr(&vd[0][0], N-1, N-1);
            cout<<"resyltat glavnii= "<<res1*pow((-1),(i0+j0))<<endl;
            d[j0][i0]=(pow((-1),(i0+j0)))*res1;
        }
    }
    
    res=opr(&mas[0][0], N, M);
    cout<<"res = "<<res<<endl;
    
    for (i=0;i<N;i++)
    {
        for (j=0;j<N;j++)
        {
            cout<<mas[i][j]<<'\t';
        }
        cout<<endl;
    }
    for (i=0;i<N;i++)
    {
        x[i]=0;
        for (j=0;j<N;j++)
        {
            r<<d[i][j]/res<<'\t';
            x[i]=x[i]+d[i][j]*B[j]/res;
        }
        r<<endl;
    }
    for (i=0;i<N;i++)
    r<<"X"<<i+1<<"="<<x[i]<<endl;
}
 
        double opr(double* ap,int N,int M)
{ int i,j,d,x=1,p,k;
double opred, koeff,pff;
if(N>1)//öèêë Г±Г·ГЁГІГ*ГҐГІ îïðåäåëèòåëü
{
opred=1;
p=0;
    if( *(ap+(N-1)*M+N-1)==0)
    {
        k=0;
        for(d=N-2; d>=0 && k<1;d--) 
        {
            if( *(ap+d*M+(N-1))!=0)
            {
                p=p+d-(N-1);
                x=1;
                k++;
                for (j=0;j<M;j++)
                {
                    pff= *(ap+(N-1)*M+j);
                    *(ap+(N-1)*M+j)=(*(ap+d*M+j));
                    *(ap+d*M+j)=pff;
                }
            }
            else
            {
                x=0;
            }
            cout<<k<<"\t"<<d<<endl;
        
        }
    }
    
    if(x==0)
    {
        opred=0;
    }
    else
    {
        for(i=0;i<N-1;i++)
        {
            koeff= -( *(ap+i*M+N-1))/(*(ap+(N-1)*M+N-1));
 
            for(j=0;j<N;j++)
            {   
                *(ap+i*M+j)=(* (ap+i*M+j))+koeff*( *(ap+(N-1)*M+j));
                cout<< *(ap+i*M+j)<<endl;
            }
 
        }
            opred=( *(ap+(N-1)*M+(N-1))) * (pow(-1,p)) * opr(&ap[0], (N-1), M);
    }
}
    
    else 
    {
        opred = ( *(ap+(N-1)*M+(N-1)));
    }
    
    return opred;
}
Добавлено через 3 часа 18 минут
zss, можете, пожалуйста, найти ошибку?
0
05.01.2015, 22:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2015, 22:19
Привет! Вот еще темы с ответами:

Решение системы линейных алгебраических уравнений - C++
Добрый вечер!!! Помогите, пожалуйста, написать программу для решения системы уравнений итерационным методом(метод А-минимальных...

Найти решение системы линейных уравнений - C++
привет всем, пожалуста помогите составить программу или испроваить ошибки в моей условие задачи даны действительные числа a,b,c,d,e,f....

Решение системы линейных уравнений матричным методом - C++
Друзья, помогите пожалуйста с кодом. Нужен простой, работающий простенький код на С++ позволяющий решать систему линейных уравнений...

Решение системы линейных уравнений методом Гаусса - C++
необходимо решить данную задачу в visual studio c++, если можно с комментариями, в консольном режиме Реализуйте функцию решения...


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

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

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