LINUX.ORG.RU

вопрос про численные методы


0

1

нужно рассчитать двумерное распределение потенциала в области ограниченной электродами, с известными условиями на стенках и заполненной известной плотностью заряда. вроде, что самое оптимальное здесь — разбивать уравнение пуассона на конечные разности методом креста и решать методом последовательных релаксаций. возник вопрос — каким образом задать «свободную границу», ось симметрии, и «портал» — 2 границы, замыкающие область саму на себя.

★★★★★

Последнее исправление: thunar (всего исправлений: 1)

Свободная граница имитируется так — создается еще один, виртуальный слой точек за пределами той границы, которая является осью симметрии. Потенциал в точках после границы приравнивается к потенциалу точек до границы. То есть

U_{i, j+1} = U_{i, j-1}

Правда, матрица в таком случае получается уже не такая красивая, как при условии Дирихле — ну да не страшно.

Второе условие, если я правильно понимаю, будет такого вида:

U_{i, j+1} = U_{i, 1}

То есть, значение потенциала в вртуальном дополнительном слое совпадает со значением потенциала в первом слое (при предположении, что сама граница — это слой нулевой).

decadent
()
Ответ на: комментарий от decadent

Только это не свободная граница, у Вас на такой границе поле ноль выходит. Фиксировать надо производную по нормали к границе.

Замыкание области самой на себя вообще то называется периодическими граничными условиями;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

Только это не свободная граница, у Вас на такой границе поле ноль выходит. Фиксировать надо производную по нормали к границе.

Производная по нормали к границе в конечных разностях будет иметь такой вид:

(U_{i, j+1} - U_{i, j-1}) / (2 * \Delta)

Это если дискретизировать по центральным разностям. Насколько я помню, при использовании центральных разностей схемы получаются более устойчивыми.

А почему у меня на границе будет нулевое поле? Я же как раз производную нулю и приравниваю.

Замыкание области самой на себя вообще то называется периодическими граничными условиями;-)

Ага. Сам долго думал, что имел в виду автор.

PS: Сам численными методами уже несколько лет не занимаюсь, мог и подзабыть.

decadent
()
Ответ на: комментарий от decadent

> А почему у меня на границе будет нулевое поле? Я же как раз производную нулю и приравниваю.

Потому что поле - это производная от потенциала, а в задаче ищется как раз потенциал;-)

Про центральные разности прально, ну тут пусть у ТС голова болит - как он там сетку вводит и т.д.

AIv ★★★★★
()
Ответ на: комментарий от AIv

Потому что поле - это производная от потенциала, а в задаче ищется как раз потенциал;-)

Угу, пардон, забыл об этом.

PS: Тред, в котором белки разговаривают о численных методах :-)

decadent
()
Ответ на: комментарий от decadent

Белки будут править миром!

Вообще среди ЛОРОвских аватров белки и крысы почти догоняют пингвинов... м.б. выпустить беличий дистрибутив?;-)

AIv ★★★★★
()

Напиши, плиз, примерный вид уравнений. И да, схема «крест», если я правильно понял о чем ты, тут не прокатит. Нужно либо симметричную схему юзать, либо повышенной точности, т.е. неявные.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Напиши, плиз, примерный вид уравнений. И да, схема «крест», если я правильно понял о чем ты, тут не прокатит. Нужно либо симметричную схему юзать, либо повышенной точности, т.е. неявные.

Да там наверняка обычное уравнение Пуассона, для которого «крест» вполне работает. Хотя если электроды внутри — «тады ой».

decadent
()
Ответ на: комментарий от decadent

> Из пушки по воробьям.

Ну хозяин — барин. Это довольно честный и простой метод решения уравнения Лапласа. Там есть фортрановский код для 2D случая. Вся прога под сотню строк. Я сделал каце-каве с легкой обработкой напильником в матлаб и получил решалку для моей задачи через несколько часов. Ну конечно полезно еще прочитать первые две главы книги.

Fast BEM для не слишком сложной геометрии не впился, это да.

anonymous
()
Ответ на: комментарий от LongLiveUbuntu

обычное \frac{\partial^2 \phi(x,y)}{\partial x^2}+\frac{\partial^2 \phi(x,y)}{\partial y^2} = -4\pi (n_i(x,y)-n_e(x,y))

n_i и n_e — задаются с нужным шагом в узлах. на границе можеть быть задан или явно потенциал, или вышеописанные условия.

область — прямоугольник,

thunar ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

Я не большой спец по решению у-я Лапласа, но ИМНО при правильном подборе коэффициентов креста для релаксации более чем достаточно - интересует ведь установившееся решение. А если уж формально придираться - о какой неявности идет речь, если в задаче нету времени?:-)

AIv ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Извиняюсь, точно Лаплас.

Уравнение Лапласа — частный случай уравнения Пуассона, когда в правой части стоит 0. У топикстатртера Пуассон. Методов решения этих уравнений великое множество, как аналитических, так и численных. Простеший — та самая схема «крест» — метод конечных разностей. Методы конечных элементов и граничных элементов значительно сложнее, зато позволяют решать эти уравнения в областях сложной формы.

decadent
()
Ответ на: комментарий от AIv

о какой неявности идет речь, если в задаче нету времени?

Бывают неявные схемы — в них вводится нечто вроде «искусственного времени». Схемы хороши своей повышенной устойчивостью к ошибкам округления, но требуют внимательности при составлении.

Блин, хотел посоветовать топикстартеру прекрасную книжку по численным методам в матфизике — но забыл ее название. Но в принципе, если математика не очень пугает, можно посмотреть Тихорова и Самарского, они тоже круты.

decadent
()
Ответ на: комментарий от decadent

Да-да, только вот судя по вопросам ТС ему бы явную схему хоть как нить выродить... И вообще неявные схемы для двумерной параболики... как белка-белке, я б не взялся, уж проще тогда фурье применить.

ТС-у:

1) задаете начальные значения для потенциала на сетке (какая нить константа, напр совпадающая с потенциалом электродов, или распред потенциала от электродов без учета плотности заряда в области)

2) запускаете интерационную схему, на каждом шаге обходите все ячейки, в каждой ячейке U[i,j] = U[i,j]*(1-alpha)+alpha* ... где 0<alpha<0.5, тремя точками обозначен тот самый крест с учетом гранусловий

3) схему крутите до тех пор, пока во всех ячейках за шаг изменения потенциала не будут меньше некоторой маленькой чиселки epsilon которая и есть точность.

Как то так.

AIv ★★★★★
()
Ответ на: комментарий от thunar

очень хотелось бы тупое описание алгоритма по шагам.

Я несколько лет уже этим не занимаюсь, так что описание пошаговое не дам. Но идея такова — у тебя внутри области в точке с номером (i, j) дискретизированное уравнение получается такое:

(U_{i+1, j} - 2 U_{i, j} + U_{i-1, j}) / \Delta{x} + (U_{i, j+1} - 2 U_{i, j} + U_{i, j-1}) / \Delta{y} = -4\pi (n_i(i,j)-n_e(i,j))

Соответственно, совокупность этих уравнений образует систему, в которой количество уравнений меньше, чем точек в сетке. Недостающие уравнения получаешь из граничных условий. Получится у тебя система уравнений с разреженной матрицей. Есть специальные методы решения таких систем, но имхо должны прокатить и стандартные, просто будет дольше считаться. Надо пробовать.

Вообще, погугли на предмет метода конечных разностей для уравнений в частных производных эллиптического типа. В частности, в книге «Численные методы и программирование на фортране» Мак-Кракена и Дорна, если мне не изменяет память, есть пример решения подобной задачи на грубой сетке.

ЗЫ: Полупроводники обсчитываешь? :-)

decadent
()
Ответ на: комментарий от LongLiveUbuntu

Надеюсь, не Бахвалова, Жидкова и Кобелькова?

Нет, это больно крутая книжка, я ее не осилил. Та была переводная, издательства «Мир».

decadent
()
Ответ на: комментарий от LongLiveUbuntu

Тогда лучше Калиткина, хорошая вещь.

Согласен, Калиткин хорош. Но та книга была переводная. Я уже посоветовал топикстартеру посмотреть Мак-Кракена и Дорна — она уж совсем для чайников, даже я разобрался :-)

decadent
()
Ответ на: комментарий от AIv

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

Что-то ты путаешь. У топикстартера вполне себе эллиптическое уравнение, которое можно решать и явно (проще, но высок риск накопления погрешностей), и неявно (можно подобрать схему, в которой погрешности накапливаться не будут, но это тот еще геморрой и при составлении системы уравнений, и при программировании).

Ниже ты фактически преобразуешь исходное уравнение в параболическое, вводя «виртуальное время», и решаешь его именно как параболическое. Получается итерационный метод, но есть и прямые методы, я выше говорил именно о них.

ТС-у:

1) задаете начальные значения для потенциала на сетке (какая нить константа, напр совпадающая с потенциалом электродов, или распред потенциала от электродов без учета плотности заряда в области)

2) запускаете интерационную схему, на каждом шаге обходите все ячейки, в каждой ячейке U[i,j] = U[i,j]*(1-alpha)+alpha* ... где 0<alpha<0.5, тремя точками обозначен тот самый крест с учетом гранусловий

3) схему крутите до тех пор, пока во всех ячейках за шаг изменения потенциала не будут меньше некоторой маленькой чиселки epsilon которая и есть точность.

Поддерживаю, при этом альфу можно выбирать, пользуясь полиномами Чебышева — это сглаживает начальные колебания решения (Хокни, Иствуд, Численное моделирование методом частиц — ТС, посмотри и эту книжку, она тоже годная, хоть и посложнее, чем Мак-Кракен с Дорном). А можно и просто попробовать разные альфы — при какой лучше сходится, ту и оставить.

decadent
()
Ответ на: комментарий от LongLiveUbuntu

Бахвалова в топку ибо «для академиков».

Ага, я помню, как мне, пацану из деревни, который из компьютеров видел только «Спектрум», на 2 курсе порекомендовали эту книжку в качестве учебника по численным методам. Я хоть и любил математику, но мягко говоря офонарел. Хорошо, что мне вскоре попалась книжка Мак-Кракена и Дорна — там все нужные методы были рассмотрены наглядно и с примерами :-)

decadent
()
Ответ на: комментарий от decadent

> Что-то ты путаешь.

Ну да, с терминологией слажал, каюсь. Но тем не менее неявные схемы для двумерных и более задач я б никому не рискнул советовать - если человек сам до этого не дошел, то есть куда более приятные способы вывихнуть себе мосг;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

Но тем не менее неявные схемы для двумерных и более задач я б никому не рискнул советовать

Полностью согласен. Выводить их, а потом еще и программировать — та еще гимнастика для внимательности.

decadent
()
Ответ на: комментарий от decadent

thx за книжку. ещё нашёл хорошие описания алкоритмов в книжке «молоковский, сушков — интенсивные электронные и ионные пучки». сделал всё методом верхней релаксации, считает отлично, примерно за ~2n итераций.

thunar ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.