0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
1

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

28.09.2014, 20:43. Показов 7388. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня программа для решения слау методом Гаусса с выбором главного элемента по столбцам. Что-то мне не нравятся ответы, гляньте может в чём-то накосячел? Очень прошу помогите, уже сил нету((. Заранее спасибо.
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 4
int main(void)
{
    //double mas[N][N + 1];
    double x[N],s,r; //Корни системы
    int i, j, k, z,max=0;
    int n = 4;
    double mas[N][N + 1] =
    { { 45, 5, 7, 7, 3 },
    { 2, 0, 4, 4, 6 },
    { 7, 56, 7, -5, 2 },
    { 6000, 3, 4, 6, 1 },
    };
    //Вывод введенной системы
 
    printf("Sistema\n");
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n + 1; j++)
            printf("%7.2f ", mas[i][j]);
        printf("\n");
    }
    for (k = 0; k < 3; k++){
        max = abs(mas[k][k]);
        z = k;
        for (int i = k + 1; i < n; i++)
            if (abs(mas[i][k]) > max){
                max = abs(mas[i][k]);
                z = i;
            }
        if (z != k){
            int c[5];
            for (j = k; j < n + 1; j++){
                c[j] = mas[z][j];
                mas[z][j] = mas[k][j];
                mas[k][j] = c[j];
            }
            }
        for (i = k + 1; i < n; i++){
                r = mas[i][k] / mas[k][k];
                for (j = k; j < n+1; j++)
                    mas[i][j] = mas[i][j] - mas[k][j] * r;
                }
        }
    /*x[3] = mas[3][4]/mas[3][3];
    for (i = 3; i <= 0;i--){
        for (j = i + 1; j < N + 1; j++)
            s += mas[i][j] * x[j];
        x[i] = ;
    }*/
    x[3] = mas[3][4] / mas[3][3];
    x[2] = (mas[2][4]-(x[3]*mas[2][3]))/mas[2][2];
    x[1] = (mas[1][4]-(x[3]*mas[1][3]+x[2]*mas[1][2])) / mas[1][1];
    x[0] = (mas[0][4]-(x[3]*mas[0][3]+x[2]*mas[0][2]+x[1]*mas[0][1])) / mas[0][0];
    //for (i = 2; i <= 0; i--){
    //      x[i] = (mas[i][4] - (x[3] * mas[i][3]+x[2]*mas[i][2]+x[1]*mas[i][1])) / mas[i][i];
    //}
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n + 1; j++)
            printf("%7.2f ", mas[i][j]);
        printf("\n");
    }
    for (i = 0; i < n;i++)
    printf(" x[%d]= %lf %d\n",i+1,x[i]);
    _getch();
}
0
28.09.2014, 20:43
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.09.2014, 20:43
Ответы с готовыми решениями:

Решение СЛАУ методом Гаусса
Всем привет))) Друзья, сколько я уже лазию по инету и по этому форуму, я никак не могу найти правильно работающей программки. Может кто...

Решение СЛАУ методом Гаусса
В институте задали написать программу решения СЛАУ методом Гаусса, но я абсолютный чайник (знаю, как должна решаться система, но с С++ пока...

Решение СЛАУ методом Гаусса
помогите разобраться!!ВЫдает 85 ошибок!!!! #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;tchar.h&gt; #include &lt;iostream&gt; ...

10
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 702
29.09.2014, 01:40 2
Mansu,
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
int _tmain(int argc, _TCHAR* argv[])
{
    const int n=4;
    double r;
    int i, j, k, z, max, tmp;
    int masI[n];  //Массив индексов
 
    double mas[n][n + 1] =
    { { 45, 5, 7, 7, 3 },
      { 2, 0, 4, 4, 6 },
      { 7, 56, 7, -5, 2 },
      { 6000, 3, 4, 6, 1 }};
 
    for(i=0; i<n; ++i) masI[i]= i;
    //Вывод введенной системы
 
    printf("Sistema\n");
    for (i = 0; i < n; i++)
    {
     for (j = 0; j < n + 1; j++) printf("%7.2f ", mas[i][j]);
     printf("\n");
    };
 
    for (k = 0; k < n; k++)
    {
        max = fabs(mas[masI[k]][k]);
        z = k;
        for (int i = k + 1; i < n; i++)
            if (fabs(mas[masI[i]][k]) > max)
            {
             max = fabs(mas[masI[i]][k]);
             z = i;
            };
 
        if (z!=k)
        {
         tmp= masI[k];
         masI[k]= masI[z];
         masI[z]= tmp;
        };
 
        r= mas[masI[k]][k];
        for (j = k; j < n+1; j++) mas[masI[k]][j]/= r;
        for (i = 0; i < n; i++)
        {
         r = mas[i][k];
         if(i!=masI[k]) for (j = k; j < n+1; j++) mas[i][j]-= mas[masI[k]][j] * r;
        };
    };
 
    for (i = 0; i < n; i++)
    {
     for (j = 0; j < n + 1; j++) printf("%7.4f ", mas[masI[i]][j]);
     printf("\n");
    };
 
    _getch();
}
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
29.09.2014, 08:40  [ТС] 3
Можете именно мою, а Вашу. Я сам нашел в интернете кучу рабочих прог, но хочу просто свою сделать.
0
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 702
29.09.2014, 18:44 4
Цитата Сообщение от Mansu Посмотреть сообщение
Можете именно мою, а Вашу. Я сам нашел в интернете кучу рабочих прог, но хочу просто свою сделать.
Mansu, как минимум в строках 55-58 неправильно написано (попытка сделать обратный ход в методе Гаусса) - почему не записать в общем виде, как и прямой ход? Ведь очень тяжело понять. Кстати, Вам, вроде, надо же было без перестановок метод делать? У меня как раз с выбором главного элемента без перестановок.
1
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
29.09.2014, 20:14  [ТС] 5
А почему у него только главная диагональ 1? Это ж метод LU

Добавлено через 1 минуту
В гауссе должни бить 0 под главной диагональю.

Добавлено через 57 секунд
Вот у меня уже моя программа рабочая, только с перестановками, если поможете переделать, буду благодарен.
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 4
int main(void)
{
    //double mas[N][N + 1];
    double x[N],s,r,bnb[N]; //Корни системы
    int i, j, k, z,max=0;
    const int n = 4;
    double a[n] = {3,6,2,1};
    double mas[n][n] =
    { { 45, 5, 7, 7 },
    { 2, 0, 4, 4 },
    { 7, 56, 7, -5 },
    { 6000, 3, 4, 6 },
    };
    double c[n]; 
    for (i = 0; i<n; ++i) c[i] = i;
    //Вывод введенной системы
    printf("Sistema\n");
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n ; j++)
            printf("%7.2f ", mas[i][j]);
        printf("%7.2f\n",a[i]);
    }
    for (k = 0; k < 3; k++){
        for (j = 0; j < n; j++)
            c[j] = mas[j][k];
        max = fabs(mas[k][k]);
        z = k;
        for (int i = k + 1; i < n; i++)
            if (abs(mas[i][k]) > max){
                max = abs(mas[i][k]);
                z = i;
            }
        if (z != k){
            int m;
            c[z] = m;
            c[z] = c[0];
            c[0] = m;
            /*for (j = k; j < n; j++){
                c = mas[k][j];
                mas[k][j] = mas[z][j];
                mas[z][j] = c;
            }
            c = a[k]; a[k] = a[z]; a[z] = c;*/
        }
        for (i = k + 1; i < n; i++){
                r = mas[c[i]][k] / mas[c[k]][k];
                for (j = k; j < n; j++)
                    mas[i][j] = mas[i][j] - mas[k][j] * r;
                a[i] = a[i] - a[k] * r;
        }
        }
    x[3] = a[3] / mas[3][3];
    for (i = 2; i >= 0; i--){
        s = 0;
        for (j = i + 1; j < n; j++)
            s = s + mas[i][j] * x[j];
        x[i] = (a[i] - s) / mas[i][i];
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j <n ; j++)
            printf("%7.2f ", mas[i][j]);
        printf("%7.2f\n",a[i]);
    }
    for (i = 0; i < n; i++){
        s = 0;
        for (j = 1; j < n;j++)
            s = s + mas[i][j] * x[j];
        bnb[i] = s - a[i];
    }
    for (i = 0; i < n; i++){
        printf(" x[%d]= %lf %d\n", i + 1, x[i]);
        printf(" bnb[%d]= %1.7lf %d\n", i + 1, bnb[i]);
    }
    _getch();
}
Добавлено через 38 минут
Я понял, у Вас последнем столбце ответы. Правильно?
0
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 702
29.09.2014, 20:20 6
Так, извиняюсь, строки 55-58 правильные, ошибка только в строке 36 - замените int на double.
Не успел))

Добавлено через 2 минуты
Цитата Сообщение от Mansu Посмотреть сообщение
Я понял, у Вас последнем столбце ответы. Правильно?
да.
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
29.09.2014, 20:25  [ТС] 7
Это в какой программе изменить?

Добавлено через 1 минуту
И как мне сделать вектор отклонений?

Добавлено через 1 минуту
В моей программе он так считается.
C++
1
2
3
4
5
6
for (i = 0; i < n; i++){
        s = 0;
        for (j = 1; j < n;j++)
            s = s + mas[i][j] * x[j];
        bnb[i] = s - a[i];
    }
А в Вашей я набросал
C++
1
2
3
4
5
6
7
for (i = 0; i < n;i++){
         s = 0;
        for (j = 0; j < n; j++)
            s = s + mas[masI[k]][j] * mas[masI[i]][n];
        bnb[i] = s - (последний столбик, я не знаю как он у Вас обозначен);
        printf("%lf\n",bnb[i]);
    }
0
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 702
29.09.2014, 20:25 8
Цитата Сообщение от Mansu Посмотреть сообщение
Это в какой программе изменить?
в самой первой
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
29.09.2014, 20:27  [ТС] 9
Да ладно, оно первая, я почти в Вашей разобрался. И как все-таки красиво вывести обработанную матрицу, как в моей 2 проге. И помогите с этим методом отклонений, он важен. По нему я пойму насколько точны подсчёты.
0
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 702
29.09.2014, 21:01 10
А Вы уверены, что вторая Ваша программа рабочая? У меня не запускается - для индексов Вы используете действительную переменную (массив c).

Добавлено через 25 минут
Цитата Сообщение от Mansu Посмотреть сообщение
По нему я пойму насколько точны подсчёты.
И точность проще проверить просто подставив результат в уравнения.
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
29.09.2014, 21:22  [ТС] 11
Так правильно?
C++
1
bnb[i] = a[i] - mas[masI[i]][j] * mas[masI[i]][n];
где int a[n] = {3,6,2,1};???????????

Добавлено через 4 минуты
AndrSlav, Она работает, только там с перестановкой.

Добавлено через 2 минуты
Оно не правильно, но блин как написать?

Добавлено через 3 минуты
Где находится столбец переменных ,которые мы множем на r. Это они mas[i][n]???

Добавлено через 1 минуту
AndrSlav, Помогите пожалуйста, я уже потерялся((((
0
29.09.2014, 21:22
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2014, 21:22
Помогаю со студенческими работами здесь

Реализовать решение СЛАУ методом Гаусса
Не могу разобраться в чём проблема. Пытаюсь реализовать метод гаусса, вроде бы всё правильно, но приводит матрицу к не правильному...

Решение СЛАУ методом Гаусса, индексы
Собственно программа решает слау методом гаусса. Как найти индексы главного элемента на второй итерации? #include &lt;iostream.h&gt;...

Решение СЛАУ методом Гаусса с выбором ведущего элемента
1) Написать вычислительную программу на языке программирования С++ для решения СЛАУ методом Гаусса с выбором ведущего элемента. Код...

Найти решение СЛАУ методом Гаусса (без перестановки строк)
Итак, требуется найти решение СЛАУ методом Гаусса (без перестановки строк). Проще говоря, есть матрица А, умножаемая на матрицу Х,...

Почему программа прерывается с ошибкой? Реализовывал решение СЛАУ методом Гаусса
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { int n=0; int m=0; int l1=5; int...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Ключевые слова Python
hw_wired 15.02.2025
Ключевые слова в Python - это специальные зарезервированные слова, которые имеют особое значение и функции в языке. В настоящее время Python включает 35 ключевых слов и 4 мягких ключевых слова. Эти. . .
Отличия изменяемых и неизменяемых типов в Python
hw_wired 15.02.2025
В Python существует принципиальное различие между изменяемыми (mutable) и неизменяемыми (immutable) типами данных, которое оказывает существенное влияние на работу программ. Это различие часто. . .
Python: сравнение списков и кортежей
hw_wired 15.02.2025
В Python последовательности являются одними из самых важных и часто используемых типов данных. Они позволяют хранить упорядоченные наборы элементов, к которым можно обращаться по индексу. Среди всех. . .
Как скачивать файлы с URL с помощью Python
hw_wired 15.02.2025
Для скачивания файлов Python предлагает как встроенные средства, так и сторонние библиотеки. Встроенный модуль urllib из стандартной библиотеки обеспечивает базовую функциональность для работы с URL. . .
Использование SQLAlchemy в Python
hw_wired 15.02.2025
SQLAlchemy - мощная библиотека для работы с базами данных в Python, которая предоставляет полноценный набор средств для объектно-реляционного отображения (ORM) и обширные возможности для работы с. . .
Взаимодействие с REST API в Python
hw_wired 15.02.2025
В современном мире разработки программного обеспечения REST API стал неотъемлемой частью архитектуры веб-приложений. API (Application Programming Interface) - это набор правил и протоколов,. . .
Разделение строк в Python
hw_wired 15.02.2025
Python предлагает богатый набор возможностей для работы со строками, и среди них разделение строк занимает особое место. Этот процесс позволяет разбивать текст на отдельные компоненты, что критично. . .
Объединение строк в Python
hw_wired 15.02.2025
При работе с текстовыми данными в Python нередко возникает необходимость объединять несколько строк в одну. Это может потребоваться при форматировании вывода, обработке текстовых файлов или создании. . .
Лучшие игровые движки на Python
hw_wired 15.02.2025
В последнее время разработка игр стала одним из самых популярных направлений программирования, и Python не остался в стороне от этого тренда. Несмотря на то, что Python обычно не ассоциируется с. . .
Декоратор jit в Python
hw_wired 15.02.2025
Если вы достаточно долго изучаете программы и пакеты на Python для машинного обучения, то наверняка замечали, что паттерн "JIT-декоратор" довольно популярен. Этот подход позволяет превратить обычные. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru