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

Решение системы уравнений с N>=10000 переменными - C++

Восстановить пароль Регистрация
 
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
20.04.2014, 17:25     Решение системы уравнений с N>=10000 переменными #1
Здравствуйте
есть такая проблема: необходимо решить систему линейных алгеброических уравнений, проблема состоит в том что число уравнений и переменных в этой системе от 10000, а т.к. решить нужно не менее 10 подобных систем (а вообще то желательно не менее 100), то для решения требуется довольно много времени
можно ли как то сократить время решения системы?
используется метод Гаусса-Жордана
вот код самого метода (матрица А это матрица коэфицентов с присоединёным к ней вектором правой части)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void gauss_jordan(double **A, int N, double *reshenie)
{
    
for(int q2=0;q2<N;q2++)
    {
int m=0;
double max=0,p;
    
    // делим строку на элемент стоящий на главной диагонали при условии что этот элемент не равен 1
    if(A[q2][q2]!=1)    for(int i=N;i>q2-1;i--)A[q2][i]=A[q2][i]/A[q2][q2];
 
// вычитаем строку с которой работаем из остальных строк( вычитаем с конца, для того чтобы не обнулять элементы под и над элементом стоящим на главной диагонали)
    for (int i=0;i<N;i++)
            if (i!=q2&&A[i][q2]!=0)for(int j=N;j>q2-1;j--)A[i][j]=A[i][j]-A[q2][j]*A[i][q2];
}
for (int i=0;i<N;i++) reshenie1[i][s1]=A[i][N];
}
матрица коэфицентов выглядит так (N=16)
[]http://pixs.ru/showimage/Bezimyanni_6833920_11776237.jpg[/]

большая часть матрицы нули, в каждой строке не больше 4-х коэфицентов
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 17:25     Решение системы уравнений с N>=10000 переменными
Посмотрите здесь:

C++ Решение системы линейных уравнений.
C++ Решение Системы уравнений
C++ Решение системы линейных уравнений
C++ Решение системы нелинейных уравнений
Найти решение системы уравнений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
20.04.2014, 18:19     Решение системы уравнений с N>=10000 переменными #2
Разреженные матрицы
AndrSlav
44 / 44 / 6
Регистрация: 20.12.2013
Сообщений: 241
21.04.2014, 00:12     Решение системы уравнений с N>=10000 переменными #3
Самый простой -метод Якоби http://ru.wikipedia.org/wiki/%D0%9C%...BE%D0%B1%D0%B8 .
А если матрица ленточная, то надо хранить только сами ленты со значениями.
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
21.04.2014, 03:20  [ТС]     Решение системы уравнений с N>=10000 переменными #4
метод якоби точно не подходит (во первых он приближённый а не точный, что не есть хорошо, а во вторых количество операций будет больше чем в методе гаусса-жордана и в третьих не учитывается разряженность матрицы)
матрица не ленточная, известно только что в каждой строке не более 4-х коэфицентов отличных от 0, какие конкретно коэфиценты заранее неизвестно (не факт что даже главная диагональ будет не нулевой), всё зависит от заданной области (решается задача дирихле в произвольной области)
AndrSlav
44 / 44 / 6
Регистрация: 20.12.2013
Сообщений: 241
21.04.2014, 23:32     Решение системы уравнений с N>=10000 переменными #5
kiborgdelto,
Насчет количества итераций- как Вы посчитали?
Я не правильно выразился насчет ленточной, не знаю как правильно называются, но такие как у Вас в примере я как раз решаю методом Гаусса-Зейделя, храню только элементы (учет разреженности, в частности, для Вашего примера достаточно хранить матрицу коэф-ов не N на N, а 5 на N).
Задачи аэрогидродинамики все считают итерационными методами, а там как раз матрицы похожие на Ваши.
p.s. Да и ошибка в процессе исключения Гаусса накопится.
Yandex
Объявления
21.04.2014, 23:32     Решение системы уравнений с N>=10000 переменными
Ответ Создать тему
Опции темы

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