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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Бонусы http://www.cyberforum.ru/cpp-beginners/thread999927.html
Учу Дерект 3Д Пишу простую игру. Вот отрезок из кода. for (int index = 0; index < nbonus; index++) { if (all_bonus_is_eten == false) { if (bonus_y + 15 < user_y || bonus_y - 15 > user_y ||
C++ Упорядочить массив Х(N) по возрастанию, найти сумму положительных элементов массива Помогите пожалуйста сделать. Упорядочить массив Х(N) по возрастанию, найти сумму положительных элементов массива. http://www.cyberforum.ru/cpp-beginners/thread999918.html
Вхождение точки в область C++
Определить, попадает ли точка с координатами (X,Y) в заданную область. Код: #include <stdio.h> #include <conio.h> #include <math.h> void main() {
C++ Перегрузка "оператора +" для сложения массива объектов
Как перегрузить правильно оператор+ в данном случае или так делать нельзя? Ещё как-то туда надо передать размеры этого массива... и как записать result.(*b)=*(b+i)+input.*(b+i); не понимаю) #include <iostream> #include "Test.h" #include <cstdlib> using namespace std; Test::Test(int x, int y) {
C++ Использование классов http://www.cyberforum.ru/cpp-beginners/thread999884.html
Не хочет запускаться, помогите найти ошибку #include <iostream> #define N 5 using namespace std; class electronic_store { char item; int price; int number; int section;
C++ Нужны советы как реализовать сложение, вычитание, умножение полиномов/многочленов и деление на число Всем здравствуйте! надеюсь написать с вашей помощью программку для сложения, вычитания и умножения полиномов, а также деления на число. необходимо использовать классы. тут я задумалась, порылась на форумах, но реализация подобных программ просто вводила меня в ужас. неужели так сложно? во-первых, я хочу разобраться с cpp файлом, где реализованы конструктор и деструктор. читала, что нужно... подробнее

Показать сообщение отдельно
nullpointer
45 / 45 / 5
Регистрация: 30.03.2009
Сообщений: 518

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

06.11.2013, 20:09. Просмотров 1097. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru