Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Метод факторизации Уильямса (P+1) - C++
Реализовать Метод факторизации Уильямса (P+1)

Библиотека для работы с большими числами, возможность факторизации - C++
Привет всем! Какие библиотеки можете посоветовать для работы с большими числами, с возможностью их факторизации. Хотелось бы иметь...

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

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

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

Исследовать итерационный метод- метод касательных для решения нелинейных уравнений - C++
прочитал много всего , но сам пример реализовать никак не могу , кто может помогите F(x) = x5+5x+1=0 с...

2
ISergey
Maniac
Эксперт С++
1397 / 908 / 56
Регистрация: 02.01.2009
Сообщений: 2,714
Записей в блоге: 1
19.03.2010, 02:20 #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
1
klaxor
0 / 0 / 1
Регистрация: 21.11.2009
Сообщений: 25
19.03.2010, 13:01  [ТС] #3
Да программа работает на ура,но есть одно но.Она работает только с заранее известными матрицами(размерность).Нужно так чтоб вводить размерность матрицы с клавиатуры.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2010, 13:01
Привет! Вот еще темы с ответами:

Не сходится теория и практика метод Шелла и метод простого выбора - C++
Здравствуйте! Помогите пожулуйста найти ошибке в коде, Я уже не знаю где ее искать. У меня метод простого выбора работает по показателям...

Нахождения корней уравнения: метод половинного деления (бисекции) или метод хорд - C++
Разработать программу нахождения корней уравнения f(x) =0 на интервале с точностью e = 0,001 (интервал или подобрать самостоятельно). При...

Метод деления отрезка пополам для решения нелинейных уравнений (метод дихотомии) - C++
Здравствуйте. Помогите пожалуйста дописать программу. Вот что вымучал, но на сдаче завалили, типо нет вывода корней, не рассмотрены...

Производный класс: метод возведения в произвольную степень, и метод для вычисления логарифма числа - C++
Реализовать класс-оболочку Number для числового типа float. Реализовать методы сложения и деления. Создать производный класс Real, в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru