Форум программистов, компьютерный форум, киберфорум
Qazan
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Метод релаксаций

Запись от Qazan размещена 23.05.2014 в 15:34
Показов 1993 Комментарии 0

Метод релаксаций .
Математическая запись :
https://www.cyberforum.ru/cgi-bin/latex.cgi?  x^{(k+1)}_i  = (1-\omega)x^{(k)}_i + \frac{\omega}{a_{ii}} \left(b_i - \sum_{j<i} a_{ij}x^{(k+1)}_j - \sum_{j>i} a_{ij}x^{(k)}_j \right),\quad i=1,2,\ldots,n. <br />

В методе имеется параметр https://www.cyberforum.ru/cgi-bin/latex.cgi?\omega, при чем при некоторых значениях метол носит (почти)разные наименования
А именно :

https://www.cyberforum.ru/cgi-bin/latex.cgi?\omega = 1 - Метод Гаусса-Зейделя (Gauss-Seidel Iteration)
https://www.cyberforum.ru/cgi-bin/latex.cgi?\omega \in [0..1] - Метод нижних релаксаций ( Successive Under Relaxation,SUR)
https://www.cyberforum.ru/cgi-bin/latex.cgi?\omega \in [1..2] - Метод верхних релаксаций ( Successive Over Relaxation,SOR)

Об остальном лучше написано тут : Successive_over-relaxation и тут : Successive_over-relaxation

Реализация на с++:

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
void SUR(double **a,int n,double w,double *f,double *x_app/*,double eps*/)
{
/*  for(int i = 0;i < n;i++)
    {
        x_app[i] = 0;
    }*/
    //-------------------------------------------
    double * fut = new double[n];
    //-------------------------------------------
    for(int i = 0;i < n;i++)
    {
        fut[i] = x_app[i];
    }
    //-------------------------------------------
 
    bool stop = true;
    for(int k = 0;stop;k++)
    {
        for(int i = 0;i < n;i++)
        {
            double s = 0;
            for(int j = 0;j < i;j++)
            {
                s += a[i][j]*fut[j];
            }
 
            for(int j = i + 1;j < n;j++)
            {
                s += a[i][j]*x_app[j];
            }
 
            double t = 1./a[i][i];
            fut[i] = (1. - w)*x_app[i] + w*t*(f[i] - s);
        }
 
        double temp = fabs(fut[0] - x_app[0]);
 
        for(int i = 1;i < n;i++)
        {
             if(fabs(fut[i] - x_app[i]) > temp) temp = fabs(fut[i] - x_app[i]); 
        }
 
        if(temp < eps)
        {
            stop = false;
        }
 
        for(int i = 0;i <n;i++)
        {
            x_app[i] = fut[i];
        }
        //Сюда следует добавить условие останова
 
        std::cout << std::endl;
    }   
}
// x_app - первое приближение
// f - правая часть
// w - параметр
// a - Основная матрица СЛАУ
PS : Метод применим для матриц с Диагональным преобладанием
Размещено в Численные методы
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru