Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.58/26: Рейтинг темы: голосов - 26, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 9

Решение систем алгебраических уравнений

30.06.2014, 08:53. Показов 5845. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую и желаю доброго дня!
Нуждаюсь в помощи по разработке алгоритма задания на языке С++
Необходимо написать программу для решения алгебраических уравнений и нахождения корней системы уравнения следующего вида:
a11+a12+a13=b14
a21+a22+a23=b24
a31+a32+a33=a34
Вот такая система, надеюсь на вашу помощь спасибо за внимание !
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.06.2014, 08:53
Ответы с готовыми решениями:

Метод Монте-Карло для решение систем линейных алгебраических уравнений
Здравствуйте форумчане, у меня, наверное, проблема больше с математикой. Попытался написать программу, которая решает СЛАУ методом...

Решение систем линейных алгебраических уравнений методом Гаусса с выбором главного элемента
Помогите пожалуйста найти решение системы линейных уравнений с матричными элементами. Условия задания матрицы в файле.

Помогите найти программу решения систем алгебраических уравнений методом Зейделя
Ребята, помогите найти программу решения систем алгебраических уравнений методом Зейделя. Код нужен на С++ или на С#. Переделывать с...

25
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 9
30.06.2014, 12:38  [ТС]
Студворк — интернет-сервис помощи студентам
именно так
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
30.06.2014, 12:41
Цитата Сообщение от Relaxory Посмотреть сообщение
вот само задание
У Вас в учебнике не система линейных уравнений, а какая-то бредятина. Сами почитайте, да хоть в википедии.
Систему из трёх линейных уравнений я вам написал в корректной записи.
Насчёт кода - тут сложнее, я сам в С++ новичок. Мучайте поиск.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
30.06.2014, 12:47
Relaxory, тогда читайте учебники по C++ для начинающих,или возьмите тему с форума и сделайте по аналогии.
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
30.06.2014, 13:04
Вот нашёл код. Автор кода говорит, что рабочий. Проверяйте, разбирайтесь.
Кликните здесь для просмотра всего текста

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
#include<iostream>
#include <math.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int i, j, n, m;
    //создаем массив
    cout << "Введите число уравнений: ";
    cin >> n;
    cout << "Введите число неизвестных: ";
    cin >> m;
    m += 1;
    float **matrix = new float *[n];
    for (i=0; i<n; i++)
             matrix[i] = new float [m];
 
    //инициализируем
    for (i = 0; i<n; i++)
        for (j = 0; j<m; j++)
        {
            cout << "Элемент " << "[" << i+1 << " , " << j+1 << "]: "  ;
            cin >> matrix[i][j];
        }
 
    //выводим массив
    cout << "matrix: " << endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
    }
    cout << endl;
 
    //Метод Гаусса
    //Прямой ход, приведение к верхнетреугольному виду
    float  tmp, xx[m];
    int k;
 
    for (i=0; i<n; i++)
    {
        tmp=matrix[i][i];
        for (j=n;j>=i;j--)
            matrix[i][j]/=tmp;
        for (j=i+1;j<n;j++)
        {
            tmp=matrix[j][i];
            for (k=n; k>=i; k--)
                matrix[j][k]-=tmp*matrix[i][k];
        }
    }
    /*обратный ход*/
    xx[n-1] = matrix[n-1][n];
    for (i=n-2; i>=0; i--)
    {
        xx[i] = matrix[i][n];
        for (j=i+1;j<n;j++)
            xx[i]-=matrix[i][j]*xx[j];
    }
 
//Выводим решения
    for (i=0; i<n; i++)
        cout << xx[i] << " ";
    cout << endl;
 
    delete[] matrix;
 
    return 0;
}


P.S. Немного поправил форматирование. Кстати, четвёртая ссылка в гугле по запросу система линейных уравнений C++.
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
30.06.2014, 13:17
Попробую еще раз, только это уже более универсальный вариант
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
#include <iostream>
#include <cmath>
#include <cstdlib>
 
//Минор матрицы
double** minor(double** matrix, int row, int col, int size)
{
    double** minor;
    minor = new double*[size-1];
    int m_row = 0, m_col;
    for (int i = 0; i < size; i++)
    {
        m_col = 0;
        if(i != row)
        {
            minor[m_row] = new double[size-1];
            for (int j = 0; j < size; j++)
            {
                if(j != col)
                {
                    minor[m_row][m_col] = matrix[i][j];
                    m_col++;
                }
            }
            m_row++;
        }
    }
    return minor;
}
 
// Детерминант матрицы
double determinant(double** matrix,int size)
{
    if (size == 1)
        return matrix[0][0];
    else if (size == 2)
        return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
    double determ = 0;
    for (int j = 0; j < size; j++)
        if (matrix[0][j])
            determ += (j%2==0?1:-1) * matrix[0][j] * determinant(minor(matrix,0, j, size), size-1);
 
    return determ;
}
 
int main()
{
    char ch;
    setlocale(LC_ALL, "");
    do
    {
        system("cls");
        int row;
        std::cout << "Введите порядок уравнения: ";
        std::cin >> row;
        int col = row + 1;
        double d0[row][col];
        std::cout << "Введите коэффициенты уравнения:" << std::endl;
        for (int i = 0; i < row; i++)
            for (int j = 0; j < col; j++)
                std::cin >> d0[i][j];
        double ***d = new double **[col];
        for (int k = 0; k < col; k++)
        {
            d[k] = new double *[col];
            for (int i = 0; i < row; i++)
            {
                d[k][i] = new double[row];
                for (int j = 0; j < row; j++)
                {   
                    d[k][i][j] = d0[i][j];
                    if (k > 0 && j == k-1) d[k][i][j] = d0[i][col-1];
                }
            }
        }
        double det = determinant(d[0], row);
        std::cout << "determinant = " << det << std::endl;
        if (det != 0)
        {
            for (int k = 1; k < col; k++)
            {
                std::cout << "x" << k << " = " << determinant(d[k], row)/det << std::endl;
            }
        }
        else std::cout << "Корней нет!" << std::endl;
        for (int k = 0; k < col; k++)
        {
            for (int i =0; i < row; i++)
            {   
                delete[] d[k][i];
                d[k][i] = NULL;
            }
            delete[] d[k];
            d[k] = NULL;
        }
        delete[] d;
        d = NULL;
        std::cout << "Продолжить? ";
        std::cin >> ch;
    }
    while (ch != 'n');
    
    return 0;
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
30.06.2014, 14:09
Лучший ответ Сообщение было отмечено Relaxory как решение

Решение

Вот ещё очень простой, но при этом вполне работающий вариант (тоже поиск в гугле).

Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int a11, a12, a13, a21, a22, a23, a31, a32, a33, b1, b2, b3;
 
    cout << "Введите значение a11: ";
    cin >> a11;
    cout << "Введите значение a12: ";
    cin >> a12;
    cout << "Введите значение a13: ";
    cin >> a13;
    cout << endl;
 
    cout << "Введите значение a21: ";
    cin >> a21;
    cout << "Введите значение a22: ";
    cin >> a22;
    cout << "Введите значение a23: ";
    cin >> a23;
    cout << endl;
 
    cout << "Введите значение a31: ";
    cin >> a31;
    cout << "Введите значение a32: ";
    cin >> a32;
    cout << "Введите значение a33: ";
    cin >> a33;
    cout << endl;
 
    cout << "Введите значение b1: ";
    cin >> b1;
    cout << "Введите значение b2: ";
    cin >> b2;
    cout << "Введите значение b3: ";
    cin >> b3;
    cout << endl;
 
    int A1 = 0, A2 = 0, A3 = 0, A4 = 0, A5 = 0, A6 = 0, A7 = 0, A8 = 0;
 
    A1 = (a11 * a22) - (a21 * a12);
    A2 = (a11 * a23) - (a21 * a13);
    A3 = (a11 * b2) - (a21 * b1);
 
    A4 = (a11 * a32) - (a31 * a12);
    A5 = (a11 * a33) - (a31 * a13);
    A6 = (a11 * b3) - (a31 * b1);
 
    A7 = (A1 * A5) - (A4 * A2);
    A8 = (A1 * A6) - (A4 * A3);
 
    int x1 = 0, x2 = 0, x3 = 0, y = 0, z = 0;
 
    x3 = A8 / A7;
    y = A3 -(A2 * x3);
    x2 = y / A1;
    z = b1 - ((a12 * x2) + (a13 * x3));
    x1 = z / a11;
 
    cout << endl;
    cout << "x1 = " << x1 << endl;
    cout << "x2 = " << x2 << endl;
    cout << "x3 = " << x3 << endl;
 
    system("pause");
    return 0;
}


P.S. Тоже немного форматирование кода поправил.

Добавлено через 8 минут
А вот этот вариант и вовсе в теме, которая в шапке раздела С++ для начинающих прикреплена.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.06.2014, 14:09

Решение системы алгебраических уравнений
Доброго времени суток, форумчане :) Помогите пожалуйста решить задачу: Найти корни системы линейных алгебраических уравнений...

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

Решение СЛАУ - Системы линейных алгебраических уравнений
Задачу почти закончил писать, матрицу приводит к ступенчатому виду, только не могу понять как сделать обратный проход и найти корни...

Решение системы линейных алгебраических уравнений методом Гаусса
Решить систему n линейных алгебраических уравнений методом Гаусса. Использовать указатели.

Решение системы линейных алгебраических уравнений, метод простой итерации
Решить систему линейных алгебраических уравнений. Коэффициенты и свободные члены линейного уравнения считываются с предварительно...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru