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

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

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

C++ Метод итераций и метод Зейделя
Метод дихотомии (как метод оптимизации) C++
C++ Библиотека для работы с большими числами, возможность факторизации
метод деления отрезка пополам и метод итерации C++
Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную C++
Метод факторизации Уильямса (P+1) C++
C++ Метод оптимизации. Метод Фибоначчи
C++ Как передать в метод класса Menu указатель на метод дочернего класса?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 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-факторизации
Ответ Создать тему
Опции темы

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