Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/155: Рейтинг темы: голосов - 155, средняя оценка - 4.76
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93

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

03.01.2011, 16:46. Показов 32737. Ответов 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);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.01.2011, 16:46
Ответы с готовыми решениями:

Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений
Курсовая работа!! Задание: &quot;Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений&quot; ...

Вычисление собственных значений и собственных векторов матрицы
Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений Матрицу задаём произвольно! а дальше по...

Метод итераций: нахождение собственных векторов и собственных значений матрицы
Доброго времени суток. метод итерации нахождение собственных векторов и собственных значений матрицы - вот тема на которую нужно написать...

4
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
03.01.2011, 16:52
видимо проблемы при операциях между int и другими типами, замените все числа на double (float)
1
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
03.01.2011, 17:19  [ТС]
получилось=) я тож так сначала подумал, даже перепроверил все. но ниче не нашел=(

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

Добавлено через 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);
}
6
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.01.2011, 13:10
Помогаю со студенческими работами здесь

Функция hmatrixevd из пакета alglib для поиска собственных значений и собственных векторов
Добрый день. Нужно найти собственные значения и вектора комплексной эрмитовой матрицы. Под решение этой задачи подошла функция hmatrixevd ...

КуР-алгоритм поиска собственных значенийдля почти треугольной матрицы!
QR-алгоритм поиска собственных значенийдля почти треугольной матрицы! Помогите написать, а лучше сами напишите прогу на чистом С с...

Реализация собственных классов
Разработать прогнрамму, демонстрирующую работу с объектами 2х типов: Triangle(треугольник) и Quadrate(квадрат ).Каждый объект должен иметь...

Создание собственных исключений
Vsem privet. Kto mojet reshit sleduushee, Sam ne ponyal. budu blagodaren. source.h: class StackOfIntegers { public: ...

Объявление собственных операторов
Приветствую, уважаемые Форумчане! У меня вопрос следующий: как можно объявить собственный оператор, а также как в исходном коде объявлены...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru