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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Английские и русские буквы. http://www.cyberforum.ru/cpp-beginners/thread335375.html
Здравствуйте! Подскажите пожалуйста, как в С отличить русские буквы от английских? Я думаю что надо оперировать с кодами букв, но как именно-не соображу. Добавлено через 18 минут /* * File: main.cpp * Author: alchemist * Больше свинок для науки!
C++ Что делается этимим строчками void main() { srand((unsigned)time(NULL)); setlocale(0, ""); ..... } http://www.cyberforum.ru/cpp-beginners/thread335373.html
C++ Почему то не могу считать матрицу
Есть матрица порядка 3638. Мне нужно найти обратную к ней. ( В последствии порядок матрицы будет около 100 000) Есть код, вот только он не совсем рабочий. На маленьких матрицах порядка 3-4 он работает отлично, а вот на матрице порядка 3638 - не работает. В качестве результата выдает исходную матрицу. Помогите найти косяк. И по возможности сделать код "по-шустрее" Вот код на С++ #include...
наследование классов C++
Здарова, народ! :D Вот сижу и пытаюсь сделать задание из книги по которой "учимся программировать в универе", а там такой поворот событий :wall:, что я не понял как сделать. Помогите как накатать ето задание в коде. Теперь само задание: 1) добавьте в базовый и производный классы еще один конструктор с параметрами - толщиной оболочки thickness и наполнителем filter, обеспечив тем самым...
C++ Дорогие, помогите с линковкой libeay32.lib http://www.cyberforum.ru/cpp-beginners/thread335326.html
Здравствуйте, Уважаемые гуру! Собираю ntp-сервер, написанный на "с". Называется ntp 4.2.6p3 http://support.ntp.org/bin/view/Main/SoftwareDownloads Собираю его в Visual Studio 2003, в последствии буду интегрировать в свой проект. Проблема в следующем. В ntp используется openSSL и соответственно требуются либы. При линковке кричал, что не может найти libeay32.lib. Скачал openSSL, собрал его так:...
C++ Нужен алгоритм Как на с++ сделать так что б в игре противники двигались паралельно главному персонажу (которым непосредственно мы и управляем)... Заранее спасибо за идеи... PS Пробовал все реализовать так while(кол-во звезд на карте не ноль) { getch() while (!kbhit()) подробнее

Показать сообщение отдельно
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.08.2011, 15:11     Решить систему алгебраических линейных неоднородных уравнени
Тоже заинтересовался этой темой..
Моя реализация алгоритма Гаусса-Жордана:
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
#include <iostream>
#include <vector>
#include <limits>
#include <algorithm>
using namespace std;
const int INF = 123456789;
const double EPS = numeric_limits<double>::epsilon();
int gauss (vector < vector<double> > a, vector<double> & ans) {
    int n = (int) a.size();
    int m = (int) a[0].size() - 1;
    vector<int> where (m, -1);
    for (int col=0, row=0; col<m && row<n; ++col) {
        int sel = row;
        for (int i=row; i<n; ++i)
            if (abs (a[i][col]) > abs (a[sel][col]))
                sel = i;
        if (abs (a[sel][col]) < EPS)
            continue;
        for (int i=col; i<= m; ++i)
            swap (a[sel][i], a[row][i]);
        where[col] = row;
 
        for (int i=0; i<n; ++i)
            if (i != row) {
                double c = a[i][col] / a[row][col];
                for (int j=col; j<= m; ++j)
                    a[i][j] -= a[row][j] * c;
            }
        ++row;
    }
 
    ans.assign (m, 0);
    for (int i=0; i<m; ++i)
        if (where[i] != -1)
            ans[i] = a[where[i]][m] / a[where[i]][i];
    for (int i=0; i<n; ++i) {
        double sum = 0;
        for (int j=0; j<m; ++j)
            sum += ans[j] * a[i][j];
        if (abs (sum - a[i][m]) > EPS)
            return 0;
    }
 
    for (int i=0; i<m; ++i)
        if (where[i] == -1)
            return INF;
    return 1;
}
int main(){
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    int n;
    std::cin >> n;
    std::vector < std::vector<double> > vec(n);
    for (int i = 0; i < n; ++i)
    {
        vec[i].resize(n + 1);
        for (int j = 0; j <= n; ++j)
            cin >> vec[i][j];
    }
    vector<double> res(n);
    gauss(vec, res);
    for (vector<double>::iterator it = res.begin(); it != res.end(); ++it)
        std::cout << static_cast<int> (*it + (*it < 0 ? -0.5 : 0.5)) << ' ';
    return 0;
}
Заточена под эту задачу, проходит все тесты.
Алгоритм взят отсюда и немного исправлен.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru