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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
A7X
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
#1

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

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

Выводит неопределенность

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
Миниатюры
Помогите исправить программу решения системы уравнений  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 01:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите исправить программу решения системы уравнений (C++):

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

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

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

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

Написать программу для решения системы уравнений методом Гаусса (c++) - C++
Добрый вечер! Нужно написать программу для решения системы уравнений методом Гаусса. Уравнений всего два: a11*x1 + a12*x2 = z1...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
09.06.2014, 09:46 #2
A7X, спасибо, что делитесь своими наработками.
0
A7X
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 13:34  [ТС] #3
SatanaXIII, признаю, что "выводит неопределенность" слишком короткая и непонятная формулировка моей проблемы, но так и есть)
Выводит неопределенность, как результат работы при данных значениях для проверки, вместо нормального результата
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 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
A7X
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 15
09.06.2014, 14:07  [ТС] #5
Kuzia domovenok, Должны быть числа: 4,6 7,6 9, если не ошибаюсь

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

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

Пример кода для решения системы уравнений - C++
Здравствуйте. Нужен код на С или С++, решающий системы уравнений. Подскажите, плз, где его можно достать. Заранее, спасибо.

Метод Ньютона для решения системы нелинейных уравнений - C++
Здравствуйте! Нужно решить методом Ньютона систему уравнений с точностью 0.0001: sin(x+y) - 1.2x = 0 x*x + y*y =1 Вот моя программа,...

Метод хорд для решения системы нелинейных уравнений - C++
Здравствуйте, задал вопрос по чисмету вот тут http://www.cyberforum.ru/numerical-methods/thread1529078.html#post8064137 Не знаю,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.06.2014, 14:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru