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

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

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

Всех приветствую и желаю доброго дня!
Нуждаюсь в помощи по разработке алгоритма задания на языке С++
Необходимо написать программу для решения алгебраических уравнений и нахождения корней системы уравнения следующего вида:
a11+a12+a13=b14
a21+a22+a23=b24
a31+a32+a33=a34
Вот такая система, надеюсь на вашу помощь спасибо за внимание !
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2014, 08:53
Ответы с готовыми решениями:

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

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

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

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

25
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 9
30.06.2014, 12:38  [ТС] 21
именно так
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Эксперт CЭксперт С++
5094 / 2279 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
30.06.2014, 12:41 22
Цитата Сообщение от Relaxory Посмотреть сообщение
вот само задание
У Вас в учебнике не система линейных уравнений, а какая-то бредятина. Сами почитайте, да хоть в википедии.
Систему из трёх линейных уравнений я вам написал в корректной записи.
Насчёт кода - тут сложнее, я сам в С++ новичок. Мучайте поиск.
0
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,166
30.06.2014, 12:47 23
Relaxory, тогда читайте учебники по C++ для начинающих,или возьмите тему с форума и сделайте по аналогии.
1
Эксперт CЭксперт С++
5094 / 2279 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
30.06.2014, 13:04 24
Вот нашёл код. Автор кода говорит, что рабочий. Проверяйте, разбирайтесь.
Кликните здесь для просмотра всего текста

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
3102 / 2587 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
30.06.2014, 13:17 25
Попробую еще раз, только это уже более универсальный вариант
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Эксперт С++
5094 / 2279 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
30.06.2014, 14:09 26
Лучший ответ Сообщение было отмечено 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2014, 14:09
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru