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

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

Восстановить пароль Регистрация
 
A7X
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 01:02     Помогите исправить программу решения системы уравнений #1
Выводит неопределенность

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]);
}
Миниатюры
Помогите исправить программу решения системы уравнений  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
09.06.2014, 09:46     Помогите исправить программу решения системы уравнений #2
A7X, спасибо, что делитесь своими наработками.
A7X
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 13:34  [ТС]     Помогите исправить программу решения системы уравнений #3
SatanaXIII, признаю, что "выводит неопределенность" слишком короткая и непонятная формулировка моей проблемы, но так и есть)
Выводит неопределенность, как результат работы при данных значениях для проверки, вместо нормального результата
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 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;
A7X
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 14:07  [ТС]     Помогите исправить программу решения системы уравнений #5
Kuzia domovenok, Должны быть числа: 4,6 7,6 9, если не ошибаюсь

Извиняюсь, не сразу увидела ваше новое сообщение
Миниатюры
Помогите исправить программу решения системы уравнений  
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.06.2014, 14:13     Помогите исправить программу решения системы уравнений #6
Цитата Сообщение от A7X Посмотреть сообщение
4,6 7,6 9
это какого фига у уравнения третьего порядка должен быть корень пятого порядка? Ты в каком классе учишься? В старших это уже должны объяснять!
Хотя бы в уме реши свою систему уравнений сначала!
A7X
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 14:20  [ТС]     Помогите исправить программу решения системы уравнений #7
Kuzia domovenok, Извините, мы с вами друг друга недопоняли: 4,6 ; 7,6; 9 - три числа !)
Спасибо за помощь
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.06.2014, 14:21     Помогите исправить программу решения системы уравнений #8
а-ха-ха! Тогда извини!
так ты пробовал изменить программу как я выше пытался? И после этого продолжает то же самое выдавать?
A7X
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 14:28  [ТС]     Помогите исправить программу решения системы уравнений #9
Kuzia domovenok, опять что-то не так делаю(
Миниатюры
Помогите исправить программу решения системы уравнений  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2014, 14:42     Помогите исправить программу решения системы уравнений
Еще ссылки по теме:

C++ Помогите найти программу решения систем алгебраических уравнений методом Зейделя
Написать программу для решения системы двух уравнений C++
C++ Написать программу для решения системы уравнений методом Гаусса (c++)

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

Или воспользуйтесь поиском по форуму:
A7X
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;
 
}
Миниатюры
Помогите исправить программу решения системы уравнений  
Yandex
Объявления
09.06.2014, 14:42     Помогите исправить программу решения системы уравнений
Ответ Создать тему
Опции темы

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