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

Метод верхней релаксации для уравнения Пуассона - C++

Восстановить пароль Регистрация
 
nullpointer
 Аватар для nullpointer
45 / 45 / 5
Регистрация: 30.03.2009
Сообщений: 518
06.11.2013, 20:09     Метод верхней релаксации для уравнения Пуассона #1
Всем привет! Есть краевая задача для уравнения Пуассона в области, составленной из прямоугольников.
Метод верхней релаксации для уравнения Пуассона
Метод верхней релаксации для уравнения Пуассона
Функции psi_1,3,5(y) = sin(Pi*y), psi_2,4,6(x) = sin(Pi*x), f(x,y) = 1-x*x-y*y.
Параметры a = b = 2, c = d = 1.
Я так понимаю, область можно разбить на 2 прямоугольника и считать для каждого отдельно.
Т.е. получается матрица заполняется граничными условиями вот так?:
Метод верхней релаксации для уравнения Пуассона
Нигде не могу найти нормального описания метода верхней релаксации для данной задачи. Кто знает подскажите пожалуйста. Или ткните носом в гугль.
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
#define _USE_MATH_DEFINES
#include <iostream>
 
 
int const N = 8;
int const M = 8;
 
                                                            //          |
                                                            //          |
//прототипы                                                 //  ^      b|________
double psi_1(double);                                       //  |i      |        |
double psi_2(double);                                       //  |       |   I    |
double psi_3(double);                                       //          |        |
double psi_4(double);                                       //         d|_ _ _ _ |___________
double psi_5(double);                                       //          |        |           |
double psi_6(double);                                       //          |        |      II   |
double f(double);                                           //          |________|___________|________
                                                            //  ----->           c           a
                                                            //    j
double psi_1(double y){
    return sin(M_PI*y);
}
double psi_2(double x){
    return sin(M_PI*x);
}
double psi_3(double y){
    return sin(M_PI*y);
}
double psi_4(double x){
    return sin(M_PI*x);
}
double psi_5(double y){
    return sin(M_PI*y);
}
double psi_6(double x){
    return sin(M_PI*x);
}
double f(double x, double y){
    return (1 - x*x - y*y);
}
double x[N+1], y[M+1], U[N+1][M+1], u[N+1][M+1];
 
void PuassonPr(void)
{
    //Границы
    int n = N/2;
    int m = M/2;
    
    //I
    for(int j = 0; j <= n ; j++)
    {
        U[0][j] = psi_6(x[j]);
        U[M][j] = psi_4(x[j]);
    }
    for (int i = 0; i <= M; i++)
    {
        U[i][0] = psi_5(y[i]);
        U[i][n] = psi_3(y[i]);
    }
 
    //II
    for(int j = n; j <= N ; j++)
    {
        U[0][j] = psi_6(x[j]);
        U[m][j] = psi_2(x[j]);
    }
    for (int i = 0; i <= m; i++)
    {
        U[i][m] = psi_3(y[i]);
        U[i][N] = psi_3(y[i]);
    }
 
    for (int i = 0; i <= M; i++)
    {
        for (int j = 0; j <= N; j++)
        {
            printf("%.3f \t", U[i][j]);
        }
        std::cout << std::endl;
    }
}
 
int main(int argc, char* argv[]){
    double a = 2.0, d = 1.0;
    double b = 2.0, c = 1.0;
    double Hx = a / N;
    double Hy = b / M;
 
    std::cout.precision(3);
    
    for (int i = 0; i < N; i++)
    {
        x[i] = i*Hx;
    }
    
    for (int j = 0; j < M; j++)
    {
        y[j] = j*Hy;
    }
 
    PuassonPr();
    
    std::system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2013, 20:09     Метод верхней релаксации для уравнения Пуассона
Посмотрите здесь:

Решение нелинейного уравнения. Метод хорд и касательных C++
C++ Разработать алгоритм численного решения СЛАУ методом верхней релаксации
Метод Ньютона и итераций для нелинейного уравнения C++
C++ метод итераций для уравнения
C++ Метод итераций для развязывания нелинейного уравнения
C++ Алгоритм и код программы решения уравнения Пуассона методом матричной прогонки
Метод простых итераций для одного уравнения C++
Метод Конечных Разностей для уравнения в частных производных C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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