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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести двоичный код в массив в заданном формате http://www.cyberforum.ru/cpp-beginners/thread1163987.html
Необходимо вывести двоичный код в массив в таком формате 1 10 11 100 101 и т.д. до N-ого раза я пытался решить это 3 способами 1. алгоритмом, но неудачно 2. выводом двоичного кода с нулями слева
C++ Алгоритм Данцига Помогите пожалуйста может у кого есть код алгоритма Данцига. В википедии почитал вроде пару строчек но ничего не выходит. Вот что получилось void Danzig(int Adj, int& n) { int temp; for (int i=0; i<n; i++) for (int j=0; j<n; j++) temp=Adj; http://www.cyberforum.ru/cpp-beginners/thread1163981.html
C++ Поиск, замена, удаление в текстовом файле
Добрый день. У меня есть текстовый файл с информацией(типа: № Имя Фамилия). Как можно осуществить поиск по номеру записи и вывод ее в StringGrid? Как затем осуществить сохранение изменений именно этой записи? И как удалить запись из файла что бы порядок нумерации не сбилась ( т.е. если я удалю 18 запись что бы последующие записи снизили номер на 1)?
C++ Графика в DOS. Анимация
Здравствуйте, прошу помочь, вот задание: Написать программу градуированы сосудов для отмеривания воды. Имеются не отградуированные сосуды 5-ти и 3-х литровый. Нужно отмерить четыре литра жидкости. Предполагается что есть очень большой резервуар с жидкостью. Процесс градуировки оформить в виде функции. я это нарисовал, а как сделать анимацию не пойму, и примера не где не нашел. Не могли бы вы...
C++ Указатели.Строки и указатели http://www.cyberforum.ru/cpp-beginners/thread1163967.html
Вот условия ввода строки:Вводить и обрабатывать строки в цикле до тех пор пока первый символ не пробел Условия обработки строки: 1.Вычислить кол-во гласных букв в строке(только с помощью указателей) 2.Если длина строки больше заданного пользователем числа, то отбросить первые символы, если длина строки меньше этого числа, то в ее начало добавить символы точка(только с помощью указателей) ...
C++ Змейка не увеличивается в размерах Почти дописал змейку, но есть проблема: 1) когда змейка съедает яблоко, размер не меняется. 2) Когда змейка съедает 3 яблоко, программа аварийно завершается, return value=323213...ну вы поняли Особенность: когда змейка съедает первое яблоко, пропадает координата основного поля 0,0, когда второе - 3,0. Скорее всего проблема в MainMove, в строке со свапом значений координат. Не знаю как... подробнее

Показать сообщение отдельно
untoter
0 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 6

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

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

Здравствуйте. Собственно необходимо реализовать данный алгоритм. Делал по этому сайту https://people.fh-landshut.de/~maure...1.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);
    
        
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru