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

Метод Холецкого - C++

Восстановить пароль Регистрация
 
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
02.03.2014, 16:38     Метод Холецкого #1
Здравствуйте.Помогите,пожалуйста.Есть блок-схема,с которой всё переписано,но программа почему-то работает неверно.Выдаёт слишком большие корни.Порядок матрицы: 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
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
#include<iostream>
#include<math.h>
using namespace std;
int main (void)
{
    double a[6][6],b[6],x[6],y[6],delta,delta2=0,delta3=0,del2,del3,delta4=0,del4,s[6][6],d[6],H;
    int i,j,n,k;
    cout<<"vvedite poryadok matrici";
    cin>>n;
    n=n+1;
    a[1][1]=-4.88; a[1][2]=1;  a[1][3]=0;a[1][4]=0; a[1][5]=0;
    a[2][1]=1;     a[2][2]=-2; a[2][3]=1; a[2][4]=0;a[2][5]=0;
    a[3][1]=0;     a[3][2]=1;  a[3][3]=-2;a[3][4]=1; a[3][5]=0;
    a[4][1]=0;      a[4][2]=0;  a[4][3]=1; a[4][4]=-2;a[4][5]=1;
    a[5][1]=0;      a[5][2]=0;  a[5][3]=0; a[5][4]=1; a[5][5]=-4.88;
    b[1]=0;b[2]=-8;b[3]=-8;b[4]=-8;b[5]=0;
    for(k=1;k<n;k++)//нахождение элементов S и d;
    {
        for(i=1;i<k-1;i++)
        {
            del2=d[i]*pow(fabs(s[i][k]),2);
            delta2=delta2+del2;
        }
        if((a[k][k]-delta2)>0)
            d[k]=1;
            if((a[k][k]-delta2)<0)
                d[k]=-1;
                s[k][k]=pow(fabs(a[k][k]-delta2),1/2);
                for(j=k+1;j<n;j++)
                {
                    for(i=1;i<k-1;i++)
                    {
                        del4=d[i]*s[i][k]*s[i][j];
                        delta4=delta4+del4;
                    }
                    s[k][j]=(a[k][j]-delta4)/(s[k][k]*d[k]);
                }
    }
    for(k=1;k<n;k++)
    {
        delta=a[k][k];
        if(k!=1)
        {
            for(i=1;i<k-1;i++)
            {
                delta=delta-d[i]*pow(s[i][k],2);
            }
        }
        if(delta>0)
        d[k]=1;
        if(delta<0)
            d[k]=-1;
            s[k][k]=pow(fabs(delta),1/2);
                for(j=k+1;j<n;j++)
                {
                    delta=a[k][j];
                    if(k!=1)
                    {
                        for(i=1;i<k-1;i++)
                        {
                            delta=delta-d[i]*s[i][k]*s[i][j];
                        }
                    }
                    s[k][j]=delta/(s[k][k]*d[k]);
                }
    }
    y[1]=b[1]/(s[1][1]*d[1]);
    for(i=2;i<n;i++)
    {
        delta=b[i];
        for(k=1;k<i-1;k++)
        {
            delta=delta-d[k]*y[k]*s[k][i];
        }
        y[i]=delta/(s[i][i]*d[i]);
    }
    x[n-1]=y[n-1]/s[n-1][n-1];
    for(i=n-2;i>=1;i--)
    {
        delta=y[i];
        for(k=i+1;k<n;k++)
        {
            delta=delta-x[k]*s[i][k];
        }
        x[i]=delta/s[i][i];
    }
    cout<<endl;
    for(i=1;i<n;i++)
    {
        cout<<x[i];
        cout<<endl;
    }
    cout<<"nevyazka";
     for(i=1;i<n;i++)
                  {
                      double z=0;
                        for(int j=1;j<n;j++)
                        {
                        z=z+(a[i][j]*x[j]);
                        }
                            H=fabs(b[i]-z);
                            cout<<endl;
                             cout<<"Nevyazka"<<H;
     }
    system("pause");
    return(0);
}
Блок-схема и формулы массиво:
Вложения
Тип файла: docx Блок схема и массивы d и s.docx (35.5 Кб, 41 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2014, 16:38     Метод Холецкого
Посмотрите здесь:

C++ Метод итераций и метод Зейделя
Уровнения по Методу Холецкого C++
Метод дихотомии (как метод оптимизации) C++
C++ Метод Холецкого для решения Слау
Разложение Холецкого и решение СЛАУ на его основе C++
Метод Холецкого C++
C++ Метод оптимизации. Метод Фибоначчи
C++ СЛУ методом LDLT разложения Холецкого

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 02:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru