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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 63, средняя оценка - 4.73
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
#1

Вычисление собственных значений и собственных векторов матрицы - C++

03.01.2011, 16:46. Просмотров 8838. Ответов 4
Метки нет (Все метки)

Доброго времени суток всем.
Собственно написал программу, реализует степенной метод. Проблема в округлении. 1 итерация- вычисление начального вектора. 2 итерация тоже идет нормально, но потом получаются значения l=7.03 l0=7.25. по идее е=0.22, но почему то дробная часть отбрасывается и е получается равным 0-> программа заканчивает вычисления.
Вот код

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
#include<stdio.h>
#include<math.h>
 
void Input(int n,int A[][100])
{
int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf("%d",&A[i][j]);
}
 
void Matr(int A[][100],int n)
{
int y0[100],i,j,y[100],p,k=0;
float e=1.0,l,l0;
scanf("%d",&p);
for (i=0;i<n;i++)
y0[i]=1;
do
{
for (i=0;i<n;i++)
{
y[i]=0;
for (j=0;j<n;j++)
y[i]=y[i]+A[i][j]*y0[j];
printf("%d\n",y[i]);
}
if (k==0)
    {
    l0=y[p]/y0[p];
    k++;
    }
else
    {
    l=y[p]/y0[p];
    printf("l=%f",l);
    printf("l0=%f",l0);
    e=fabs(l-l0);
    printf("e=%f",e);
    l0=l;
    }
for (i=0;i<n;i++)
y0[i]=y[i];
}
while (e>0.001);
}
 
void main()
{
int n,A[100][100];
scanf("%d",&n);
Input(n,A);
Matr(A,n);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2011, 16:46     Вычисление собственных значений и собственных векторов матрицы
Посмотрите здесь:

C++ Цвет собственных типов переменных в C++
C++ Метод итераций: нахождение собственных векторов и собственных значений матрицы
Вычисление собственных значений и собственных векторов матрицы C++
C++ Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений
Реализация собственных классов C++
C++ Композиции на основе собственных типов
Сортировка собственных типов данных C++
C++ Создание и использование собственных библиотек
C++ КуР-алгоритм поиска собственных значенийдля почти треугольной матрицы!
Приведение типов собственных классов C++
Функция hmatrixevd из пакета alglib для поиска собственных значений и собственных векторов C++
Конвертирование в bool собственных типов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
03.01.2011, 16:52     Вычисление собственных значений и собственных векторов матрицы #2
видимо проблемы при операциях между int и другими типами, замените все числа на double (float)
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
03.01.2011, 17:19  [ТС]     Вычисление собственных значений и собственных векторов матрицы #3
получилось=) я тож так сначала подумал, даже перепроверил все. но ниче не нашел=(

Добавлено через 17 минут
ну тогда сразу ещё вопрос. наибольшее собственное значение я вычислил(по заданию). как вычислить соответствующий вектор?
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
03.01.2011, 17:38     Вычисление собственных значений и собственных векторов матрицы #4
Цитата Сообщение от Гамбит Посмотреть сообщение
как вычислить соответствующий вектор?
в соответствуещее характеристическое уравнение подставить собственное значение - это и будет собственный вектор.
Или это не математический вопрос?
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
04.01.2011, 13:10  [ТС]     Вычисление собственных значений и собственных векторов матрицы #5
а если в условии моей программы? если делать через характеристическое уравнение, то мне нужно дописывать код для его составления и решения, что не так то и просто.

Добавлено через 17 часов 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
#include<stdio.h>
#include<math.h>
 
void Input(int n,int A[][100])
{
int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf("%d",&A[i][j]);
}
 
void Matr(int A[][100],int n)
{
float w0[100],w[100],summ=0,w0norm[100],e,d,d0;
int i,j,k;
for (i=0;i<n;i++)
w0[i]=0;
w0[0]=1;
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);
printf("%f\n",d);
for (i=0;i<n;i++)
printf("%f\n",w0norm[i]);
}
 
void main()
{
int n,A[100][100];
scanf("%d",&n);
Input(n,A);
Matr(A,n);
}
Yandex
Объявления
04.01.2011, 13:10     Вычисление собственных значений и собственных векторов матрицы
Ответ Создать тему
Опции темы

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