![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
Kostik88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 9.5.2008 Репутация: 2 Всего: 2 |
Здравствуйте!
сталкнулся с такой проблемой: Есть конечно разностное уравнение вида (h[i+1][j]^3)*P[i+1][j] - ( h[i+1][j] ^3 + h[i-1][j] ^3 + h[i][j+1] ^3 + h[i][j-1] ^3)*P[i][j] + (h[i-1][j] ^3)*P[i-1][j] + (h[i][j+1] ^3)*P[i][j+1] + (h[i][j-1]^3)*P[i][j-1] = A*b*(h[i+1][j] + h[i][j] ); где h - известные величины, A и b - постоянные величины. Требуется найти P в каждом узле расчётной области. К примеру, есть прямоугольная область, задаю количество узлов по i скажем 5 (т.е. 0<=i<5) и по j столько же. Получается матрица области - 5 на 5. Плюс ко всему даны граничные условия: P[1][j] - P[1][j-1] = 0 P[i][1] + P[i+1][1] = 2F P[i+1][4] + P[i][4] = 2F P[4][j] + P[4][j+1] = 2F , где F - постоянная (любое значение, к приперу 771) Так вот вопрос в том как найти все значения величины P в каждом узле. Я знаю что должна получится матрица системы уравнений размером 25х25, но как её получить + как учитывать такие граничные условия не могу сообразить? |
|||
|
||||
Sannis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.8.2007 Где: Москва Репутация: 1 Всего: 13 |
Видимо всё-таки 1<=i<=5 ![]() Теоретическая часть: http://csa.ru/~stan/multigrid/ Практически нужно из уравнения выразить P[i][j] через остальные переменные. Далее итеративно проходить по всем внутренним точкам области и рассчитывать P[i][j] на следующем шаге. Единственное, чего нам не хватает - удобных граничных условий: P[1][j] - P[1][j-1] = 0 => P[1][j] = P[1][j-1] = C и не зависит от j => P[1][1] = C P[i][1] + P[i+1][1] = 2F => P[i+1][1] = 2F - P[i][1] => P[2][1] = 2F-C, P[3][1] = C, P[4][1] = 2F-C, P[5][1] = C. P[i+1][4] + P[i][4] = 2F - аналогично предыдущему. P[4][j] + P[4][j+1] = 2F - а вот отсюда получаем, что если точек нечётное число, то мы не сможем определить отсюда C. а если четное, то C = F ![]() ![]() -------------------- |
|||
|
||||
Kostik88 |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 9.5.2008 Репутация: 2 Всего: 2 |
Нет так не пойдёт, ведь все граничные условия записаны в неявном виде. Можно ГУ записать в таком виде: P[0][j] - P[0][j-1] = 0 (условие симметрии) P[i][0] = F P[i][4] = F P[4][j] = F Но вот с первым граничным условием не знаю что делать. ![]() И ещё вопрос: Sannis, я посмотрел сайт который вы мне кинули... там есть пример алгоритма для уравнения лапласа.... так вот я попробовал закодить его на С++, но решения не получается Оо Может где то я напутал?
А вот собственно сайт: http://csa.ru/~stan/multigrid/lesson1.html Это сообщение отредактировал(а) Kostik88 - 5.12.2008, 22:04 |
||||
|
|||||
Kostik88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 9.5.2008 Репутация: 2 Всего: 2 |
Я в коде заменил вместо D=0 поставил D=1.... вроде чтото считает, но невязку fabs(p - a[i][j]) выдаёт какуюто странную.... она больше единицы Оо и условие while(D>eps) не выполняется, т.е. программа пробигает все итерации пока не дойдёт до максимальной и следовательно выходит из цикла... я немогу понять в чём проблема. Помоготи резобраться пожалуйста.
|
|||
|
||||
Kostik88 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 9.5.2008 Репутация: 2 Всего: 2 |
Я в коде заменил вместо D=0 поставил D=1.... вроде чтото считает, но невязку fabs(p - a[i][j]) выдаёт какуюто странную.... она больше единицы Оо и условие while(D>eps) не выполняется, т.е. программа пробигает все итерации пока не дойдёт до максимальной и следовательно выходит из цикла... я немогу понять в чём проблема. Помоготи резобраться пожалуйста.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |