Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
#1

Степенной метод нахождения наибольшего по модулю собственного значения и соответствующего ему собственного вектора - C++

21.03.2014, 18:16. Просмотров 3175. Ответов 11
Метки нет (Все метки)

Привет всем. Есть код программы, но почему то он не работает, подскажите в чем дело, может ввожу неправильно.

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

http://www.cyberforum.ru/cpp-beginners/thread750228.html
Матрица А:
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
// ВМ6.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "math.h"
#include "conio.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);
}
Добавлено через 12 часов 47 минут
есть предложения?

Добавлено через 1 час 47 минут
кто-нибудь в курсе как исправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2014, 18:16
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Степенной метод нахождения наибольшего по модулю собственного значения и соответствующего ему собственного вектора (C++):

итератора для собственного вектора
помогите пожалуйста сделать итератор для вектора template &lt;class T&gt; class...

Класс vector (поля: координаты, 2 конструктора, метод нахождения длины вектора и метод вывода координат на экран)
Здравствуйте , помогите пожалуйста с заданием. Организовать класс Вектор на...

Написать программу нахождения наибольшего и наименьшего значения функции
Написать программу нахождения наибольшего и наименьшего значения функции...

Транслятор собственного языка
Собственно, во втором семестре нас ожидает курсовая работу, суть которой...

Создание собственного оператора С++
Как создать собственный оператор типа if, в смысле Оператор (){ ...//Какие-то...

11
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
23.03.2014, 09:28  [ТС] #2
ребята отзовитесь)
0
recoder
130 / 130 / 53
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
23.03.2014, 09:41 #3
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
#include <math.h>
#include <conio.h>
#include <stdio.h>
 
void Input(int n,int A[][100])
{
    int i,j;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++){
            printf("A[%d][%d]: ", i, 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);
    for (i=0;i<n;i++){
        for (j=0;j<n;j++)
            printf("%d ", A[i][j]);
        printf("\n");
    }
    printf("L = %f\n",d);   
}
 
int main()
{
    int n,A[100][100];
    printf("N = ");
    scanf("%d",&n);
    Input(n,A);
    Matr(A,n);
    getchar();
    getchar();
    return 0;
}
0
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
23.03.2014, 10:15  [ТС] #4
recoder, а можно еще в коде добавить вас попросить cout которые бы поясняли что где вводить например, cout << "Ввод матрицы А" и так далее
0
recoder
130 / 130 / 53
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
23.03.2014, 10:19 #5
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
#include <cmath>
#include <iostream>
 
void Input(int n,int A[][100])
{
    int i,j;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++){
            std::cout << "Enter 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;
    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);
    std::cout << "\nMatrix:\n";
    for (i=0;i<n;i++){
        for (j=0;j<n;j++)
            std::cout << A[i][j] << " ";
        std::cout << std::endl;
    }
    std::cout << "\nL = " << d << std::endl;  
}
 
int main()
{
    int n,A[100][100];
    std::cout << "Enter N = ";
    std::cin >> n;
    Input(n,A);
    Matr(A,n);
    
    std::cin.get();
    std::cin.get();
    return 0;
}
1
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
23.03.2014, 14:13  [ТС] #6
recoder, а почему я ввожу только матрицу A?
Где вот это реализовано:
Матрица x1:
0,8077c1
0,7720c1
c1

Добавлено через 3 минуты
И как здесь вообще работает алгоритм подсчета? можете прокомментировать?

Добавлено через 3 часа 43 минуты
recoder, подскажи а
0
recoder
130 / 130 / 53
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
23.03.2014, 14:22 #7
У вас есть задание? Не могли бы вы его полностью написать сюда.
0
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
23.03.2014, 14:46  [ТС] #8
recoder, Степенной метод нахождения наибольшего по модулю собственного значения и соответствующего ему собственного вектора, написать программу на с++.

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

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

Матрица x1:
0,8077c1
0,7720c1
c1

Ответ:
L1=8,3874
0
recoder
130 / 130 / 53
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
23.03.2014, 15:10 #9
Как-то так!
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
#include <cmath>
#include <iostream>
 
void Input(int n,int A[][100])
{
    int i,j;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++){
            std::cout << "Enter 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 << "\nMatrix:\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];
    std::cout << "Enter N = ";
    std::cin >> n;
    Input(n,A);
    Matr(A,n);
    
    std::cin.get();
    std::cin.get();
    return 0;
}
0
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
23.03.2014, 16:00  [ТС] #10
recoder,
Матрица x1:
0,8077c1
0,7720c1
c1
вот это где в кодеее???!?!
0
recoder
130 / 130 / 53
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
23.03.2014, 16:19 #11
Цитата Сообщение от recoder Посмотреть сообщение
w0norm[100]
Судя по всему это вот это.
0
Alexandr1966
28 / 28 / 2
Регистрация: 17.12.2012
Сообщений: 487
24.03.2014, 16:32  [ТС] #12
recoder, то есть эта матрица X сама по себе считается?

Добавлено через 22 часа 21 минуту
есть у кого нибудь соображения на этот счет?
0
24.03.2014, 16:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2014, 16:32
Привет! Вот еще темы с решениями:

Написание собственного контейнера
Доброго времени суток ! Помогите написать собственный контейнер, основанный...

Создание собственного класса
Создать класс для работы со стеком, организованным как связный однонаправленный...

Использование собственного функтора со связывателями
Не могу правильно написать функтор, чтобы его можно было использовать с биндом....

Подключение собственного заголовочного файла
В общем есть файл с исходный кодом, который содержит main(). Здесь же подключаю...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru