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

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

Войти
Регистрация
Восстановить пароль
 
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 522
#1

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

06.11.2013, 20:09. Просмотров 1137. Ответов 0
Метки нет (Все метки)

Всем привет! Есть краевая задача для уравнения Пуассона в области, составленной из прямоугольников.
Метод верхней релаксации для уравнения Пуассона
Метод верхней релаксации для уравнения Пуассона
Функции 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++
Помогите пожалуйста курсач горит (:ireful: Разработать алгоритм численного решения cистема линейных алгебраических уравнений методом...

Алгоритм и код программы решения уравнения Пуассона методом матричной прогонки - C++
Объясните, пожалуйста алгоритм и код на Си++ задачи: ∂2P/∂x2+∂2P/∂y2=-f(x,y)

Метод итераций для уравнения - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; double e=2.7; double q=0; int gr1=-100, gr2=0; double al; double f...

Метод итераций для развязывания нелинейного уравнения - C++
- развязать заданое уравнение с точностью е = е (i – 1) / 10^(-3), і = 1, 2, ..., 4; e0 = 0.01 методом итераций. Прикинул немного,но...

Метод Ньютона и итераций для нелинейного уравнения - C++
Всем доброго времени суток) Помогите реализовать программу на С++ решающую уравнение 2x-2*x2-1=0 методом итерации и методом Ньютона: ...

Метод простых итераций для одного уравнения - C++
arccos(x) - sqrt(1-0.3x^3) = 0 Отрезок от +приближенное значение корня 0.5629 Для метода итераций получается, что ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2013, 20:09
Привет! Вот еще темы с ответами:

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

Метод Эйлера: численное решение начальных задач для дифференциального уравнения - C++ - C++
Численно решить начальные задачи для дифференциального уравнения: (Знак системы) y'=-y+exp(x) (Знак системы) y(0)=0 Найдите...

Метод Эйлера: численное решение начальных задач для дифференциального уравнения - C++
Численно решить начальные задачи для дифференциального уравнения: (Знак системы) y'=-y+exp(x) (Знак системы) y(0)=0 Найдите...

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


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

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

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