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

Решание СЛАУ методом Гаусса в С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 50, средняя оценка - 4.94
Георгич
0 / 0 / 0
Регистрация: 04.02.2010
Сообщений: 5
05.02.2010, 10:02     Решание СЛАУ методом Гаусса в С++ #1
Салют обитателям форума! Вот значит какое дело, у меня такое задание : "Решение уравнений методом Гаусса. Коэффициенты обрабатываются в двух матрицах: матрице модуля и матрице угла комплексного числа в символической форме."
Пытаюсь делать сам, для начала я разбил исходную матрицу на 2 двумерных массива(модуля и угла); перевел углы в радианы. Тут дело встало, нужно найти максимальный элемент, он как бы один на оба массива, должна быть какая-то формула, а где её взять не представляю. Кто шарит подскажите что за формула, заранее благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2010, 10:02     Решание СЛАУ методом Гаусса в С++
Посмотрите здесь:

Решение СЛАУ методом Гаусса C++
Ошибка в решении СЛАУ методом Гаусса C++
C++ Решение СЛАУ методом Гаусса, индексы
Решить СЛАУ методом Гаусса (проверить) C++
C++ СЛАУ методом Жордана-Гаусса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
JKeeJ1e30
12 / 12 / 0
Регистрация: 04.02.2010
Сообщений: 45
05.02.2010, 10:17     Решание СЛАУ методом Гаусса в С++ #2
Тебе просто максимальный элемент от двумерного массива? Смотри:

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
int max,n,m,i,j;
int a[1000][1000]
 
using namespace std;
 
int main()
{
    cin >>n >>m;
    cin >>a[1][1];
    max=a[1][1];
    for(i=0; i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cin >>a[i][j];
            if (a[i][j]>max)
            {
                max=a[i][j];
            }
        }
    }
    cout <<max;
    return 0;
}
Darky
Быдлокодер
 Аватар для Darky
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
05.02.2010, 12:45     Решание СЛАУ методом Гаусса в С++ #3
JKeeJ1e30, Ужас..
C++
1
int main =* std::max_element (A,A+N);
Георгич
0 / 0 / 0
Регистрация: 04.02.2010
Сообщений: 5
05.02.2010, 15:48  [ТС]     Решание СЛАУ методом Гаусса в С++ #4
Да просто найти макс элемент двумерного массива и я могу) Но только для моего задания(см.выше) этот элемент должен находится по какой-то формуле сразу из обоих массивов(массива модуля и массива угла комплексного числа в символической форме)
Darky
Быдлокодер
 Аватар для Darky
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
05.02.2010, 15:51     Решание СЛАУ методом Гаусса в С++ #5
Да даже если из двух массивов, в чем проблема?
Находишь максимум в обоих и сравниваешь их
JKeeJ1e30
12 / 12 / 0
Регистрация: 04.02.2010
Сообщений: 45
05.02.2010, 15:55     Решание СЛАУ методом Гаусса в С++ #6
Darky, Нах так?! У тебя времени полно?! Подключение доп. функции-это обращение к библиотеке, время работы самой функции и т.д. и т.п. Сортируешь ты с помощью qsort, чтоли?
Георгич, переведи комплексное число в символич вид и найди макс элемент из обеих матриц. Или я что-то недопонял? Объясни по нормальному
Darky
Быдлокодер
 Аватар для Darky
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
05.02.2010, 16:00     Решание СЛАУ методом Гаусса в С++ #7
JKeeJ1e30, Во-первых, Ваше решение нерационально.
Переменная m вообще нигде не используется, кроме как в нее записывается значение и ничего больше.
Во-вторых,
C++
1
cin >>a[1][1];
Это зачем?

А max_element это проверенный способ, и подключаемая библиотека помогает реализовать множество подобных алгоритмов, не только max_element
JKeeJ1e30
12 / 12 / 0
Регистрация: 04.02.2010
Сообщений: 45
05.02.2010, 16:08     Решание СЛАУ методом Гаусса в С++ #8
Цитата Сообщение от Darky Посмотреть сообщение
JKeeJ1e30, Во-первых, Ваше решение нерационально.
Переменная m вообще нигде не используется, кроме как в нее записывается значение и ничего больше.
Во-вторых,
C++
1
cin >>a[1][1];
Это зачем?

А max_element это проверенный способ, и подключаемая библиотека помогает реализовать множество подобных алгоритмов, не только max_element
насчет m правильно заметил-ее нужно во 2 цикле поставить вместо n
cin >>a[1][1](вернее, cin >>a[0][0]. Я никогда проги не писал с первого раза правильно) нужен, чтобы задать начальное значение max(по дефолту ведь он равен нулю, а вдруг у нас матрица вся из сплошь отрицательных элементов? Программа будет работать некорректно. Можно конечно было задать минимальное значение инта, но я его не помню. Можно было двигать единицу по разрядям но это тупо.

Добавлено через 1 минуту
А про библиотеку я и говорю-подключение ее это дополнительное системное время. Ты ведь, надеюсь, не сортируешь элементы с помощью тупой и медленной qsort?
Георгич
0 / 0 / 0
Регистрация: 04.02.2010
Сообщений: 5
05.02.2010, 17:13  [ТС]     Решание СЛАУ методом Гаусса в С++ #9
Да поймите, что собой представляют эти массивы). Соответствующие числа обоих массивов на самом деле одно и тоже КОМПЛЕКСНОЕ число. Есть фаил, для ввода данных, в этом файле записана СЛАУ, она же матрица. Выглядит матрица примерно так: возьмем матрицу комплексных чисел второго порядка
1 2 1 2 1 2
1 2 1 2 1 2
где 1-действительные части комплексного числа(модуля), их мы путем нехитрого перебора помещаем в созданный нами двумерный массив.
2-мнимая часть,записанная в градусах(угол комплексного числа), заполняем ими второй двумерный массив, и переводим в радианы.
Так вот видно что нужно искать не наибольшее в каждом массиве, а потом сравнивать их, а максимум нужно найти один, максимум начальной матрицы, который будет представлен соответствующими элементами обоих массивов. Вроде так должно быть понятнее=) И спасибо тем кто помогает=)
JKeeJ1e30
12 / 12 / 0
Регистрация: 04.02.2010
Сообщений: 45
05.02.2010, 17:26     Решание СЛАУ методом Гаусса в С++ #10
Парень, мне 3 года долбали-сначала на физике в школе еще, потом на матане и алгеме-что комплексные числа сравнивать НЕЛЬЗЯ. По каким принципам ты их собираешься сравнивать? Удаленность от точки (0,0)?
Георгич
0 / 0 / 0
Регистрация: 04.02.2010
Сообщений: 5
05.02.2010, 17:39  [ТС]     Решание СЛАУ методом Гаусса в С++ #11
Ну так их и нужно сравнить по отдельности=) Наверно, ы) Я скоро ап стену обьюсь с этой задачей)))
Чтобы решать Гауссом нужно найти максимальный элемент, а как это сделать хз( Рас препод задал, значит решается как-то=)
JKeeJ1e30
12 / 12 / 0
Регистрация: 04.02.2010
Сообщений: 45
05.02.2010, 17:42     Решание СЛАУ методом Гаусса в С++ #12
Скажи своему преподу чтобы за учебники садился. Комплексные числа НЕ СРАВНИВАЮТСЯ. В ПРИНЦИПЕ
jung
2 / 2 / 1
Регистрация: 25.11.2009
Сообщений: 40
05.02.2010, 18:50     Решание СЛАУ методом Гаусса в С++ #13
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
#include <conio.h>
 
#include <stdio.h>
 
#include <iostream.h>
 
#include <math.h>
 
const int N = 40
 
//Решение системы линейных уравнений
 
