Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
1

Помогите исправить программу решения системы уравнений

09.06.2014, 01:02. Показов 835. Ответов 9
Метки нет (Все метки)

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
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
# include <stdio.h>
#include <iostream>
# include <math.h>
#include <conio.h>
#include <locale.h>
 
using namespace std;
 
void Iteration( double **A, double *b, double *x1, int n);
int F(int n, double *x1, double *x2);
void Full_1(double *A, int n);
void Full_2(double **A,int n);
 
int main(){
 
    // Значения для проверки:
 
    //const int n = 3;
    //double A[n][n] = { { 6.0, -1.0, -1.0 }, { -1.0, 6.0, -1.0 }, { -1.0, -1.0, 6.0 } };
    //double b[n] = { 11.0, 32.0, 42.0 };
    //double x1[n] = { 4.0, 4.0, 4.0 };
 
    int n;
    cout << "Enter n:" << endl;
    cin >> n;
 
    double **A = new double*[n];
    for (int i=0 ; i < n ; i++) 
        A[i] = new double[n];
 
    double *b = new double[n];
    double *x1 = new double[n];
 
    cout << "Enter A:" << endl;
    Full_2(A, n);
    cout << "Enter b:" << endl;
    Full_1(b, n);
    cout << "Enter x0:" << endl;
    Full_1(x1, n);
    
 
    Iteration( A, b, x1, n);
 
    _getch();
    return 0;
}
 
void Iteration( double **A, double *b, double *x1, int n){
 
    double *x2 = new double[n];
    for (int i=0 ; i < n ; i++) 
        x2[i] = 0;
 
    for (int i = 0; i < n; i++){
        double s = 0;
        for (int j = 0; j < n; j++)
            s = s + A[i][j] * x1[j];
        s = s - A[i][i] * x1[i];
        x2[i] = (1.0 / A[i][i]) * (b[i] - s);
    }
 
    int f = F(n, x1, x2);
 
    while ( f == 1){
        for (int i = 0; i < n; i++){
            double t = x2[i];
            double s = 0;
            for (int j = 0; j < n; j++)
                s = s + A[i][j] * x1[j];
            s = s - A[i][i] * x1[i];
            x2[i] = (1.0 / A[i][i]) * (b[i] - s);
            x1[i] = t;
        }
        f = F(n, x1, x2);
    }
 
    cout << "х:" << endl;
    for (int i = 0; i < n; i++)
        cout << x2[i] << endl;
 
}
 
// Условие выполнения итерации
 
int F(int n, double *x1, double *x2){
    double eps = 0.001;
    double max = fabs(x2[0] - x1[0]);
    for (int i = 1; i < n; i++){
        if (fabs(x2[i] - x1[i]) > max)
            max = fabs(x2[i] - x1[i]);
    }
    if (max > eps)
        return 1;
    else
        return 0;
 
}
 
//Инициализация массива:
 
void Full_1(double *A, int n){
    for (int i = 0; i < n; i++)
        scanf_s("%f", &A[i]);
}
 
void Full_2(double **A,int n){
    for (int i = 0 ; i < n ; i++)
        for (int j = 0 ; j < n ; j++)
            scanf_s("%f", &A[i][j]);
}
Миниатюры
Помогите исправить программу решения системы уравнений  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2014, 01:02
Ответы с готовыми решениями:

Составить программу решения системы уравнений
составить программу решения системы уравнений ax+by+c=0 a1x+b1y+d=0

Написать программу для решения системы нелинейных уравнений
Не могу сделать прогу на С++. Кто сделает - огромное спасибо. sin(9x)+cos(7y)-5z*z=10,...

Написать программу для решения системы двух уравнений
не знаю как написать программу вводимы и выводимые данные сопровождать краткими поясняющими...

Написать программу решения системы тригонометрических уравнений (разветвляющиеся алгоритмы)
Здравствуйте уважаемые форумчане, требуется ваша помощь. Я немного затрудняюсь в написании кода...

9
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
09.06.2014, 09:46 2
A7X, спасибо, что делитесь своими наработками.
0
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 13:34  [ТС] 3
SatanaXIII, признаю, что "выводит неопределенность" слишком короткая и непонятная формулировка моей проблемы, но так и есть)
Выводит неопределенность, как результат работы при данных значениях для проверки, вместо нормального результата
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,494
Записей в блоге: 1
09.06.2014, 14:03 4
A7X, ну а какое должно быть решение?

Добавлено через 2 минуты
C++
1
2
3
    int f = F(n, x1, x2);
 
    while ( f == 1){
не легче писать так???
C++
1
2
while( F(n, x1, x2) ){
...
Добавлено через 11 минут
идём далее! бред полный тут
C++
1
2
3
4
5
6
7
8
9
10
11
12
 for (int i = 0; i < n; i++){
            double t = x2[i];
            double s = 0;
            for (int j = 0; j < n; j++)
                s = s + A[i][j] * x1[j];//используешь значения x1[i], но при вычислении x1[i+1] будет использоваться 
 
//значения x не от предыдущей итерации, а наполовину от предыдущей - наполовину от текущей!
            s = s - A[i][i] * x1[i];
            x2[i] = (1.0 / A[i][i]) * (b[i] - s);
            x1[i] = t;//Вот! тут же их меняешь, не закончив толком текущую итерацию
 
        }
Добавлено через 1 минуту
точнее, что я туплю. у тебя и х2 и х1 всё вперемешку!

Добавлено через 8 минут
Вот, я бы так сделал!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    do{
        for (int i = 0; i < n; i++){
            double s = 0;
            for (int j = 0; j < n; j++)
                s = s + A[i][j] * x1[j];
            s = s - A[i][i] * x1[i];
            x2[i] = (1.0 / A[i][i]) * (b[i] - s);
        } 
        f=F(n, x1, x2);
        for (int i = 0; i < n; i++)
            x1[i]=x2[i];
    }while (f);
  cout << "х:" << endl;
    for (int i = 0; i < n; i++)
        cout << x1[i] << endl;
0
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 14:07  [ТС] 5
Kuzia domovenok, Должны быть числа: 4,6 7,6 9, если не ошибаюсь

Извиняюсь, не сразу увидела ваше новое сообщение
Миниатюры
Помогите исправить программу решения системы уравнений  
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,494
Записей в блоге: 1
09.06.2014, 14:13 6
Цитата Сообщение от A7X Посмотреть сообщение
4,6 7,6 9
это какого фига у уравнения третьего порядка должен быть корень пятого порядка? Ты в каком классе учишься? В старших это уже должны объяснять!
Хотя бы в уме реши свою систему уравнений сначала!
0
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 14:20  [ТС] 7
Kuzia domovenok, Извините, мы с вами друг друга недопоняли: 4,6 ; 7,6; 9 - три числа !)
Спасибо за помощь
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,494
Записей в блоге: 1
09.06.2014, 14:21 8
а-ха-ха! Тогда извини!
так ты пробовал изменить программу как я выше пытался? И после этого продолжает то же самое выдавать?
0
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 14:28  [ТС] 9
Kuzia domovenok, опять что-то не так делаю(
Миниатюры
Помогите исправить программу решения системы уравнений  
0
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 14:42  [ТС] 10
Kuzia domovenok, Проверяла первый алгоритм, вот так все нормально работает:
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
# include <stdio.h>
#include <iostream>
# include <math.h>
#include <conio.h>
#include <locale.h>
 
const int n = 3;
 
int F(int n, double x1[], double x2[]);
 
int main(){
    double A[n][n] = { { 6.0, -1.0, -1.0 }, { -1.0, 6.0, -1.0 }, { -1.0, -1.0, 6.0 } };
    double b[n] = { 11.0, 32.0, 42.0 };
    double x1[n] = { 4.0, 4.0, 4.0 };
    double x2[n] = { 0 };
 
    for (int i = 0; i < n; i++){
        double s = 0;
        for (int j = 0; j < n; j++)
            s = s + A[i][j] * x1[j];
        s = s - A[i][i] * x1[i];
        x2[i] = (1.0 / A[i][i]) * (b[i] - s);
    }
 
    int f = F(n, x1, x2);
 
 
    while ( f == 1){
        for (int i = 0; i < n; i++){
            double t = x2[i];
            double s = 0;
            for (int j = 0; j < n; j++)
                s = s + A[i][j] * x1[j];
            s = s - A[i][i] * x1[i];
            x2[i] = (1.0 / A[i][i]) * (b[i] - s);
            x1[i] = t;
        }
        f = F(n, x1, x2);
    }
 
    for (int i = 0; i < n; i++)
        std::cout << x2[i] << std::endl;
 
    _getch();
    return 0;
}
 
int F(int n, double x1[], double x2[]){
    double eps = 0.001;
    double max = fabs(x2[0] - x1[0]);
    for (int i = 1; i < n; i++){
        if (fabs(x2[i] - x1[i]) > max)
            max = fabs(x2[i] - x1[i]);
    }
    if (max > eps)
        return 1;
    else
        return 0;
 
}
Миниатюры
Помогите исправить программу решения системы уравнений  
0
09.06.2014, 14:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2014, 14:42
Помогаю со студенческими работами здесь

Написать программу для решения системы уравнений с пом. матрицы
Добрый день! Очень прошу вашей подсказки в написании моей первой программы для решения системы...

Написать программу для решения системы уравнений методом Гаусса (c++)
Добрый вечер! Нужно написать программу для решения системы уравнений методом Гаусса. Уравнений...

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru