Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/55: Рейтинг темы: голосов - 55, средняя оценка - 4.84
6 / 6 / 2
Регистрация: 08.04.2014
Сообщений: 248

Рассчитать характеристический многочлен матрицы 3-го порядка

17.10.2014, 22:27. Показов 10493. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как закодить многочлен матрицы 3-го порядка?в нете ничего не нашел.

Добавлено через 2 минуты
или алгоритм

Добавлено через 1 минуту
срочно надо для курсача
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.10.2014, 22:27
Ответы с готовыми решениями:

Характеристический многочлен матрицы произвольной размерности
не могу придумать как реализовать характеристический многолчен: дана матрица :\begin{pmatrix}3 &1 \\ 2 &4 \end{pmatrix} нужно...

Характеристический многочлен
Есть матрица: 2-a -2 1 2 -3 -1-a 1 2 0 -2 -1-a 2 1 -2 1 -1-a нужно посчитать характерестический многочлен, уже заколебался....

Найти матрицу имея характеристический многочлен
Подскажите, пожалуйста, как имея многочлен найти матрицу для которой он будет характеристическим?

15
 Аватар для aiwprton805
78 / 77 / 51
Регистрация: 30.03.2013
Сообщений: 194
17.10.2014, 23:59
Приведи свою матрицу к нормальной форме Фробениуса подобным преобразованием, тогда коэффициенты при степенях https://www.cyberforum.ru/cgi-bin/latex.cgi?\lambda характеристического многочлена можно легко выразить через первую строку матрицы Фробениуса.
0
6 / 6 / 2
Регистрация: 08.04.2014
Сообщений: 248
18.10.2014, 18:32  [ТС]
а можно поподробнее или пример?

Добавлено через 17 часов 7 минут
актуально

Добавлено через 2 минуты
или алгоритм

Добавлено через 5 минут
вот нашел описание http://dep805.ru/education/kk/jmatrix/part1.htm
как запрограммировать не знаю

Добавлено через 8 минут
никто не кодил?

Добавлено через 10 минут
все нашел!ура!
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
18.10.2014, 19:12
https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
\Delta (A-LE) = \begin{vmatrix}<br />
a_{11}-L & a_{12} & a_{13}\\ <br />
a_{21} &  a_{22}-L& a_{23}\\ <br />
 a_{31}&  a_{32}& a_{33}-L<br />
\end{vmatrix} = \\ -L^3+(a_{11}+a_{22}+a_{33})L^2-\left \{ \begin{vmatrix}<br />
a_{11} &a_{12} \\ <br />
a_{21} & a_{22}<br />
\end{vmatrix}+ \begin{vmatrix}<br />
a_{22} &a_{23} \\ <br />
a_{32} & a_{33}<br />
\end{vmatrix}+\begin{vmatrix}<br />
a_{11} &a_{13} \\ <br />
a_{31} & a_{33}<br />
\end{vmatrix}\right \}L + \Delta A<br />
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
18.10.2014, 19:52
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
//----------------------------------------------------------------------------
#include <iostream>
#include <iomanip>
#include <ctime>
//----------------------------------------------------------------------------
double **Create3x3()
{
    double **arr = new double *[3];
    for (int i = 0; i<3; i++)
        arr[i] = new double [3];
 
    for (int i = 0; i<3; i++)
        for (int j = 0; j<3; j++)
            arr[i][j] = 1.0 *(rand()%100) / (rand()%7 + 1);
 
    return arr;
}
 
void Kill3x3 (double **arr)
{
    for (int i = 0; i<3; i++)
        delete [] arr[i];
    delete []arr;
}
 
void Print3x3 (double **arr)
{
    for (int i = 0; i<3; i++)
    {   for (int j = 0; j<3; j++)
            std::cout << std::fixed << std::setw(10) << std::setprecision(3) << arr[i][j];
        std::cout << "\n";
    }
}
//----------------------------------------------------------------------------
double Det2 (double a, double b, double c, double d)
{
    return a*c-b*d;
}
 
double Det3 (double **arr)
{
    return  arr[0][0]*Det2(arr[1][1], arr[1][2], arr[2][1], arr[2][2]) - 
            arr[0][1]*Det2(arr[1][0], arr[1][2], arr[2][0], arr[2][2]) +
            arr[0][2]*Det2(arr[1][0], arr[1][1], arr[2][0], arr[2][1]);
}
 
//----------------------------------------------------------------------------
int main()
{   
    srand (unsigned int (time));
    
    double **arr = Create3x3();
    std::cout << "\nArray:\n";
    Print3x3 (arr);
    
    double P[4];
    P[0] = -1.0;
    P[1] = arr[0][0] + arr[1][1] + arr[2][2];
    P[2] = -(   Det2(arr[0][0], arr[0][1], arr[1][0], arr[1][1]) + 
                Det2(arr[1][1], arr[1][2], arr[2][1], arr[2][2]) +
                Det2(arr[0][0], arr[0][2], arr[2][0], arr[2][2]));
 
    P[3] = Det3 (arr);
 
    std::cout << "\nPolynomial:\n";
    for (int i = 0; i<4 ; i++)
    {   std::cout << std::fixed << std::setw(10) << std::setprecision(3) << P[i] << " L^" << 3-i;
        if (i<3 && P[i+1] >0)
            std::cout << " +";
    }
 
    Kill3x3 (arr);
    std::cin.get();
    return 0;
}
//-----------------------------------------------------------------------------
Миниатюры
Рассчитать характеристический многочлен матрицы 3-го порядка  
0
 Аватар для DimKaKiber
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
07.09.2016, 14:32
Цитата Сообщение от aiwprton805 Посмотреть сообщение
Приведи свою матрицу к нормальной форме Фробениуса подобным преобразованием, тогда коэффициенты при степенях характеристического многочлена можно легко выразить через первую строку матрицы Фробениуса.
Глупый вопрос, возможно, но не могли бы Вы поподробнее объяснить механизм? Столкнулся просто с проблемой нахождения характеристического многочлена квадратной матрицы.
Еще волнует вопрос - как из матрицы действительных чисел получить комплексный характеристический многочлен?
0
 Аватар для aiwprton805
78 / 77 / 51
Регистрация: 30.03.2013
Сообщений: 194
07.09.2016, 18:10
Вам нужно найти характеристический многочлен через матрицу Фробениуса?
0
 Аватар для DimKaKiber
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
08.09.2016, 08:38
Я не совсем уверен, что именно через матрицу Фробениуса. Нужно просто рассчитать характеристический многочлен матрицы.
Матрица при этом имеет следующий вид:

-2.0824 -1.0616 0 0 0 0 0 0
1.0616 0 0 0 0 0 0 0
0 1.0616 -1.7654 -1.0616 0 0 0 0
0 0 1.0616 0 0 0 0 0
0 0 0 1.0616 -1.1796 -1.0616 0 0
0 0 0 0 1.0616 0 0 0
0 0 0 0 0 1.0616 -0.4142 -1.0616
0 0 0 0 0 0 1.0616 0


Извините за кашу - не смог ровно оформить инструментами форума, прилагаю картинку еще к посту. Мне нужно программно реализовать расчет характеристического многочлена такой матрицы. Не могу понять по какому алгоритму это нужно делать (в какой последовательности), т.к. с линейной алгеброй не сильно дружу.
Миниатюры
Рассчитать характеристический многочлен матрицы 3-го порядка  
0
 Аватар для DimKaKiber
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
08.09.2016, 11:44
Если быть более точным, то пытаюсь реализовать функцию из Матлаба - eig(X), где X - это моя квадратная матрица

при этом в качестве результата функция выдает вектор-столбец с комплексными результатами:
-1.0412 + 0.2071i
-1.0412 - 0.2071i
-0.8827 + 0.5898i
-0.8827 - 0.5898i
-0.5898 + 0.8827i
-0.5898 - 0.8827i
-0.2071 + 1.0412i
-0.2071 - 1.0412i

Что с этими результатами делать дальше знаю, уперся только в расчет характеристического многочлена матрицы
0
 Аватар для aiwprton805
78 / 77 / 51
Регистрация: 30.03.2013
Сообщений: 194
08.09.2016, 13:38
Это вектор собственных значений. То есть это корни характеристического многочлена. А вам надо найти коэффициенты при степенях. Размерность матрицы https://www.cyberforum.ru/cgi-bin/latex.cgi?8\times 8, значит многочлен будет таким: https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{0}{\lambda }^{8}+{a}_{1}{\lambda }^{7}+{a}_{2}{\lambda }^{6}+{a}_{3}{\lambda }^{5}+{a}_{4}{\lambda }^{4}+{a}_{5}{\lambda }^{3}+{a}_{6}{\lambda }^{2}+{a}_{7}\lambda+{a}_{8}. Надо найти коэффициенты https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{i}. Такую задачу можно решить методом Данилевского.
Идея метода Данилевского состоит в том, что матрица https://www.cyberforum.ru/cgi-bin/latex.cgi?A подобным преобразованием приводится к нормальной форме Фробениуса.
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}{a}_{1} & {a}_{2} & \cdot \cdot \cdot  & {a}_{n-1} & {a}_{n}\\ 1 & 0 & \cdot \cdot \cdot & 0 & 0\\ 0 & 1 & \cdot \cdot \cdot & 0 & 0\\ \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot\\ 0 & 0 & \cdot \cdot \cdot & 1 & 0\end{pmatrix}
То есть коэффициенты при степенях https://www.cyberforum.ru/cgi-bin/latex.cgi?\lambda характеристического многочлена непосредственно выражаются через элементы первой строки матрицы Фробениуса.
Приведение матрицы https://www.cyberforum.ru/cgi-bin/latex.cgi?A к нормальной форме Фробениуса осуществляется последовательно по строкам, начиная с последней строки.
Матрица https://www.cyberforum.ru/cgi-bin/latex.cgi?A приводится к матрице https://www.cyberforum.ru/cgi-bin/latex.cgi?{A}_{1} подобным преобразованием https://www.cyberforum.ru/cgi-bin/latex.cgi?{A}_{1}={M}^{-1}_{n-1}A{M}_{n-1}.
https://www.cyberforum.ru/cgi-bin/latex.cgi?{M}^{-1}_{n-1}=\begin{pmatrix}1 & 0 & \cdot \cdot \cdot & 0 & 0\\ 0 & 1 & \cdot \cdot \cdot & 0 & 0\\ \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot\\ {a}_{n,1} & {a}_{n,2} & \cdot \cdot \cdot & {a}_{n,n-1} & {a}_{n,n}\\ 0 & 0 & 0 & 0 & 1\end{pmatrix}
https://www.cyberforum.ru/cgi-bin/latex.cgi?{M}_{n-1}=\begin{pmatrix}1 & 0 & \cdot \cdot \cdot & 0 & 0\\ 0 & 1 & \cdot \cdot \cdot & 0 & 0\\ \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot\\ \frac{{-a}_{n,1}}{{a}_{n,n-1}} & \frac{{-a}_{n,2}}{{a}_{n,n-1}} & \cdot \cdot \cdot & \frac{1}{{a}_{n,n-1}} & \frac{{-a}_{n,n}}{{a}_{n,n-1}}\\ 0 & 0 & \cdot \cdot \cdot & 1 & \end{pmatrix}
Здесь https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{i,j} - элементы матрицы https://www.cyberforum.ru/cgi-bin/latex.cgi?A.
Теперь матрица https://www.cyberforum.ru/cgi-bin/latex.cgi?{A}_{1} приводится к матрице https://www.cyberforum.ru/cgi-bin/latex.cgi?{A}_{2} подобным преобразованием https://www.cyberforum.ru/cgi-bin/latex.cgi?{A}_{2}={M}^{-1}_{n-2}{A}_{1}{M}_{n-2}.
https://www.cyberforum.ru/cgi-bin/latex.cgi?{M}^{-1}_{n-2}=\begin{pmatrix}1 & 0 & \cdot \cdot \cdot & 0 & 0 & 0\\ 0 & 1 & \cdot \cdot \cdot & 0 & 0 & 0\\ \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot\\ {a}_{n-1,1} & {a}_{n-1,2} & \cdot \cdot \cdot & {a}_{n-1,n-2} & {a}_{n-1,n-1} & {a}_{n-1,n}\\ 0 & 0 & \cdot \cdot \cdot & 0 & 1 & 0\\ 0 & 0 & \cdot \cdot \cdot & 0 & 0 & 1\end{pmatrix}
https://www.cyberforum.ru/cgi-bin/latex.cgi?{M}_{n-2}=\begin{pmatrix}1 & 0 & \cdot \cdot \cdot & 0 & 0 & 0\\ 0 & 1 & \cdot \cdot \cdot & 0 & 0 & 0\\ \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot & \cdot \cdot \cdot\\ \frac{{-a}_{n-1,1}}{{a}_{n-1,n-2}} & \frac{{-a}_{n-1,2}}{{a}_{n-1,n-2}} & \cdot \cdot \cdot & \frac{1}{{a}_{n-1,n-2}} & \frac{{-a}_{n-1,n-1}}{{a}_{n-1,n-2}} & \frac{{-a}_{n-1,n}}{{a}_{n-1,n-2}}\\ 0 & 0 & \cdot \cdot \cdot & 0 & 1 & 0\\ 0 & 0 & \cdot \cdot \cdot & 0 & 0 & 1\end{pmatrix}
Здесь https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{i,j} - элементы матрицы https://www.cyberforum.ru/cgi-bin/latex.cgi?{A}_{1}.
Далее алгоритм приведения исходной матрицы к нормальной форме Фробениуса будет аналогичным. Легко видеть, что матрица Фробениуса будет получена за https://www.cyberforum.ru/cgi-bin/latex.cgi?n-1 шагов.
1
 Аватар для DimKaKiber
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
08.09.2016, 14:07
Спасибо! правильно ли я понял, что Матрицы М всегда будут диагональными, но со строками матрицы А в соответствующих позициях? И это итеративная операция. Т. е. за каждую итерацию в матрицы М вставляется только лишь одна строка матрицы А. Или матрицы М нужно изначально полностью заполнить строками матрицы А в соответствие с правилами?
И в результате коэффициенты многочлена - это первая строка матрицы Фробениуса? Т.е. произвел все вычисления и забрал первую строку в качестве ответа?

Извините за возможный сумбур.
0
 Аватар для aiwprton805
78 / 77 / 51
Регистрация: 30.03.2013
Сообщений: 194
08.09.2016, 17:56
Цитата Сообщение от DimKaKiber Посмотреть сообщение
правильно ли я понял, что Матрицы М всегда будут диагональными, но со строками матрицы А в соответствующих позициях? И это итеративная операция.
да
Цитата Сообщение от DimKaKiber Посмотреть сообщение
Т. е. за каждую итерацию в матрицы М вставляется только лишь одна строка матрицы А.
Вставляются в строку элементы из матриц https://www.cyberforum.ru/cgi-bin/latex.cgi?{A}_{i}. На каждой итерации вы получаете новую матрицу https://www.cyberforum.ru/cgi-bin/latex.cgi?A.
Цитата Сообщение от DimKaKiber Посмотреть сообщение
Или матрицы М нужно изначально полностью заполнить строками матрицы А в соответствие с правилами?
нет
Цитата Сообщение от DimKaKiber Посмотреть сообщение
И в результате коэффициенты многочлена - это первая строка матрицы Фробениуса? Т.е. произвел все вычисления и забрал первую строку в качестве ответа?
да
0
 Аватар для DimKaKiber
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
12.09.2016, 12:49
Спасибо большое!
Результаты получил такого вида:

https://www.cyberforum.ru/cgi-bin/latex.cgi?\left[ -6.16286    -21.1263    -49.251    -75.0425    -68.4961    -34.8367    -9.9446    -1.51951 \right]

Сейчас еще буду руками пересчитывать для проверки.

Возник теперь вопрос. А вектор собственных значений каким образом рассчитывается? Если я правильно понял, то через эти найденные коэффициенты? Получается, что нужно решить систему уравнений? Только тогда куда эти коэффициенты подставлять и система будет из матрицы Фронебиуса строиться или от исходной матрицы?

Добавлено через 1 час 36 минут
Вроде все верно работает.
Если интересно кому - привожу код. Он громоздкий получился - скорее всего можно неслабо его оптимизировать.
Надо только еще разобраться как теперь вектор собственных значений считать

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
float *Eig(float **a,long Size) //релизация функции Eig(X) для квадратной матрицы (Size*Size)
//реализуется расчет коэффициентов при степенях полинома методом Данилевского
{
 float *Vec = NULL;
 long S = Size-1;
 float **Buff = NULL; //буферная матрица
 float **Buff1 = NULL; //еще одна буферная матрица
 float **A = NULL; //буферная матрица, в которую складываю промежуточные результаты. Матрица заменяет матрицу а на второй и последующих итерациях
 A = (float**)malloc(Size*sizeof(float*));
 for (long i = 0; i < Size; i++)
  {
   A[i] = (float*)malloc(Size*sizeof(float));
   for (long j = 0; j < Size; j++) { A[i][j] = 0.0; }
  }
 float **M = NULL; //матрица, на которую постоянно домножать придется
 long Sa,Sa1;
 for (long i = S; i > 1; i--) //операция итеративная
  {
   //Первый блок приведения к матрице Фронебиуса
   if (i == S) M = Diag(Vec,Size,1.0,1); //диагональная матрица с 1 в качестве значений по диагонали
   if (i == S) //матрица M^(-1)n-1 заполняется
    {
     for (long j = 0; j < Size; j++) { M[i-1][j] = a[i][j]; }
    }
   else
    {
     for (long j = 0; j < Size; j++) { M[i-1][j] = A[i][j]; }
    }
   if (i == S) { Buff = MultiplyMatrix(M,a,Size,Size,Size,Size,Sa,Sa1); }
    else
      {
       Buff = MultiplyMatrix(M,Buff1,Size,Size,Size,Size,Sa,Sa1);
       if (Buff1 != NULL) { for (long i = 0; i < Size; i++) { free(Buff1[i]); Buff1[i] = 0; } free(Buff1); Buff1 = 0; }
      }
   for (long j = 0; j < Size; j++) //опять матрицу к диагональному виду привожу
    {
     if (j != i-1) { M[i-1][j] = 0.0; }
      else { M[i-1][j] = 1.0; }
    }
   if (i == S) //заполнение матрицы M(n-1)
    {
     for (long j = 0; j < Size; j++)
      {
       if (j == (i-1))
        {
         if (a[i][i-1] == 0.0) M[i-1][j] = 0.0;
          else M[i-1][j] = 1/a[i][i-1];
        }
       else
        {
         if (a[i][i-1] == 0.0) M[i-1][j] = 0.0;
          else M[i-1][j] = -1*(a[i][j]/a[i][i-1]);
        }
      }
    }
   else
    {
     for (long j = 0; j < Size; j++)
      {
       if (j == (i-1))
        {
         if (A[i][i-1] == 0.0) M[i-1][j] = 0.0;
          else M[i-1][j] = 1/A[i][i-1];
        }
       else
        {
         if (A[i][i-1] == 0.0) M[i-1][j] = 0.0;
          else M[i-1][j] = -1*(A[i][j]/A[i][i-1]);
        }
      }
    }
   Buff1 = MultiplyMatrix(Buff,M,Size,Size,Size,Size,Sa,Sa1);
   for (long j = 0; j < Size; j++) { free(Buff[j]); Buff[j] = 0; } free(Buff); Buff = 0; //чищу матрицу Buff вместе с памятью
   //Второй блок приведения к матрице Фронебиуса
   for (long j = 0; j < Size; j++) //обратное приведение матрицы к диагональному виду
    {
     if (j != i-1) { M[i-1][j] = 0.0; }
      else { M[i-1][j] = 1.0; }
    }
   if (i == S) //заполнение матрицы M^(-1)(n-2)
    {
     for (long j = 0; j < Size; j++) { M[i-2][j] = a[i-1][j]; }
    }
   else
    {
     for (long j = 0; j < Size; j++) { M[i-2][j] = A[i-1][j]; }
    }
   Buff = MultiplyMatrix(M,Buff1,Size,Size,Size,Size,Sa,Sa1);
   if (Buff1 != NULL) { for (long i = 0; i < Size; i++) { free(Buff1[i]); Buff1[i] = 0; } free(Buff1); Buff1 = 0; } //чищу память от буферной матрицы Buff1
   for (long j = 0; j < Size; j++) //обратное приведение матрицы к диагональному виду
    {
     if (j != (i-2)) { M[i-2][j] = 0.0; }
      else { M[i-2][j] = 1.0; }
    }
   if (i == S) //заполнение матрицы M(n-2)
    {
     for (long j = 0; j < Size; j++)
      {
       if (j == (i-2))
        {
         if (a[i-1][i-2] == 0.0) { M[i-2][j] = 0.0; }
          else { M[i-2][j] = 1/a[i-1][i-2]; }
        }
       else
        {
         if (a[i-1][i-2] == 0.0) { M[i-2][j] = 0.0; }
          else { M[i-2][j] = -1*(a[i-1][j])/a[i-1][i-2]; }
        }
      }
    }
   else
    {
     for (long j = 0; j < Size; j++)
      {
       if (j == (i-2))
        {
         if (A[i-1][i-2] == 0.0) { M[i-2][j] = 0.0; }
          else { M[i-2][j] = 1/A[i-1][i-2]; }
        }
       else
        {
         if (A[i-1][i-2] == 0.0) { M[i-2][j] = 0.0; }
          else { M[i-2][j] = -1*(A[i-1][j])/A[i-1][i-2]; }
        }
      }
    }
   Buff1 = MultiplyMatrix(Buff,M,Size,Size,Size,Size,Sa,Sa1);
   if (Buff != NULL) { for (long i = 0; i < Size; i++) { free(Buff[i]); Buff[i] = 0; } free(Buff); Buff = 0; }
   for (long j = 0; j < Size; j++)  //снова матрицу к диагональному виду привожу
    {
     if (j != (i-2)) { M[i-2][j] = 0.0; }
      else { M[i-2][j] = 1.0; }
    }
   //промежуточную матрицу А заполняю
   if (i != 2) //лишние телодвижения пресекаю
    {
     for (long j = 0; j < Size; j++)
      {
       for (long k = 0; k < Size; k++)
        {
         A[j][k] = Buff1[j][k];
        }
      }
    }
  }
 //чищу память
 if (M != NULL) { for (long i = 0; i < Size; i++) { free(M[i]); M[i] = 0; } free(M); M = 0; }
 if (A != NULL) { for (long i = 0; i < Size; i++) { free(A[i]); A[i] = 0; } free(A); A = 0; }
 //результат работы функции
 Vec = (float*)malloc(sizeof(float)*Size);
 for (long i = 0; i < Size; i++)
  {
   Vec[i] = Buff1[0][i];   
  } 
 if (Buff1 != NULL) { for (long i = 0; i < Size; i++) { free(Buff1[i]); Buff1[i] = 0; } free(Buff1); Buff1 = 0; }
 return Vec;
}
Добавлено через 2 часа 48 минут
все-таки неправильно сделал.
Нашел книжку (http://sa.technolog.edu.ru/fil... henija.pdf) - щас переделывать буду. Отработает Данилевский - хорошо, нет - по другому посчитаю) спасибо большое за помощь!
0
 Аватар для DimKaKiber
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
14.09.2016, 15:03
Не могу понять одну вещь.
Матрицу к форме Фробениуса привел, затем выяснил, что матрица моя не симметричная.
Собственные значения матрицы тогда будут комплексными???

Вот формула интервалов, внутри которых лежит один из корней матрицы (для примера просто):

https://www.cyberforum.ru/cgi-bin/latex.cgi?S = ( z\in C: \left| z+2\right| \leq 1 )

при этом z в части https://www.cyberforum.ru/cgi-bin/latex.cgi?\left| z+2\right| это же комплексное число? Как мне определить его действительную и мнимую части? Направьте меня пожалуйста?

С методом Данилевского, кстати, в части вещественных чисел (матрица симметрична) справился Осталосьс комплексными корнями разобраться.

Добавлено через 30 минут
Забыл - С - множество комплексных чисел
0
 Аватар для aiwprton805
78 / 77 / 51
Регистрация: 30.03.2013
Сообщений: 194
14.09.2016, 16:59
Цитата Сообщение от DimKaKiber Посмотреть сообщение
Собственные значения матрицы тогда будут комплексными???
Могут быть комплексными.
Я так понимаю, что стоит задача найти все корни характеристического многочлена. В том числе кратные и комплексные.
Рассмотрите численный метод Ньютона поиска корней любой функции. Он работает и в комплексной области. С помощью этого метода можно найти только один корень, но т.к. имеем многочлен от https://www.cyberforum.ru/cgi-bin/latex.cgi?\lambda, то можно найти все его корни. Если нашли корень https://www.cyberforum.ru/cgi-bin/latex.cgi?{\lambda }_{0}, то разделив исходный многочлен на https://www.cyberforum.ru/cgi-bin/latex.cgi?\lambda -{\lambda }_{0}, получим многочлен меньшей степени и будем искать новый корень уже от нового многочлена. В качестве оптимизации можно учесть теорему о том, что если https://www.cyberforum.ru/cgi-bin/latex.cgi?z = a+ib - комплексный корень, то https://www.cyberforum.ru/cgi-bin/latex.cgi?\bar{z}=a-ib также будет корнем многочлена.
0
 Аватар для DimKaKiber
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
21.09.2016, 17:04
Спасибо большое! Отвлекся на другую задачу по проекту. Сейчас вернулся к проблеме.
Все равно не понимаю: есть точка окружности на оси X, соответствующая центру этой окружности. Радиус окружности - Y. Мне нужно внутри этого кружка найти некое комплексное число. Метод Ньютона, в общем понятен, но непонятно какие числа на его вход подавать (интервалы, если быть точным) и как внутри все организовать, чтобы именно комплексное число из него вылезло? Или как определить - комплексным будет корень или нет?

Добавлено через 48 секунд
Под кружками я понимаю области, в которых нужно искать корни.

Добавлено через 17 минут
И вообще правильно ли я делаю приводя несимметричную матрицу к форме Фробениуса и забирая из ее первой строки коэффициенты уравнения? Или же для несимметричных матриц нужно использовать другой подход?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.09.2016, 17:04
Помогаю со студенческими работами здесь

Диф. уравнение через характеристический многочлен.
Отыскала корни характеристического уравнения левой части...а что делать с правой не знаю... y'''-2y''-y'+2y=(3x+4)e^{2x}+7e^{-x} ...

Рассчитать многочлен Лагранжа
Помогите пожалуйста , очень срочно Рассчитать многочлен Лагранжа для первых семи точек вручную. В этот многочлен нужно подставить...

Из матрицы n-го порядка получить матрицу порядка n-1 путем удаления из исходной матрицы строки и столбца
Из матрицы n-го порядка получить матрицу порядка n-1 путем удаления из исходной матрицы строки и столбца, на пересечении которых...

Из матрицы n-го порядка получить матрицу порядка n-1, удалив из исходной матрицы указанные строки и столбцы
Из матрицы n-го порядка получить матрицу порядка n-1 путем удаления из исходной матрицы строки и столбца, на пересечении которых расположен...

Как из определителей 3-го порядка получился многочлен 4-й степени
Добрый день, я тут попал в тупик, есть такое решение задачи: мне не понятен конец, как получилось так сократить |А'В+...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru