Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/89: Рейтинг темы: голосов - 89, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 23
1

Метод Холецкого

28.11.2012, 00:37. Показов 18489. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача:
Решить СЛАУ с помощью метода холецкого (квадратного корня). Вывести значение y и вектора невязки r
Ay=f - СЛАУ
r=Ay-f
Метод основан на представлении положительно определенной симметричной матрицы А в виде A=L*LT
, где L — нижняя треугольная матрица с положительными действительными элементами на диагонали
Работаю в Eclipse. Написал код, но не могу понять где ошибка. вроде все по алгориму. Помогите пожалуйста исправить или выложите какой-нибудь иной способ (код)
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
109
110
111
112
113
114
115
116
#include <iostream.h>
#include <fstream.h>
#include <math.h>
using namespace std;
 
int main()
{
int n=10;
int i,j,k,m;
float A[n][n],L[n][n],T[n][n];
float g[n],r[n],v[n],y[n],pk,sum;
 
m=n;
//открываем поток для работы с файлами
ifstream f("input.txt",ios::in);
//считываем из потока m
//f >> m;
//cout << " m = "<< m << "\n" ;
//считываем из потока матрицу и вектор g
    for(i = 0; i < m; i++)
    {
        for(j = 0; j < m; j++)
        {
        f >> A[i][j];
        cout << A[i][j]<<" ";
        }
        cout << "\n";
    }
    for(i = 0; i < m; i++)
    {
        f >> g[i];
        cout << g[i]<<" ";
    }
f.close(); // закрываем поток, т.к. все что нам надо мы считали
 
    for (i=0; i<m; i++)
        for (j=0; j<m; j++)
            L[i][j]=0;
 
//Нахождение матрицы L и T соответственно
    L[0][0]=sqrt(A[0][0]);
    for (j=1; j< m; j++)
        L[j][0]=A[j][0]/L[0][0];
 
    for (i = 1;i < m; i++)
    {
        sum=0;
        for (k = 0; k < i; k++ )
            sum=sum + L[i][k]*L[i][k]; //можно pow(L[i][j],2)
        pk=A[i][i]-sum;
        L[i][i]=sqrt(pk);
 
        for (j=i+1; j < m ; j++ )
        {
            sum=0;
            for (k = 0; k < i; k++)
                sum=sum + L[j][k]*L[i][k];
            pk=A[j][i]-sum;
            L[j][i]=pk/L[i][i];
        }
    }
 
    for (i=0; i<m; i++)
        for (j=0; j<m ; j++)
            T[i][j]=L[j][i];
 
//Решение L*v=g
    v[0]=g[0]/L[0][0];
    for (i=1; i<m; i++)
    {
        sum=0;
        for (k=0; k<i; k++)
            sum=sum+L[i][k]*v[k];
        pk=g[i]-sum;
        v[i]=pk/L[i][i];
    }
 
//Решение T*y=v
    y[m-1]=v[m-1]/T[m-1][m-1];
    for (i=m-2; i>=0; i--)
    {
        sum=0;
        for (k=i+1; k<m; k++)
            sum=sum+T[i][k]*y[k];
        pk=v[i]-sum;
        y[i]=pk/T[i][i];
    }
 
// Нахождение вектора невязки r
    for (i=0; i<m; i++)
    {
        r[i]=0;
        for (j=0; j < m; j++)
            r[i]=r[i]+A[i][j]*y[i];
        r[i]=r[i]-g[i];
    }
 
    cout << "\n";
    for (i=0; i<m ; i++)
    cout << y[i]<< " ";
    cout << "\n";
    for (i=0; i<m ; i++)
    cout << r[i]<< " ";
 
/*открываем поток для записи в файл
    ofstream f1("output.txt",ios::out);
    for (i=0; i<m ; i++)
    f1 << y[i];
    f1 << "\n";
    for (i=0; i<m ; i++)
    f1 << r[i];
    f1.close();
 
*/
    return 0;
}
Добавлено через 2 часа 15 минут
Закройте тему плиз, нашел ошибку)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.11.2012, 00:37
Ответы с готовыми решениями:

Метод Холецкого для решения Слау
Ты не мог бы выложить программу?

Уровнения по Методу Холецкого
помогите решить систему линейных уровнений по схеме Холецкого в общем виде...Если можно с...

СЛУ методом LDLT разложения Холецкого
Решить СЛУ методом LDLT разложения Холецкого. помогите пожалуйста разработать данный алгоритм.

Разложение Холецкого для решения СЛАУ
Здравствуйте помогите пожалуйста создать программу на с++ которая решает СЛАУ методом разложении...

3
Эксперт С++
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
28.11.2012, 02:33 2
Нашёл — выложи исправленный код Или хотя бы укажи, где ошибка.
P.S. Мне не надо.
0
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 23
28.11.2012, 03:09  [ТС] 3
Цитата Сообщение от williamvolkov Посмотреть сообщение
// Нахождение вектора невязки r
* * for (i=0; i<m; i++)
* * {
* * * * r[i]=0;
* * * * for (j=0; j < m; j++)
* * * * * * r[i]=r[i]+A[i][j]*y[i];
* * * * r[i]=r[i]-g[i];
вот тут была ошибка . надо y[j] а не y[i].
0
Прощай, Мир!
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
13.05.2013, 01:42 4
неа. ошибк? есть на начальном этапе. например, будет выход за границы массива при попытке преобразования элемента правее самого правого нижнего. надо это предусмотреть..

C++
1
2
3
4
5
6
7
8
9
10
11
12
if(i!=m-1)
        {
                for(int j=i+1;j<m;j++)
                {
                sum=0;
                for(int k=0;k<i;k++)
                {
                    sum+=u[k][j]*u[k][i];
                }
                u[i][j]=(a[i][j]-sum)/u[i][i];
                }
        }
да, и еще почему ты ориентируешься на столбцы, а не на строки. хотя матрица симметричная..
0
13.05.2013, 01:42
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.05.2013, 01:42
Помогаю со студенческими работами здесь

Разложение Холецкого и решение СЛАУ на его основе
спасайте люди добрые... признаюсь сразу, я пень-пнём в С++. Мне задан курсовик &quot;Разложение...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя)
Здравствуйте! Дали весьма интересное задание. Сравнить два вышеуказанных метода сортировки для...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как использовать комментарии в JSON
InfoMaster 18.01.2025
JSON (JavaScript Object Notation) представляет собой легкий и широко используемый формат обмена данными, который стал стандартом де-факто для веб-приложений и программных интерфейсов. При работе с. . .
Как заставить git pull перезаписать локальные файлы в Git
InfoMaster 18.01.2025
Проблема перезаписи локальных файлов в Git При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо синхронизировать локальный репозиторий с. . .
Что значит оператор --> в C++ и для чего он нужен
InfoMaster 18.01.2025
В языке программирования C++ оператор -> (стрелка) является одним из фундаментальных элементов синтаксиса, обеспечивающим удобный доступ к членам структур и классов через указатели. Этот оператор был. . .
Как отменить git add до коммита в Git
InfoMaster 18.01.2025
В современной разработке программного обеспечения система контроля версий Git играет ключевую роль в управлении изменениями кода. Одной из наиболее частых операций, с которой сталкиваются. . .
Какой MIME-тип JSON указывать и когда
InfoMaster 18.01.2025
В современном мире веб-разработки формат JSON (JavaScript Object Notation) стал неотъемлемой частью обмена данными между клиентом и сервером. Этот легковесный формат хранения и передачи данных. . .
Как переименовать ветку (branch) в Git
InfoMaster 18.01.2025
Одним из важнейших аспектов работы с Git является правильное управление ветками, которые позволяют разработчикам эффективно организовывать процесс разработки и тестирования новых функций. Особое. . .
Как удалить определенный элемент из массива в JavaScript
InfoMaster 18.01.2025
В современной веб-разработке массивы являются одной из ключевых структур данных, с которыми приходится работать разработчикам JavaScript. Операция удаления элементов из массива представляет собой. . .
Что такое yield в Python и как это работает
InfoMaster 18.01.2025
Концепция генераторов и yield в Python В мире программирования на Python существуют мощные инструменты для эффективной работы с последовательностями данных, и одним из таких инструментов является. . .
В чем разница между git pull и git fetch в Git
InfoMaster 18.01.2025
Работая в командах разработчиков, специалисты постоянно сталкиваются с необходимостью синхронизации локальных репозиториев Git с удаленными серверами. Две команды - git fetch и git pull -. . .
Как удалить ветку (branch) в Git в локальном и удалённом репозитории
InfoMaster 18.01.2025
Ветка в Git представляет собой легковесный указатель на определенный коммит в истории разработки. Когда разработчики создают новую ветку, они получают возможность вносить изменения в код, не. . .
Почему обработка сортированного массива быстрее, чем несортированног­­о
InfoMaster 18.01.2025
Влияние сортировки массивов на скорость обработки данных При разработке программного обеспечения оптимизация производительности играет ключевую роль в создании эффективных приложений. Одним из. . .
Зачем нужны свойства в классе, если есть поля
InfoMaster 18.01.2025
Понятие свойств и полей в классах В современном объектно-ориентированном программировании поля и свойства являются фундаментальными элементами классов, которые обеспечивают хранение и управление. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru