Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/64: Рейтинг темы: голосов - 64, средняя оценка - 4.66
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583

Собственные значения матрицы

12.09.2019, 23:29. Показов 13790. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ли библиотека для нахождения собственных значений матрицы и как ее использовать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2019, 23:29
Ответы с готовыми решениями:

Вычислить собственные значения матрицы через итерационный процесс
Задача вычислить собственные значения через итерационный процесс пишу программу для матрицы 5 0 0 0 4 0 0 0 3 решает все верно,...

Функция, которая вычисляет собственные значения н-мерной матрицы
Подскажите пожалуйста функцию, которая вычисляет собственные значения n-мерной матрицы. Или источники где подсмотреть. Спасибо. Очень...

Как связаны собственные значения и векторы матриц А и А^5?
помогите пожалуйста решить вот такую задачу(очень срочно надо):как связаны собственные значения и векторы матриц А и А^5 ?

8
2622 / 1633 / 266
Регистрация: 19.02.2010
Сообщений: 4,335
13.09.2019, 00:38
Посмотрите в https://ru.wikipedia.org/wiki/Eigen - есть ли нужная функция.
А заодно - посмотрите, насколько тамошняя форма представления/хранения матриц совпадает с нужной Вам (а то, может, ради вызова одной функции придётся переделывать много остального Вашего кода).
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
13.09.2019, 00:55  [ТС]
VTsaregorodtsev, на главном сайте ее смотреть ? У меня обычные массивы двумерные и одномерных

Добавлено через 3 минуты
VTsaregorodtsev, еще нашла в книге код метода Крылова, но он очень непонятный... когда его оставляю отдельной программой, то ошибка на ошибке... помогите в нем разобраться, пожалуйста, и переделать, чтобы его читал компилятор без ошибок

Добавлено через 2 минуты
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
#include <conio.h>
#include "matrix.h"
#include "equation.h"
cvector Krylov_eigenval(cmatrix &x)
{
if(x.getn()!=x.getm())
 throw xmsg("Для неквадратных матриц собственные 
значения не определены");
/*Согласно данному методу, нам необходимо составить 
последовательность линейно независимых векторов по 
специальному закону. Для удобства использования мы 
будем хранить их как вектор-столбцы, то есть как
последовательность одностолбцовых матриц:*/
cmatrix *B; /*указатель под последовательность 
векторов*/
//пытаемся выделить память
try
 {
 B=new cmatrix[x.getm()+1];
}
/*перехват этого исключения происходит при не-
хватке памяти*/
catch(xalloc)
{
/*не пытаясь исправить эту ситуацию, выбрасываем, в 
свою очередь, стандартное исключение с диагностиче-
ским текстом */
 throw xmsg("Не хватает памяти");
}
/*заполняем массив В векторами (одностолбцовыми 
матрицами) заданного размера */
for(long i=0;i<x.getm()+1;i++)
 B[i]=cmatrix(x.getm(),1);
/*создаём пока пустую матрицу, хранящую в своих 
столбцах строящуюся последовательность векторов*/
cmatrix test(x.getm(),x.getm());
do
{
 //формируем случайный вектор
 for(long i=0;i<B[0].getm();i++)
 B[0][i][0]=random(x.getm()+1);
 /*действуя на вектор линейным оператором, за-
данным матрицей, находим следующий вектор и т.д.*/
 for(long i=0;i<x.getm();i++)
 B[i+1]=x*B[i];
 /*переносим вектора из массива в соответствую-
щие столбцы матрицы*/
 for(long i=0;i<test.getm();i++)
 for(long j=0;j<test.getm();j++)
 test[j][i]=B[i][j][0];
 randomize();/*переустанавливаем генератор слу-
чайных чисел*/
/*процесс построения повторяем до тех пор, пока не 
выполнится условие линейной независимости векторов 
- неравенство нулю детерминанта матрицы, составлен-
ной из построенных векторов*/
}while(det(test)==(complex)0);
/*разлагаем последний вектор по предыдущим (в си-
лу их линейной независимости) как по базису и нахо-
дим коэффициенты разложения*/
cmatrix coeffs=SLAE_Orto(test,B[x.getm()]);
delete[] B;//освобождаем память из-под массива
 //формируем полином из вычисленных коэффициентов
 cpolynom p=x.getm()+1;
 p[x.getm()]=1;
 for(long i=0;i<coeffs.getm();i++)
 
p[i]=-coeffs[i][0];
/*находим корни полинома (собственные значения) мо-
дифицированным методом Ньютона*/
return newton(p);
}
Добавлено через 1 минуту
Там какой-то полном Ньютона используется еще... в общем совсем непонятный код... А библиотеку нужно скачивать ?
0
2622 / 1633 / 266
Регистрация: 19.02.2010
Сообщений: 4,335
13.09.2019, 03:24
Цитата Сообщение от ElKros Посмотреть сообщение
на главном сайте ее смотреть ?
Да.
Я посмотрел - там есть 4 решалки для собственных чисел. См в http://eigen.tuxfamily.org/dox... tions.html во второй таблице последние 4 строки.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
13.09.2019, 10:00  [ТС]
VTsaregorodtsev, а когда пишу #include <Eigen / Eigenvalues>, то его не видит
0
2622 / 1633 / 266
Регистрация: 19.02.2010
Сообщений: 4,335
13.09.2019, 13:51
Скачали библиотеку?
Куда её положили?
Может, в среде разработки в настройках проекта надо эту новую (библиотечную) директорию добавить к тем, где компилятор должен искать заголовочные файлы?


PS. Я сам этой библиотекой никогда не пользовался - ибо лет 20 назад для поиска собственных чисел и векторов запрограммировал себе костыль на основе ортогонализации Грама-Шмидта. Т.е. я ещё и не знаю, какие алгоритмы сейчас математики рекомендуют (с точки зрения лучшей скорости вычислений, с точки зрения лучшей точности и т.д.). Так что моя помощь ограничивается всего лишь называнием библиотеки.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
13.09.2019, 15:39  [ТС]
VTsaregorodtsev, метод Крылова, но он сложный для программирования... либо мои силы еще не так велики для этого... но очень нужно посчитать норму матрицы через собственные значения

Добавлено через 32 секунды
VTsaregorodtsev, скачала, но ее не видит из загрузок почему-то
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
13.09.2019, 17:19
Цитата Сообщение от ElKros Посмотреть сообщение
но очень нужно посчитать норму матрицы через собственные значения
Насколько, я помню, для нормы матрицы, согласованной с евклидовой нормой вектора, нужно только максимальное собственное значение, оно вроде как легко получается итеративным алгоритмом из соотношения:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\lim_{k\rightarrow \infty } A^k \bar{x} = \lambda^k \alpha \bar{e}
Там есть свои нюансы реализации, но вроде рабочий метод, если собственные значения вещественные.
Вот статья: https://ru.wikipedia.org/wiki/Степенной_метод
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
14.09.2019, 00:40  [ТС]
woldemas, попробую его реализовать

Добавлено через 5 часов 54 минуты
VTsaregorodtsev, woldemas, подскажите пожалуйста, нашла код степенного метода, но он выбирает максимальное по модулю собственное число матрицы. Но, в норме мне нужно просто корень из максимального собственного значения. Помогите исправить, пожалуйста
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
float Matr(float A[][N], float norm) {
    float w0[100], w[100], summ = 0, w0norm[100], e, d, d0;
    int i, j, k;
    w0[0] = 1;
    for (i = 1; i < N; i++)
        w0[i] = 0;
    do {
        for (i = 0; i < N; i++)
            summ = summ + w0[i] * w0[i];
        d0 = sqrt(summ);
        for (i = 0; i < N; i++)
            w0norm[i] = w0[i] / d0;
        for (i = 0; i < N; i++) {
            w[i] = 0;
            for (j = 0; j < N; j++)
                w[i] = w[i] + A[i][j] * w0norm[j];
        }
        summ = 0;
        for (i = 0; i < N; i++)
            summ = summ + w[i] * w[i];
        d = sqrt(summ);
        e = fabs(d - d0);
        for (i = 0; i < N; i++)
            w0[i] = w[i];
        summ = 0;
    } while (e > 0.001);
 
    std::cout << "\nL = " << d << std::endl;
    norm = sqrt(d);
    return norm;
}
Добавлено через 51 минуту
Как я поняла, то это алгоритм степенного метода.
1) Выбираем вектор X0 - начальное приближение, при этом X0!=0;
2) Строим Xn+1=A*Xn=An+1 * X0
3) Находим λn=(Xn+1, Xn)/(Xn, Xn); (Где запятая - скалярное умножение векторов)
Критерий окончания: |λn-λn-1|<E

Находит собственное значение для матрицы А, но для обратной ей матрицы не работает. подскажите пожалуйста, в чем ошибка ?

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
float L, E;
int i, j;
 
void matrix_m_vector(float a[N][N], float v[N], float res[N]) {
    for (i = 0; i < N; i++) {
        res[i] = 0;
        for (j = 0; j < N; j++) {
            res[i] += a[i][j] * v[j];
        }
    }
}
 
void vector_m_vector(float v1[N], float v2[N], float res[N]) {
    for (i = 0; i < N; i++) {
        *res += v1[i] * v2[i];
    }
}
 
float NORM(float A[N][N], float norm) {
 
    float *Xn = new float[N];
    float *Xn1 = new float[N];
    
    cout << "\ninsert priblijenie\n";
    for (i = 0; i < N; i++)
        cin >> Xn[i];
    cout << "\nE = ";
    cin >> E;
 
    while (1) {
        matrix_m_vector(A, Xn, Xn1);
        float num = 0, den = 0;
        vector_m_vector(Xn1, Xn, &num);
        vector_m_vector(Xn, Xn, &den);
        float Lprev = L;
        L = num / den;
        if ((fabs(L - Lprev)) < E) break;
        memcpy(Xn, Xn1, sizeof(Xn));
    }
    cout << "max = " << L << endl;
    return L;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.09.2019, 00:40
Помогаю со студенческими работами здесь

Исправить программу на собственные значения и им соответствующие вектора
Ребята вот смотрите: программа в принципе работает правильно (считает собственное значение L верно), НО собственный вектор матрицы, а...

Решение краевой задачи на собственные значения методом Галеркина
Помогите пожалуйста реализовать эту задачу, буду очень благодарна! Очень нужно

Как найти собственные значения и собственные векторы матрицы?
Дано матрица вида A=\begin{pmatrix} 2 &amp;&amp; 1 \\ 2 &amp;&amp; 3 \end{pmatrix} Найти собственные значения и собственные векторы матрицы...

Найдите собственные значения и собственные векторы матрицы
Найдите собственные значения и собственные векторы матрицы \begin{pmatrix} 5 &amp; -2 &amp; -2\\ -2 &amp; 4 &amp; 0\\ -2 &amp; 0 &amp;...

найти собственные значения и собственные векторы матрицы
так есть матрица \begin{pmatrix}0 &amp; 2 &amp; 0\\ -7 &amp; -1 &amp;0 \\ 6&amp; -8 &amp;-9 \end{pmatrix} так тут мы дальше делаем вот так это типо...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru