Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
untoter
0 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 6
#1

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

02.05.2014, 13:38. Просмотров 339. Ответов 0
Метки нет (Все метки)

Здравствуйте. Собственно необходимо реализовать данный алгоритм. Делал по этому сайту https://people.fh-landshut.de/~maurer/numeth/node91.html#GBNDMIN .Считать, считает, но не то, что нужно. Собственные значения должны получиться 0, 2, 6, а получается 2, 5, 8. Помогите пожалуйста найти ошибку.
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
 
int main()
{
/* 2 2 0
   2 4 2
   0 2 2
*/
    double A[3] = { 2, 4, 2}; //главная диагональ
    double B[4] = {0, 2, 2, 0}; //поддиагональ
    double ek=0;
    double e = 0.01;
    double s = 0;
    double l = 3;              //номер собственного значения
    int p=0;                   //количество отрицательных L
    //Mmin
    double M[3];
    for (int k = 0; k < 3; ++k){
        M[k] = A[k] - fabs(B[k]) - fabs(B[k + 1]);
        cout << "M:";
        cout << M[k] << endl;
    }
    double Mmin = M[0];
    for (int k = 0; k < 3; ++k) {
        if (M[k] < Mmin) {
            Mmin = M[k];
        }
    }
    cout <<"Min:"<< Mmin << endl;
 
    //Mmax
    double N[3];
    for (int k = 0; k < 3; ++k){
        N[k] = A[k] + fabs(B[k]) + fabs(B[k + 1]);
        cout << "N:";
        cout << N[k] << endl;
    }
    double Mmax = N[0];
    for (int k = 0; k < 3; ++k) {
        if (N[k] > Mmax) {
            Mmax = N[k];
        }
    }
    cout <<"Max:"<< Mmax << endl;
 
 
 
    if (fabs(Mmax) > fabs(Mmin)){
        ek = e*fabs(Mmax);
    }
    else {
        ek = e*fabs(Mmin);
    }
 
    cout << "ek=" << ek << endl;
 
    do{
        s = (Mmin + Mmax) / 2;
        cout << "s=" << s << endl;
 
        double D[3];
        D[0] = A[0] - s;
        cout << D[0] << endl;
        for (int k = 1; k < 3; ++k){
 
            D[k] = A[k] - s - (B[k] * B[k]) / D[k - 1];
            cout << "D[k]:" << D[k] << endl;
            
        }
        
        double L[2];
        L[0] = B[1] / D[0];
        L[1] = B[2] / D[1];
        cout << "L[0]=" << L[0] << endl;
        cout << "L[1]=" << L[1] << endl;
        /*for (int t = 1; t < 3; ++t){
            L[t*(t-1)] = B[t] / D[t-1];
            cout << "L[k]:" << L[t] << endl;
        }*/
        for (int k = 0; k < 2; ++k){
            if (L[k] < 0){
                p++;
            }
        }
        cout << "p=" << p << endl;
 
        if (p < l){
            Mmin = s;
        p = 0;
            cout << "New Mmin=" << Mmin << endl;
        }
        else{
            Mmax = s;
            p = 0;
            cout << "New Mmax=" << Mmax << endl;
 
        }
        cout << "lambda="<<(Mmin+Mmax)/2 << endl;
        
    } while (fabs(Mmax - Mmin)>ek);
    
        
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2014, 13:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод бисекции поиска собственных значений матрицы (C++):

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

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

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

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

Вычисление собственных значений и собственных векторов матрицы - C++
Доброго времени суток всем. Собственно написал программу, реализует степенной метод. Проблема в округлении. 1 итерация- вычисление...

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2014, 13:38
Привет! Вот еще темы с ответами:

Мой код - метод бисекции, метод секущих (метод хорд) - C++
Всем привет!!! Изучаем в институте С++. Сделал код, и там, и там одна и та же проблема - при любых вбиваемых значениях программа делает...

Нахождения корней уравнения: метод половинного деления (бисекции) или метод хорд - C++
Разработать программу нахождения корней уравнения f(x) =0 на интервале с точностью e = 0,001 (интервал или подобрать самостоятельно). При...

Метод бисекции - C++
Код: #include &lt;iostream.h&gt; #include &lt;float.h&gt; #include &lt;cmath&gt; #include &lt;float.h&gt; #include &lt;iomanip.h&gt; float f(float x) { ...

C++ метод бисекции - C++
Добрый день, помогите пожалуйста в решении задачи. fmin(x), f(x) = x^3 – 3 sinx,


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

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

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