29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
1

Исправить программу на собственные значения и им соответствующие вектора

27.03.2014, 18:46. Показов 4725. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята вот смотрите: программа в принципе работает правильно (считает собственное значение L верно), НО собственный вектор матрицы, а именно то что находится по правую часть от матрицы А на картинке не верно. Помогите разобраться че к чему, может эпсилон не тот или еще что-нибудь???

Тестовый пример:

Матрица А:
4 2 2
2 5 1
2 1 6

Матрица x1 (вот это после равно справа от матрицы неверное считает):
0,8077c1
0,7720c1
c1

Ответ:
L1=8,3874

КОД ПРОГИ:
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
#include "stdafx.h"
#include "cmath"
#include "iostream"
#include "locale.h"
using namespace std;
 
void Input(int n,int A[][100])
{
    int i,j;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++){
            std::cout << "Введите A[" << i << "][" << j << "]: ";
            std::cin >> 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;
    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 << "\nМатрица А:\n";
    for (i=0;i<n;i++){
        for (j=0;j<n;j++)
            std::cout << A[i][j] << " ";
        std::cout  << " = " << w0norm[i] << std::endl;
    }
    std::cout << "\nL = " << d << std::endl;  
}
 
int main()
{
    int n,A[100][100];
    setlocale(LC_ALL, "rus");
    std::cout << "Введите размерность квадратной матрицы = ";
    std::cin >> n;
    Input(n,A);
    Matr(A,n);
    
    std::cin.get();
    std::cin.get();
    return 0;
}
Добавлено через 1 час 9 минут
ребята подскажете?

Добавлено через 22 часа 27 минут
помогите пожалуйста

Добавлено через 1 час 51 минуту
великие программисты вы гдее?)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2014, 18:46
Ответы с готовыми решениями:

Найти собственные значения и собственные вектора
Найти собственные значения и собственные вектора. | -3 0 6 | | 8 2 9 | | 4 2 1 |

Maple находит собственные значения и вектора комплексные
Добрый вечер! Очень прошу, помогите, пожалуйста. Работаю с матрицами в Maple, и при попытке...

Зачем нужны собственные значения/вектора и характеристический полином?
Какой физический или геометрический смысл собственных значений/векторов и характеристического...

Написать программу вычисления произведений матриц на соответствующие им вектора
Помогите пожалуйста написать программу с использованием классов и методов в Visual Studio 2010 ...

27
Заблокирован
30.03.2014, 09:02 21
Author24 — интернет-сервис помощи студентам
Нормально все и с этим вектором (желтый столбец - почти нули).
Оранжевый столбец - приведение вектора (0,540055; 0,51953; 0,66214) к виду

0,815620564
0,784622587
1

Делением каждой составляющей на 0,66214.
Как видите, вектор с заданной точностью похож на
0,8077c1
0,7720c1
c1
Миниатюры
Исправить программу на собственные значения и им соответствующие вектора  
0
Заблокирован
30.03.2014, 09:38 22
У вас точность вычислений - до второго знака. Повысьте ее до четвертого знака: строка 45
C++
1
while(e>0.00001);
При этом вы будете получать вектор с точностью до множителя.
Так, полученный сейчас (0,540055; 0,51953; 0,66214) соответствует с1 = 0,66214.

Добавлено через 28 минут
Кроме того, полученный вектор является нормированным, то бишь
0,540055 ^2 + 0,51953 ^2 + 0,66214 ^2 = 1
что кошерно.
0
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
31.03.2014, 05:13  [ТС] 23
IrineK, только точность поменять и программа заработает правильно?

Добавлено через 2 минуты
IrineK, мне нужно, чтоб в программе выводило вектор который у вас КОРИЧНЕВЫМ ЦВЕТОМ
0
Заблокирован
31.03.2014, 06:37 24
Еще раз для тех, кто в определенных актуальных средствах передвижения:
Цитата Сообщение от IrineK Посмотреть сообщение
полученный сейчас (0,540055; 0,51953; 0,66214) соответствует с1 = 0,66214.
получите вектор, поделите каждый элемент на последний.

Цитата Сообщение от Alexandr1966 Посмотреть сообщение
мне нужно
Это требование препа или религии?

Добавлено через 27 минут
Продолжу.
Вычисление собственных матриц дает возможность найти собственные вектора.
Это не является просто мазохистским упражнением в рамках курса вышки.

Находит реальное практическое применение при повороте систем координат.
Т.е., необходимо для упрощения описания динамических систем в физике и компьютерной графике.

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

Если вы хотите вернуть его в ненормированное состояние (в принципе - нерабочее), вам нужно сделать операцию, описанную выше.
0
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
31.03.2014, 16:24  [ТС] 25
IrineK, Я не понимаю как код исправить, помогите исправить, преподаватель требует((((
0
Заблокирован
31.03.2014, 18:02 26
Лучший ответ Сообщение было отмечено IrineK как решение

Решение

Цитата Сообщение от Alexandr1966 Посмотреть сообщение
помогите исправить
Строка 50 заменяем на:
C++
1
std::cout  << " = " << w0norm[i]/w0norm [n-1] << std::endl;
Всё.
1
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
01.04.2014, 15:57  [ТС] 27
IrineK, спасибо вам огромное)))

Добавлено через 10 часов 7 минут
IrineK, а вот еще вопрос? в моем коде ИТТЕРАЦИОННЫЙ ПРОЦЕСС в этом методе есть???
0
Заблокирован
02.04.2014, 03:24 28
Итерационный процесс - строки 24-45 - достижение точности результата до 3 знака за конечное во шагов, то бишь итераций.
1
02.04.2014, 03:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2014, 03:24
Помогаю со студенческими работами здесь

Составить алгоритм и программу для перевода значения температуры, заданной в шкале Цельсия, в значения, соответствующие
Помогите пожалуйста) Составить алгоритм и программу для перевода значения температуры, заданной в...

Решение неоднородной системы, если известны собственные вектора и значения однородной системы
Можно ли решить неоднородной системы если известны собсвенные вектора и значения однородной системы?

Найти собственные значения и собственные векторы оператора дифференцирования в пространстве многочленов
Найти собственные значения и собственные векторы оператора дифференцирования в пространстве...

Найти собственные векторы и собственные значения линейного оператора, заданного матрицей A0
Найти собственные векторы и собственные значения линейного оператора, заданного матрицей A0. A0=...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru