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

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

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

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

20.04.2014, 17:25. Просмотров 374. Ответов 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-х коэфицентов
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 17:25     Решение системы уравнений с N>=10000 переменными
Посмотрите здесь:

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

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

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

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

Решение системы линейных уравнений. - 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 ...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
20.04.2014, 18:19     Решение системы уравнений с N>=10000 переменными #2
Разреженные матрицы
AndrSlav
44 / 44 / 6
Регистрация: 20.12.2013
Сообщений: 259
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, какие конкретно коэфиценты заранее неизвестно (не факт что даже главная диагональ будет не нулевой), всё зависит от заданной области (решается задача дирихле в произвольной области)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2014, 23:32     Решение системы уравнений с N>=10000 переменными
Еще ссылки по теме:

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

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

Решение системы нелинейных уравнений - C++
найти решения уравнения графическим методом и методом поиска решений {cos(y+0,5)+x=0,8; { sinx-2y=1,6. P.S. только там скобка...

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

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

Решение системы из четырех нелинейных уравнений c++ - C++
Нужно решить системы из четырех нелинейных уравнений. Метод не важен, главное результат. Известно только k1 и k2. Вот сама система: ...


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

Или воспользуйтесь поиском по форуму:
AndrSlav
44 / 44 / 6
Регистрация: 20.12.2013
Сообщений: 259
21.04.2014, 23:32     Решение системы уравнений с N>=10000 переменными #5
kiborgdelto,
Насчет количества итераций- как Вы посчитали?
Я не правильно выразился насчет ленточной, не знаю как правильно называются, но такие как у Вас в примере я как раз решаю методом Гаусса-Зейделя, храню только элементы (учет разреженности, в частности, для Вашего примера достаточно хранить матрицу коэф-ов не N на N, а 5 на N).
Задачи аэрогидродинамики все считают итерационными методами, а там как раз матрицы похожие на Ваши.
p.s. Да и ошибка в процессе исключения Гаусса накопится.
Yandex
Объявления
21.04.2014, 23:32     Решение системы уравнений с N>=10000 переменными
Ответ Создать тему
Опции темы

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