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

Решение Системы уравнений - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
19.07.2011, 13:15     Решение Системы уравнений #1
У меня задача - решать систему уравнений. матрица системы имеет порядок 3600. В будущем придется решать системы порядка 100 000.
Мне дана матрица коэффициентов.
Дана она мне в необычном виде.
Исходная СЛУ
4x1 + 2x2 + 9x3 = 1
x2 + 6x3 = 7
4x1 + 2x3 = 0
коэффициенты исходной СЛУ
(1;4)(2;2)(3;9)
(2;1)(3;6)
(1;4)(3;2)
Каждая строка файла содержит информацию о ненулевых коэффициентах одного уравнения СЛУ.
Количество строк в файле соответствует количеству уравнений СЛУ.
Порядковый номер строки в файле соответствует номеру уравнения i.

Каждая строка файла состоит из групп чисел (j ; k(i;j))
• Первое число в группе – это значение номера j коэффициента k(i;j) при неизвестном x(j) в уравнении i
• Второе число в группе – это значение коэффициента k(i;j)

Количество таких групп в строке файла (т.е. количество ненулевых коэффициентов в уравнении) может быть любое – от 1 до n, где n – количество неизвестных в СЛУ.

Но это все го лишь пример. У меня же матрица 3638 порядка. Написал рабочий код(тестил его на матрицах 3 и 4 порядков). Запускаю его на выполнение (для матрицы 3638 порядка) - стопариться программа. Стопарится она, даже если порядок систему 300. Как исправить, чтобы программа полностью решала задачу(для порядка 3638 например, хотя надо и больше)
Я написал программу, но она стопариться на порядке 350. Что делать?
Как вообще научить программу работать с таким огромным массивом данных?

Прога прилагается
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexcoder
1438 / 652 / 86
Регистрация: 03.06.2009
Сообщений: 3,284
Завершенные тесты: 1
19.07.2011, 13:21     Решение Системы уравнений #2
Сложность алгоритма перемножения матриц порядка n^3
http://ru.wikipedia.org/wiki/%D0%A3%...80.D0.B8.D1.86
Если верить википедии, можно добиться сложности n^2
-=ЮрА=-
Заблокирован
Автор FAQ
19.07.2011, 15:05     Решение Системы уравнений #3
СЛАУ решаются методом Гаусса, он намного менее ресурсозатратен чем матричный способ, особенно для матриц большого порядка, это ещё в универе проходят!!!
Вот проверенные на 100% работоспосбные функции прямого и обратного хода метода Гаусса
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
void PryamoiHod(int n, double **a, double *b)
{
    double v;
    for(int k = 0,i,j,im; k < n - 1; k++)
    {
        im = k;
        for(i = k + 1; i < n; i++)
        {
            if(fabs(a[im][k]) < fabs(a[i][k]))
            {
                im = i;
            }
        }
        if(im != k)
        {
            for(j = 0; j < n; j++)
            {
                v        = a[im][j];
                a[im][j] = a[k][j];
                a[k][j]  = v;
            }
            v     = b[im];
            b[im] = b[k];
            b[k]  = v;
        }
        for(i = k + 1; i < n; i++)
        {
            v       = a[i][k]/a[k][k];
            a[i][k] = 0;
            b[i]    = b[i] - v*b[k];
            for(j = k + 1; j < n; j++)
            {
                a[i][j] = a[i][j] - v*a[k][j];
            }
        }
    }
}
 
void ObratniHod(int n, double **a, double *b, double *x)
{
    double s = 0;
    x[n - 1] = b[n - 1]/a[n - 1][n - 1];
    for(int i = n - 2, j; 0 <= i; i--)
    {
        s = 0;
        for(j = i + 1; j < n; j++)
        {
            s = s+a[i][j]*x[j];
        }
        x[i] = (b[i] - s)/a[i][i];
    }
}
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.07.2011, 15:35     Решение Системы уравнений #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
СЛАУ решаются методом Гаусса,
угу, особенно с разежнной матрицей
Цитата Сообщение от hello19 Посмотреть сообщение
порядка 100 000.
Yandex
Объявления
19.07.2011, 15:35     Решение Системы уравнений
Ответ Создать тему
Опции темы

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