int main() {
 
int n;
 
bool ocenka=true, bl;
 
const eps=1.0e-30; //Точность решения
 
int nmk,j,ip,np1mj,np1,ipivot,ic,i,k,ir;
 
double pivot,b; //pivot - опорное значение
 
/*Расширенная матрица неизвестных и свободных членов */
 
double a[N+1][N+2]; 
 
printf("Решение системы линейных уравнений \n");
 
printf("Введите размерность системы уравнений: \n");
 
cin>>n;
 
for (i=1;i<=n;i++) {
 
printf("\nВводите через пробел элементы");
 
printf(" и свободный член уравнения %d\n",i);
 
for (j=1;j<=n+1;j++)
 
cin>>a[i][j];
 
}
 
 
np1=n+1; // Имя столбца свободных членов
 
ic=1;
 
ir=1;
 
do {
 
pivot=a[ir][ic]; // Выбор опорного значения
 
ipivot=ir; // Опорная строка
 
for (i=ir;i<=n;i++)
 
if (fabs(a[i][ic])>fabs(pivot)) //Опорное значение = макс. в столбце
 
{
 
pivot=a[i][ic];
 
ipivot=i; //Опорная строка
 
}
 
if (fabs(pivot)<=eps ) //Если все коэффициенты столбца ≈ 0
 
{
 
printf("Определитель равен нулю. Решения нет");
 
ocenka=false;
 
getch();
 
return !ocenka; // Останов программы
 
}
 
if (ipivot!=ir) // Перемещение опорной строки
 
for (k=ic;k<=np1;k++)
 
{
 
b=a[ipivot][k];
 
a[ipivot][k]=a[ir][k];
 
a[ir][k]=b;
 
}
 
 
for (k=ic;k<=np1;k++) // Приведение строки к общему знаменателю
 
a[ir][k]=a[ir][k]/pivot;
 
bl=(ir!=n);
 
if (bl)
 
{
 
for (ip=ir+1;ip<=n;ip++)
 
{
 
b=a[ip][ic];
 
if (fabs(b)>eps)
 
for (k=ic;k<=np1;k++)
 
a[ip][k]=a[ip][k]-a[ir][k]*b; // Сокращение элемента
 
}
 
ir++; //Переход к сокращению элемента
 
ic++; //в следующей строке
 
}
 
} while (bl);
 
for (k=1;k<=n-1;k++) // Цикл вычисления неизвестных
 
{ //(ими замещаются свободные члены)
 
nmk=n-k;
 
for (j=1;j<=k;j++)
 
{
 
np1mj=np1-j;
 
a[nmk][np1]=a[nmk][np1]-a[nmk][np1mj]*a[np1mj][np1];
 
}
 
}
 
printf("Решение:\n") // Печать результата;
 
for (i=1;i<=n;i++) {
 
printf("x(%2i)=%10.5lf\n",i,a[i][n+1]);
 
};
 
printf("press eny key for quit");
 
getch();
 
return !ocenka;
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2010, 18:57     Решание СЛАУ методом Гаусса в С++
Еще ссылки по теме:

C++ Решение СЛАУ методом Гаусса
C++ Решение СЛАУ методом Гаусса
СЛАУ методом Гаусса C++

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

Или воспользуйтесь поиском по форуму:
Георгич
0 / 0 / 0
Регистрация: 04.02.2010
Сообщений: 5
06.02.2010, 18:57  [ТС]     Решание СЛАУ методом Гаусса в С++ #14
я понял что нужно сделать=)
для начала из символьной формы превращаем в алгебраическую вот по таким формулам:
Re[i][j]=((Mo[i][j])/(sqrt(tan(Yg[i][j])*tan(Yg[i][j])+1)));
Im[i][j]=((Mo[i][j]*tan(Yg[i][j]))/(sqrt(tan(Yg[i][j])*tan(Yg[i][j])+1)));
где Re и Im - действительная и мнимая части в алгебраической форме, а Mo и Yg - действительная и мнимая части в символьной форме (они же модуль и угол).
А потом для нахождения максимума запускаем цикл и юзаем сею функцию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double Max(double Re[N][N+1],double Im[N][N+1],int n,int k,int &p,int &m)
    {
       double max;
       max = 0;
 
               if (max < sqrt(Re[i][j]*Re[i][j]+Im[i][j]*Im[i][j]))
                   {
                     max=sqrt(a[i][j]*a[i][j]+ia[i][j]*ia[i][j]);
                 p=i;
                 m=j;
               }
     return max;
    }
Добавлено через 4 минуты
темку не закрывайте плиз, а то задача еще не решена. Возникнут по ней еще вопросы, чтобы новую тему не создавать сюда напишу.
Yandex
Объявления
06.02.2010, 18:57     Решание СЛАУ методом Гаусса в С++
Ответ Создать тему
Опции темы

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