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

Помогите найти программу решения систем алгебраических уравнений методом Зейделя - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 233
19.08.2014, 12:11     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #1
Ребята, помогите найти программу решения систем алгебраических уравнений методом Зейделя. Код нужен на С++ или на С#. Переделывать с паскаля, с джавы или еще с чего-то нет не времени не сил. Нашел десяток разных реализаций и чуть ли не каждая выдавала свой уникальный ответ на разные входные данные. При этом в интернет онлайн-калькуляторе выдавался еще один уникальный ответ. Я иссяк уже
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2014, 12:11     Помогите найти программу решения систем алгебраических уравнений методом Зейделя
Посмотрите здесь:

C++ Численные методы решения линейных алгебраических уравнений
C++ Методом Гаусса решить систему n линейных алгебраических уравнений
C++ Помогите написать программу для решения слау методом Гаусса
Помогите исправить программу решения системы уравнений C++
Решение систем алгебраических уравнений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avg93
61 / 61 / 10
Регистрация: 11.12.2009
Сообщений: 247
Завершенные тесты: 3
19.08.2014, 12:55     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #2
На википедии где описывается метод есть примеры реализации, там pascal, python и c++
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 233
19.08.2014, 15:35  [ТС]     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #3
Находил. Выходные данные нелепые какие-то.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
19.08.2014, 15:50     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #4
Цитата Сообщение от Praud Посмотреть сообщение
каждая выдавала свой уникальный ответ на разные входные данные. При этом в интернет онлайн-калькуляторе выдавался еще один уникальный ответ
Ну вы сразу тогда приводите пример входных-выходных значений, которые вас устроят.
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 233
19.08.2014, 15:55  [ТС]     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #5
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
const int eps = 0.01;
const int n = 3;
 
   // Условие окончания
bool converge(double *xk, double *xkp)
{
    double norm = 0;
    for (int i = 0; i < n; i++) 
    {
      norm += (xk[i] - xkp[i])*(xk[i] - xkp[i]);
    }
    if(sqrt(norm) >= eps)
      return false;
    return true;
}
 
int main()
{
 
    double a[n][n] = {
                        {4.2 , 2.3 , 1.3}, 
                        {-1.3 , 7.2, 5.4},
                        {2.3 , 5.1, 11.2}
                    };
    double b[n] = {6.1 , 8.6 , 8.2 }; 
    double x[n] = {0}, p[n];
 
    do
    {
        for (int i = 0; i < n; i++)
            p[i] = x[i];
 
        for (int i = 0; i < n; i++)
        {
            double var = 0;
            
            for (int j = 0; j < i; j++)
                var += (a[i][j] * x[j]);
            for (int j = i; j < n; j++)
                var += (a[i][j] * p[j]);
            x[i] = (b[i] - var) / a[i][i];
        }
    } while (!converge(x, p));
 
    for(int i=0;i<n;i++)
        cout<<x[i]<<" ";
   _getch();
    return 0;
}
http://shpora.gixx.ru/shpory/%D0%9C%...0%BB%D1%8F.htm

Брал входные данные из этого источника.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
19.08.2014, 16:04     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #6
Praud, напишите пожалуйста четко:
Вот такие конкретно данные входные.
Вот такие данные выходные.
Иначе к вам как к привереде отнесутся и вообще никто не возьмется.
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 233
19.08.2014, 16:15  [ТС]     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #7
Входные данные:

матрица:

4.2 , 2.3 , 1.3
-1.3 , 7.2, 5.4
2.3 , 5.1, 11.2

Свободные коэффициенты:

6.1 , 8.6 , 8.2

Выходные данные:

-1. #IND -1. #IND -1. #IND

По примеру из этой ссылки http://shpora.gixx.ru/shpory/%D0%9C%...0%BB%D1%8F.htm
должны быть:

(0,752; 1,289; -0,005)
BlackIce
309 / 171 / 64
Регистрация: 18.01.2014
Сообщений: 387
19.08.2014, 16:54     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #8
Че-то считает. Проверку точности заменил на упрощенную:
Кликните здесь для просмотра всего текста
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 <conio.h>
#include <iostream>
using namespace std;
 
const int eps = 0.1;
const int n = 3;
 
   // Условие окончания
bool converge(double *xk, double *xkp)
{
    for (int i = 0; i < n; i++) 
    {
        if (abs(xk[i] - xkp[i]) > eps) return false;
    }
    return true;
}
 
int main()
{
 
    double a[n][n] = {
                        {4.2 , 2.3 , 1.3}, 
                        {-1.3 , 7.2, 5.4},
                        {2.3 , 5.1, 11.2}
                    };
    double b[n] = {6.1 , 8.6 , 8.2 }; 
    double x[n] = {0}, p[n];
 
    do
    {
        for (int i = 0; i < n; i++)
            p[i] = x[i];
 
        for (int i = 0; i < n; i++)
        {
            double var = b[i];
            
            for (int j = 0; j < i; j++)
                var -= (a[i][j] * x[j]);
            for (int j = i + 1; j < n; j++)
                var -= (a[i][j] * p[j]);
            x[i] = var / a[i][i];
        }
    } while (!converge(x, p));
 
    for(int i=0;i<n;i++) cout<<x[i]<<" ";
 
    cout << endl << endl;
    for (int i = 0; i < n; ++i) {
        double v = 0;
        for (int j = 0; j < n; ++j) {
            v += a[i][j] * x[j];
            cout << a[i][j] << '*' << x[j] << " + ";
        }
        cout << "\b\b= " << v << endl;
    }    
 
    _getch();
    return 0;
}

Почему-то результат: (0.723674 1.34773 -0.0301694)
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 233
19.08.2014, 17:07  [ТС]     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #9
Спасибо, уже что-то считает. Но как верить этим данным если везде считает разный результат или это такой неточный метод? И еще... есть ли какие-то входные данные, при которых корней не будет? Что это за проверка?
BlackIce
309 / 171 / 64
Регистрация: 18.01.2014
Сообщений: 387
19.08.2014, 17:19     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #10
Цитата Сообщение от Praud Посмотреть сообщение
Но как верить этим данным если везде считает разный результат
По крайней мере, если подставить в программу данные примера из http://shpora.gixx.ru/shpory/%D0%9C%...0%BB%D1%8F.htm, то решение программы с высокой точностью соответствует решению из примера.

Цитата Сообщение от Praud Посмотреть сообщение
или это такой неточный метод?
Да, это приближенный метод. Проверьте результат из вашего примера в Excel'e, а потом, то, что выдала исправленная программа.

Цитата Сообщение от Praud Посмотреть сообщение
И еще... есть ли какие-то входные данные, при которых корней не будет? Что это за проверка?
Одна бабка сказала: "Необходимым и достаточным условием существования единственного решения системы линейных алгебраических уравнений является условие не равенства нулю определителя матрицы."
_Ivana
2191 / 1396 / 124
Регистрация: 01.03.2013
Сообщений: 4,155
Записей в блоге: 2
19.08.2014, 17:23     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #11
Цитата Сообщение от BlackIce Посмотреть сообщение
Почему-то результат: (0.723674 1.34773 -0.0301694)
Матлаб дает ответ
0.723673836039337
1.347734841739008
-0.030169421049948
ЗЫ а про достаточное условие сходимости метода и необходимое условие существования и единственности решения СЛАУ есть в любом букваре. (пока набирал, это уже отметили)
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 233
19.08.2014, 17:27  [ТС]     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #12
Спасибо) буду дописывать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2014, 19:05     Помогите найти программу решения систем алгебраических уравнений методом Зейделя
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 233
20.08.2014, 19:05  [ТС]     Помогите найти программу решения систем алгебраических уравнений методом Зейделя #13
Условие существование и единственности написал, а вот условие сходимости не могу(
Помогите эту проверку написать.
Yandex
Объявления
20.08.2014, 19:05     Помогите найти программу решения систем алгебраических уравнений методом Зейделя
Ответ Создать тему
Опции темы

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