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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 70, средняя оценка - 4.66
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
#1

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

22.07.2011, 15:58. Просмотров 9125. Ответов 152
Метки нет (Все метки)

У меня есть система линейных уравнений. В ней 4000 уравнений.
Киньте плиз код для её решения. Желательно, чтобы он был максимально быстрым.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2011, 15:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решить систему алгебраических линейных неоднородных уравнени (C++):

Решить систему линейных алгебраических уравнений - C++
Решить CЛАУ 2A^tX=Y^2,где |2 1 5 6| |3| A= |5 2 2 6| Y= |1| |2 2 1 2| |2| |1 3 3 1|...

Методом Гаусса решить систему n линейных алгебраических уравнений - C++
Помогите пожалуйста написать на с++ методом Гаусса решить систему n линейных алгебраических уравнений. Отсюда нашла именно ту тему там...

Решить систему алгебраических уравнений методом Гаусса - C++
Решить систему алгебраических уравнений методом Гаусса: 6X1-X2-X3=11,33, -X1+6X2-X3=32, -X1-X2+6X3=42;

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

Решить систему линейных уравнений вида Ax=b методом Зейделя - C++
2)Решить систему линейных уравнений вида Ax=b методом Зейделя 6.9 0,0319 0,039 0,461 0,0191 6,0 0,0333 0,405 0,0134 0,0205 5,1...

Система линейных алгебраических уравнений - C++
Решить систему линейных алгебраических уравнений. Метод решения выбрать самостоятельно. Коэффициенты и свободные члены линейного уравнения...

152
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
05.08.2011, 17:35  [ТС] #106
scilab уже юзаю... хотелось бы чтобы пошустрее решало что-то...
Что касается матлаба, то никак не могу найти бесплатную версию... везде платить)
0
grizlik78
Эксперт С++
1971 / 1464 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
05.08.2011, 20:37 #107
Цитата Сообщение от hello19 Посмотреть сообщение
scilab уже юзаю... хотелось бы чтобы пошустрее решало что-то...
hello19, sсilab матрицу из #30 решает меньше секунды. Надо ещё шустрее?
0
-=ЮрА=-
Заблокирован
Автор 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
2
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
06.08.2011, 20:44  [ТС] #109
ммм.... интересность
0
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 10:30  [ТС] #110
Я на самом деле тоже уже на alglib скачивал.. что-то у меня с ним не срослось)
Кстати, интересную особенность заметил. Помнишь ту мою проблему со считыванием файла?
Так вот, как только появляется косяк со считыванием из файла с расширением txt нужно просто его содержимое копирнуть в другой файл с расширением txt. Вообще понятия не имею почему и как это, но... работает.
0
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2011, 14:50 #111
Цитата Сообщение от hello19 Посмотреть сообщение
Так вот, как только появляется косяк со считыванием из файла с расширением txt нужно просто его содержимое копирнуть в другой файл с расширением txt. Вообще понятия не имею почему и как это, но... работает.
возможно связано с кодировкой, ума не приложу. А косяки с файлами которые из форума сохраняешь или с твоими собстенными. Если с тему что сюда выкладывал - возможно редактор загрузки изменил в них кодировку
1
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 14:52  [ТС] #112
с моими...
можно как нить вообще избавиться от этого? я имею ввиду от того, чтобы по 10 раз пересохранять содержимое файла?
0
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2011, 16:19 #113
Система решена!После реализации алгоритма вычёркивания строк и столбцов, метод Гаусса начал обрабатывать систему где-то за 2 секунды, решение занимает около 10 секунд. Сжатие матрицы сделал посредством обычных присваиваний, как оказалось работа memcpy приводила к потере строк, в результате скорость алгоритма немножко пострадала, зато считает правильно и довольно быстро!
В архивах - сам cpp-шник и Матрицы А В а также результат расчёта сохранённый в Х.txt
1
Вложения
Тип файла: 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
Сейчас посмотрим что там и как
0
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2011, 16:25 #115
Давай давай, напишешь как оттестируешь!
1
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 16:26  [ТС] #116
Интересно интересно... просто я решил туже систему на матпакете scilib и результаты вообще не такие))))))
кстати, почему матрица А с таким непонятным расширением?
0
-=ЮрА=-
Заблокирован
Автор 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 вводил А с ноликами на главной диагонали, без вычёркиваний, решение не точным выйдет...Если элемент ноль - его нужно вычёркивать - этим и могу объяснить различие результатов. Можешь ввести проверку и перемножить А на Х
1
Вложения
Тип файла: rar inpA.rar (19.4 Кб, 10 просмотров)
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 16:36  [ТС] #118
Наличие этих нулевых строчек по идее ни как не сказывается на результате.
В матпакете я решил систему порядка 3638 и 3635(без плохих строчек)
и результаты совпали (хотя есть отличия, но они где-то в 8 знаке после запятой)
0
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2011, 16:40 #119
Сейчас доделываю код проверки inpA*X - B если будут величины гораздо меньше нуля - посчиталось правильно, ещё напишу...
1
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
08.08.2011, 16:41  [ТС] #120
я сейчас вручную прорешал 3 уравнения и... кароч ваще не сходится ни с одним результатом))))
0
08.08.2011, 16:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2011, 16:41
Привет! Вот еще темы с ответами:

Система линейных алгебраических уравнений - C++
Помогите пожалуйта с програмой вопрос жизни и смерти!!! Мне нужно написать програму до завтра! Програма должна выводить решения всеми...

Система линейных алгебраических уравнений - C++
помогите исправить ошибки! #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;iomanip&gt; using namespace std; ...

Решение системы линейных алгебраических уравнений - C++
Добрый вечер!!! Помогите, пожалуйста, написать программу для решения системы уравнений итерационным методом(метод А-минимальных...

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


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

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

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