Форум программистов, компьютерный форум CyberForum.ru

Dev Cpp Решение системы алгебраических уравнений компактным методом исключения - C++

Восстановить пароль Регистрация
 
lena_nikolaeva
Сообщений: n/a
11.03.2014, 17:52     Dev Cpp Решение системы алгебраических уравнений компактным методом исключения #1
Здравствуйте! Есть задание, "решение системы алгебраических уравнений компактным методом исключения. Коэффициенты обрабатываются в двух матрицах, матрица действительной части и матрица мнимой части комплексного числа в алгебраической форме."
На входе - txt файл с коэффициентами системы в виде матрицы размером N строк на N+1 столбцов, в N+1 столбце - свободные члены системы, коэффициенты - комплексные вещественные числа в алгебраической форме, вроде такого
3
1 -1 1 1 1 -1 2 0
1 1 1 -1 1 1 4 2
1 1 1 1 1 -1 0 2
0.0001

На выходе - файл значений решения системы в комплексной алгебраической форме
Так вот, самое интересное) есть код решения аналогичной задачи, только коэффициенты обрабатываются в объединенной матрице комплексных коэффициентов, вот код

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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <fstream>
 
using namespace std;
 
typedef double t_matrix[200][202];
 
void InputData(t_matrix,int&,int&,double&); // Ввод данных
void ProcessMatrix(t_matrix,int,int,double,bool&); // Преобразование матрицы
void BackTurn(t_matrix,int,int); // Обратный ход
void PrintComplex(double,double); // Вывод комплексного числа на консоль
void OutputResult(t_matrix,int,int,bool); // Вывод результатов
void OutputMatrix(t_matrix, int);
 
int main()
{
t_matrix a; // Матрица
int n, r; // Размер матрицы
double e; // Точность
InputData(a,n,r,e);
OutputMatrix(a, r);
bool solutionExists; // Решение существует
ProcessMatrix(a,n,r,e,solutionExists);
OutputMatrix(a, r);
if (solutionExists)
BackTurn(a,n,r);
OutputResult(a,n,r,solutionExists);
system("PAUSE");
return EXIT_SUCCESS;
}
 
/* Ввод данных (a - матрица коэффициентов, n,r - размеры, e - точность) */
void InputData(t_matrix a, int &n, int &r, double &e) 
{
 
ifstream f("SourceData.txt");
f » n;
r = 2*n;
cout « "Source data: \n";
cout « "n = " « n « '\n';
cout « "a =\n";
for (int i=1; i<=n; i++)
{ 
cout « " ";
for (int j=1; j<=n+1; j++)
{ 
double rea, ima;
f » rea;
f » ima;
PrintComplex(rea, ima);
int k = 2*i - 1;
int h = k + 1;
int m = 2*j - 1;
a[k][m] = rea;
a[h][m] = ima;
if (j != n + 1)
{
a[k][++m] = -ima;
a[h][m] = rea;
} 
}
cout « '\n';
}
f » e;
cout « "e = " « e « '\n';
f.close();
 
}
 
/* Обработка коэффициентов (a - матрица, n,r - размеры, e - точность, solutionExists - решение существует) */
void ProcessMatrix(t_matrix a, int n, int r, double e, bool &solutionExists)
{ 
double det = 1;
solutionExists = true;
for (int k=1; k<=r+1; k++) 
for (int i=1; i<=r; i++)
{
int h = i;
int s = 1;
int m;
if (i < k)
m = i - 1;
else
m = k - 1;
for (;;) 
{
double q = a[i][k];
if (m != 0)
for (int j=1;j<=m;j++)
q -= a[i][j]*a[j][k];
if (i == k)
{ 
if (fabs(q) <= e)
{ 
h++;
s = -s;
if (h > n)
{ // Нет решения
det = 0;
solutionExists = false;
return;
}
else
{ 
for (int j=1;j<=r;j++)
{
double p = a[i][j];
a[i][j] = a[h][j];
a[h][j] = p;
}
}
}
else
{ 
det *= s*q;
a[i][k] = (q);
break;
}
}
else 
{
if (i < k)
a[i][k] = (q / a[i][i]);
else
a[i][k] = (q);
break;
}
}
}
}
 
/* Обратный ход (a - матрица, n - размер) */
void BackTurn(t_matrix a, int n, int r)
{
for (int i = r-1; i>0; i--)
for (int j = r; j>=i+1; j--)
a[i][r+1] -= a[i][j]*a[j][r+1]; 
}
 
void PrintComplex(double ra, double ia)
{
cout « ra;
if (ia > 0)
cout « " + " « ia;
else
cout « " - " « -ia;
cout « "*j ";
}
 
/* Вывод результатов (a - матрица, n - размер, solutionExists - решение существует) */
void OutputResult(t_matrix a, int n, int r, bool solutionExists)
{
cout « "\nAnswer:\n";
ofstream f("Answer.txt");
if (solutionExists)
for (int i=1; i<=n; i++) 
{ 
cout « "x" « i « " = ";
PrintComplex(a[2*i-1][r+1], a[2*i][r+1]);
cout « '\n';
f « a[2*i-1][r+1] « "+j*" « a[2*i][r+1] « '\n'; 
}
else
{
cout « "Solution doesn't exists";
f « "No solution";
}
f.close();
cout « "\n\n"; 
}
 
void OutputMatrix(t_matrix a, int r)
{
for (int i=1;i<=r;i++)
{
for (int j=1; j<=r+1;j++)
cout « a[i][j] « ' ';
cout « '\n';
}
cout « '\n'; 
}
Нужно сделать так, чтобы соответствовало моей задачке. Помогите новенькой, пожалуйста!

Добавлено через 17 часов 16 минут
Все, больше неактуально.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2014, 17:52     Dev Cpp Решение системы алгебраических уравнений компактным методом исключения
Посмотрите здесь:

Решение системы уравнений компактным методом исключений C++
решение системы уравнений методом Гауса C++
Решение системы линейных алгебраических уравнений C++
C++ Решение системы линейных уравнений матричным методом
Решение системы дифференциальных уравнений методом Эйлера C++
C++ Решение СЛАУ компактным методом исключения
C++ Решение системы линейных алгебраических уравнений методом Гаусса
Решение системы алгебраических уравнений C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru