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

Решить систему алгебраических линейных неоднородных уравнени - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 70, средняя оценка - 4.66
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
22.07.2011, 15:58     Решить систему алгебраических линейных неоднородных уравнени #1
У меня есть система линейных уравнений. В ней 4000 уравнений.
Киньте плиз код для её решения. Желательно, чтобы он был максимально быстрым.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
05.08.2011, 16:41     Решить систему алгебраических линейных неоднородных уравнени #101
Я за вводить писал всмысле из матрицы вводить. Ведь ввод А занимает кучу времениО_о
Ок, я работать, вечером привееду результаты в 2008
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
05.08.2011, 16:43  [ТС]     Решить систему алгебраических линейных неоднородных уравнени #102
Теперь тот же косяк и с матрицей коэффициентов))
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.08.2011, 16:57     Решить систему алгебраических линейных неоднородных уравнени #103
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Введением EPS мы можем что то выграть, но не факт
А как еще сравнивать double с нулем?
А если не сравнивать, то работать будет только с матрицами без нулевых элементов.
Чтобы работало с любыми матрицами, находят опорный элемент. У вас я этого не увидел.
Хотя, возможно, плохо смотрел.
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
05.08.2011, 17:20  [ТС]     Решить систему алгебраических линейных неоднородных уравнени #104
Кстати, может кто знает какой нить матпакет, который сможет решить эту систему? что то типа mathlab?
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
05.08.2011, 17:32     Решить систему алгебраических линейных неоднородных уравнени #105
hello19, ну а чем, собственно, matlab не подходит? Или scilab? Разумеется, надо использовать инструментарий для Sparse Matrix.
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
05.08.2011, 17:35  [ТС]     Решить систему алгебраических линейных неоднородных уравнени #106
scilab уже юзаю... хотелось бы чтобы пошустрее решало что-то...
Что касается матлаба, то никак не могу найти бесплатную версию... везде платить)
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
05.08.2011, 20:37     Решить систему алгебраических линейных неоднородных уравнени #107
Цитата Сообщение от hello19 Посмотреть сообщение
scilab уже юзаю... хотелось бы чтобы пошустрее решало что-то...
hello19, sсilab матрицу из #30 решает меньше секунды. Надо ещё шустрее?
-=ЮрА=-
Заблокирован
Автор FAQ
05.08.2011, 22:20     Решить систему алгебраических линейных неоднородных уравнени #108
http://www.cyberforum.ru/cpp/thread3119.html - копался по форуму. А вобще всерьёз подумываю об испытании матричного метода решения СЛАУ
Вот что удалось откопать
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <time.h>
using namespace std;
const int n = 4;
void vivod(int**, int);
void del(int**, int**, int, int, int);
long Determinant(int**, int);
void main()
{
    time_t t;
    srand(time(&t));
    int** a = new int*[n];
    for(int i = 0; i < n; i++)
        a[i] = new int[n];
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j ++)
            a[i][j] = rand() % 10;
    vivod(a, n);
    long dt = Determinant(a, n);
    cout << "Determinant=" << dt <<endl;
    for(int i = 0; i < n; i++)
        delete[] a[i];
    delete[] a;
}
void vivod(int** a, int n)
{
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
            cout << a[i][j] <<'\t';
        cout << endl;
    }
}
void del(int** a, int** b, int m, int i, int j)
{
    int di = 0;
    int dj;
    for(int ki = 0; ki < m - 1; ki++)
    {
        if(ki == i) 
            di = 1;
        dj = 0;
        for(int kj = 0; kj < m - 1; kj++)
        {
            if(kj == j)
                dj = 1;
            b[ki][kj] = a[ki + di][kj + dj];
        }
    }
}
long Determinant(int** a, int n)
{
    int** b = new int*[n];
    for(int i = 0; i < n; i++)
        b[i] = new int[n];
    if(n < 1)
    {
        cout << "determinanta net" <<endl;
        return 0;
    }
    else
        if(n == 1)
            return a[0][0];
        else
            if(n == 2)
                return a[0][0] * a[1][1] - a[0][1] * a[1][0];
            else
            {
                int d = 0;
                int k = 1;
                
                for(int i  = 0; i < n; i++)
                {
                    del(a, b, n, i, 0);
                    d += k * a[i][0] * Determinant(b, n - 1);
                    k--;
                }
                return d;
            }
    for(int i = 0; i < n; i++)
        delete[] b[i];
    delete[] b;
    
    return 0;
}
Добавлено через 4 минуты
Сейчас сдесь смотрю http://alglib.sources.ru/matrixops/general/det.php

Добавлено через 37 секунд
Сейчас сдесь смотрю http://alglib.sources.ru/matrixops/general/det.php
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
06.08.2011, 20:44  [ТС]     Решить систему алгебраических линейных неоднородных уравнени #109
ммм.... интересность
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 10:30  [ТС]     Решить систему алгебраических линейных неоднородных уравнени #110
Я на самом деле тоже уже на alglib скачивал.. что-то у меня с ним не срослось)
Кстати, интересную особенность заметил. Помнишь ту мою проблему со считыванием файла?
Так вот, как только появляется косяк со считыванием из файла с расширением txt нужно просто его содержимое копирнуть в другой файл с расширением txt. Вообще понятия не имею почему и как это, но... работает.
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2011, 14:50     Решить систему алгебраических линейных неоднородных уравнени #111
Цитата Сообщение от hello19 Посмотреть сообщение
Так вот, как только появляется косяк со считыванием из файла с расширением txt нужно просто его содержимое копирнуть в другой файл с расширением txt. Вообще понятия не имею почему и как это, но... работает.
возможно связано с кодировкой, ума не приложу. А косяки с файлами которые из форума сохраняешь или с твоими собстенными. Если с тему что сюда выкладывал - возможно редактор загрузки изменил в них кодировку
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 14:52  [ТС]     Решить систему алгебраических линейных неоднородных уравнени #112
с моими...
можно как нить вообще избавиться от этого? я имею ввиду от того, чтобы по 10 раз пересохранять содержимое файла?
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2011, 16:19     Решить систему алгебраических линейных неоднородных уравнени #113
Система решена!После реализации алгоритма вычёркивания строк и столбцов, метод Гаусса начал обрабатывать систему где-то за 2 секунды, решение занимает около 10 секунд. Сжатие матрицы сделал посредством обычных присваиваний, как оказалось работа memcpy приводила к потере строк, в результате скорость алгоритма немножко пострадала, зато считает правильно и довольно быстро!
В архивах - сам cpp-шник и Матрицы А В а также результат расчёта сохранённый в Х.txt
Вложения
Тип файла: rar SLAU8.cpp.rar (1.6 Кб, 18 просмотров)
Тип файла: rar ABX.rar (28.8 Кб, 13 просмотров)
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 16:21  [ТС]     Решить систему алгебраических линейных неоднородных уравнени #114
Сейчас посмотрим что там и как
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2011, 16:25     Решить систему алгебраических линейных неоднородных уравнени #115
Давай давай, напишешь как оттестируешь!
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 16:26  [ТС]     Решить систему алгебраических линейных неоднородных уравнени #116
Интересно интересно... просто я решил туже систему на матпакете scilib и результаты вообще не такие))))))
кстати, почему матрица А с таким непонятным расширением?
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2011, 16:32     Решить систему алгебраических линейных неоднородных уравнени #117
Цитата Сообщение от hello19 Посмотреть сообщение
кстати, почему матрица А с таким непонятным расширением?
Я её через свой конвертер переганял из 25 Мб-ной, кстати по запаре не тот файл с А бросил, вот он inpA, просто переименовал СЛУ1 - Коэффициенты. В программе юзаю именно её смотри код в срр-шнике
C++
1
2
3
4
5
6
if(bContinue)
    if(!(f = fopen(/*"A.txt.tmp"*/"inpA.txt","rb+")))
    {
        printf("ERROR OPEN A.TXT : %s\r\n",strerror(GetLastError()));
        bContinue = false;
    }
А результаты легко проверить подстановкой, не забывай что если в scilib вводил А с ноликами на главной диагонали, без вычёркиваний, решение не точным выйдет...Если элемент ноль - его нужно вычёркивать - этим и могу объяснить различие результатов. Можешь ввести проверку и перемножить А на Х
Вложения
Тип файла: rar inpA.rar (19.4 Кб, 10 просмотров)
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 16:36  [ТС]     Решить систему алгебраических линейных неоднородных уравнени #118
Наличие этих нулевых строчек по идее ни как не сказывается на результате.
В матпакете я решил систему порядка 3638 и 3635(без плохих строчек)
и результаты совпали (хотя есть отличия, но они где-то в 8 знаке после запятой)
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2011, 16:40     Решить систему алгебраических линейных неоднородных уравнени #119
Сейчас доделываю код проверки inpA*X - B если будут величины гораздо меньше нуля - посчиталось правильно, ещё напишу...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2011, 16:41     Решить систему алгебраических линейных неоднородных уравнени
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 16:41  [ТС]     Решить систему алгебраических линейных неоднородных уравнени #120
я сейчас вручную прорешал 3 уравнения и... кароч ваще не сходится ни с одним результатом))))
Yandex
Объявления
08.08.2011, 16:41     Решить систему алгебраических линейных неоднородных уравнени
Ответ Создать тему
Опции темы

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