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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
klaxor
0 / 0 / 1
Регистрация: 21.11.2009
Сообщений: 25
#1

Метод LU-факторизации - C++

19.03.2010, 01:48. Просмотров 2454. Ответов 2
Метки нет (Все метки)

Вобщем дали задание написать алгоритм LU.Классы еще не изучали.Возможно ли написать алгоритм LU без классов?
Задание вообще очень объемное нужно написать Такую программу которая прнимает значения размерности матрицы с клавы и чтобы можно было задавать коэффициенты опять таки с клавы.(Все это сделал)
Проблема в создании алгоритма решения.(сам алгоритм ясен).Непойму как представить один элемент матрицы как элемент массива?или может как структуру?Хороших исходников в интернете не нашел.Может у кого завалялось на винте выложите пжл.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2010, 01:48     Метод LU-факторизации
Посмотрите здесь:

метод Гаусса C++
C++ Метод Якоби
C++ метод бисекции C++
C++ Метод Ньютона
Метод Крамера C++
C++ Библиотека для работы с большими числами, возможность факторизации
C++ метод QR разложекния
C++ Метод итераций
Метод Симпсона C++
Метод факторизации Уильямса (P+1) C++
Метод прямоугольников C++
C++ Метод итераций

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
19.03.2010, 02:20     Метод LU-факторизации #2
Если я понял правильно то вам нежен LU метод решения СЛАУ..
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 <iostream>
 
void LUDecRes(double **A, int Row, int Col, double *B, double *res){
    int row = Row;
    int col = Col + 1;
 
    double **L, **U, **Ar;
 
    L   = new double*[row];
    U   = new double*[row];
    Ar  = new double*[row];
 
    for(int i = 0; i < row; ++i){
        L[i]    = new double[row];
        U[i]    = new double[col];
        Ar[i]   = new double[col];
 
        for(int j = 0; j < row; ++j)
            Ar[i][j] = A[i][j];
        Ar[i][col - 1] = B[i];
    }
 
    for(int i = 0; i < row; ++i){
        U[i][i] = 1;
        L[i][i] = 0;
 
        L[i][0] = Ar[i][0];
        U[0][i + 1] = Ar[0][i + 1] / L[0][0];
    }
 
    for(int i = 1; i < row; ++i){
        for(int j = i; j < row; ++j){
            double sum = 0;
 
            for(int c = 0; c < i; ++c)
                sum += L[j][c]*U[c][i];
            L[j][i] = Ar[j][i] - sum;
 
            sum = 0;
 
            for(int c = 0; c < i; ++c)
                sum += L[i][c]*U[c][j + 1];
            U[i][j + 1] = ( Ar[i][j + 1] - sum ) / L[i][i];
        }
    }
 
    for(int i = row - 2; i >= 0; --i){
        double sum = 0;
        for(int c = i + 1; c < row; ++c)
            sum += U[i][c]*U[c][row];
        U[i][row] -= sum;
    }
 
    for(int i = 0; i < row; ++i)
        res[i] = U[i][row];
 
    for(int i = 0; i < row; ++i){
        delete[] L[i];
        delete[] U[i];
        delete[] Ar[i];
    }
 
    delete[] L;
    delete[] U;
    delete[] Ar;
}
 
int main(){
 
    double arr_v[3] = {7, 4, 6};
    double arr_m[3][3] = 
    {
        {10,-7, 0},
        {-3, 2, 6},
        { 5,-2, 5}
    };
 
    double *arrV, *res, **arrM;
 
    arrV    = new double[3];
    res     = new double[3];
    arrM    = new double*[3];
 
    for(int i = 0; i < 3; ++i){
        arrM[i] = new double[3];
        arrV[i] = arr_v[i];
        for(int j = 0; j < 3; ++j)
            arrM[i][j] = arr_m[i][j];
    }
 
    LUDecRes(arrM, 3, 3, arrV, res);
    std::cout << "``Result`` : ";
 
    for(int i = 0; i < 3; ++i)
        std::cout << res[i] << ' ';
 
    std::cout << std::endl;
 
    for(int i = 0; i < 3; ++i)
        delete[] arrM[i];
 
 
    delete[] arrM;
    delete[] arrV;
    delete[] res;
 
    return 0;
}
http://codepad.org/55uflV29
klaxor
0 / 0 / 1
Регистрация: 21.11.2009
Сообщений: 25
19.03.2010, 13:01  [ТС]     Метод LU-факторизации #3
Да программа работает на ура,но есть одно но.Она работает только с заранее известными матрицами(размерность).Нужно так чтоб вводить размерность матрицы с клавиатуры.
Yandex
Объявления
19.03.2010, 13:01     Метод LU-факторизации
Ответ Создать тему
Опции темы

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