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

Жорданова форма - C++

Восстановить пароль Регистрация
 
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
12.05.2012, 16:08     Жорданова форма #1
Пишу программу для вычисления жордановой формы матрицы. Вопрос: как нерекурсивно вычислить определитель матрицы?
Для операций с многочленами у меня есть следующий класс:
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
template<typename T>
class Polynomial
{
    vector<T> inf; 
 
public:
    Polynomial(): inf(1, 0)
    {
    }
    Polynomial(const T& null_, const T& first_): inf(2, null_)
    {
        inf.back()=first_;
    }
 
    size_t Degree() const
    {
        return inf.size()-1;
    }
    T& operator[](const size_t index_)
    {
#ifdef DEBUG
        if(index_>=inf.size())
            throw bad_index();
#endif
        return inf[index_];
    }
    T operator()(const size_t index_) const
    {
#ifdef DEBUG
        if(index_>=inf.size())
            throw bad_index();
#endif
        return inf[index_];
    }
    void Add(const T& num_, const size_t index_)
    {
        if(index_>=inf.size()-1)
        {
            inf.resize(index_+1);
            inf.back()=num_;
            return;
        }
        inf[index_]+=num_;
    }
    void Add(const Polynomial& p_)
    {
        if(p_.Degree()>=inf.size())
        {
            inf.resize(inf.size());
            for(size_t i(0); i<inf.size(); i++)
                inf[i]+=p_[i];
            while(!inf.back())
                inf.pop_back();
            return;
        } 
        for(size_t i(0); i<p_Degree(); i++)
            inf[i]+=p_[i];
        while(!inf.back() && inf.size())
            inf.pop_back();
    }
    void Mul(const Polynomial& p_)
    {
        vector<T> temp(inf);
        inf.clear();
        inf.resize(temp.size()+p_.Degree());
        for(size_t i(0); i<temp.size(); i++)
            for(size_t j(0); j<=p_.Degree(); j++)
                inf[i+j]+=temp[i]*p_(j);
        while(!inf.back() && inf.size())
            inf.pop_back();
    }
 
    void Print()
    {
        for(size_t i(inf.size()-1); i; i--)
            cout << inf[i] << "*x^" << i << " + ";
        cout << inf[0];
        cout << endl;
    }
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2012, 16:08     Жорданова форма
Посмотрите здесь:

виндовая форма C++
C++ Неполная форма
C++ Инфиксная форма
Экспоненциальная форма C++
Форма на плюсах C++
C++ Форма Фробениюса
C++ Необычная форма
Жорданова форма матрицы C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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