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

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

Войти
Регистрация
Восстановить пароль
 
kiborgdelto
71 / 73 / 27
Регистрация: 23.03.2011
Сообщений: 141
#1

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

20.04.2014, 17:25. Просмотров 395. Ответов 4
Метки нет (Все метки)

Здравствуйте
есть такая проблема: необходимо решить систему линейных алгеброических уравнений, проблема состоит в том что число уравнений и переменных в этой системе от 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-х коэфицентов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 17:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решение системы уравнений с N>=10000 переменными (C++):

Решение системы уравнений - C++
a1x+b1y+c1=0 a2x+b2y+c2=0 Вывести решение системы (два числа – x и y) с шестью знаками после запятой. Если единственного решения не...

Решение Системы уравнений - C++
У меня задача - решать систему уравнений. матрица системы имеет порядок 3600. В будущем придется решать системы порядка 100 000. Мне дана...

Решение системы линейных уравнений - C++
Помогите решить на Си

Решение системы нелинейных уравнений - C++
Никак не могу разобраться с написанием программы на с++, которая бы решала систему нелинейных уравнений...

Найти решение системы уравнений - C++
Здравствуйте. Помогите, пожалуйста, составить программу. Найти решение системы линейных уравнений вида A1·x + B1·y = C1, A2·x + B2·y =...

Решение системы линейных уравнений. - C++
\begin{cases} &amp; \text{ } cos(ax+2)...... x&gt;2 \\ &amp; \text{ } tg |x-2a| .... .. x\leq 2 \end{cases} x а h по а = 0.2 ...

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

Решение системы алгебраических уравнений - C++
Доброго времени суток, форумчане :) Помогите пожалуйста решить задачу: Найти корни системы линейных алгебраических уравнений...

Решение системы линейных уравнений - C++
Компилятор wxDev-c++. Ошибка:C:\Program Files\Dev-Cpp\çàäà÷è\ãëàâà1\Ïåðâàÿ çàäà÷à\Makefile.win Error 1 #include &lt;cstdlib&gt; #include...

Решение системы линейных уравнений - C++
Не могу сделать прогу на С++. Кто сделает - огромное спасибо. Решить систему линейных уравнений 3x-5y+2z=2, 3x-7y+2z=0, x+5y-4z=-2

Решение системы тригонометрических уравнений - C++
Здравствуйте, форумчане! С наступающим новым годом) Возник вопрос: какими методами можно решить следующую систему уравнений, используя...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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