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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 63, средняя оценка - 4.73
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
03.01.2011, 16:46     Вычисление собственных значений и собственных векторов матрицы #1
Доброго времени суток всем.
Собственно написал программу, реализует степенной метод. Проблема в округлении. 1 итерация- вычисление начального вектора. 2 итерация тоже идет нормально, но потом получаются значения l=7.03 l0=7.25. по идее е=0.22, но почему то дробная часть отбрасывается и е получается равным 0-> программа заканчивает вычисления.
Вот код

Код
#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++ Композиции на основе собственных типов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
03.01.2011, 16:52     Вычисление собственных значений и собственных векторов матрицы #2
видимо проблемы при операциях между int и другими типами, замените все числа на double (float)
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
03.01.2011, 17:19  [ТС]     Вычисление собственных значений и собственных векторов матрицы #3
получилось=) я тож так сначала подумал, даже перепроверил все. но ниче не нашел=(

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

Добавлено через 17 часов 52 минуты
Вот готовый код, если кому надо
Код
#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     Вычисление собственных значений и собственных векторов матрицы
Ответ Создать тему
Опции темы

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