Оператор Лапласа
Боголюбов А.Н., Кравцов В.В. Задачи по математической физике. М: Изд-во МГУ, 1998.
(книга для 3 курса физфака, курс мат. методов в физике)
Самарского книги глянь. Название не помню
, например
Если прогу не найду, придется читать и писать...
..А может все-таки у кого-то таки завалялась програмка?
но у большинства было в круге
мне бы хоть какую-нибудь, там уж я переделаю..
а в цилиндре гармоники Лапласа не синусы, а функции Бесселя, с которыми х что поделаешь
только за правильность
не ручаюсь хотя ошибок не видел еще
кстати C#
Подскажите плз кто-нибудь какие-нибудь хорошие ф-ции для граничных условий, чтобы получалось разумное решение! (чтобы на них можно было прогу протестить)
Только в пробной функции должны присутствовать как старшие, так и младшие гармоники Лапласа, т.к. одни методы хорошо сходятся на младших, другие – на старших
Так вот, мега явный метод.
Два квадратных массива, U и Ut. На очередном шаге вначале считается внутренность Ut как Ut[i][j] =
(U[i - 1][j] - 2 * U[i][j] + U[i + 1][j]) / (hx*hx) +
(U[i][j - 1] - 2 * U[i][j] + U[i][j + 1]) / (hy*hy)
Потом считаются новые значения U[i][j] = U[i][j] + Ut[i][j] * dt (опять таки для внутренних точек прямоугольника (кстати форма фигуры может быть произвольной.
Потом для внешних точек подставляется краевое условие.
Это было для кр.усл. первого рода. Для второго - всё немного сложнее. Для третьего - хз.
Метод сходится если dt < h*h, кажется. Точно не помню.
//d-оператор Лапласа
dU=-f,
U(x,a)=s1(x);
U(x,b)=s2(x);
U(c,y)=s3(y);
U(d,y)=s4(y);
то есть она стационарная и никакого dt там нет
вот решение методом переменных направлений
пусть dU=L1(U)+L2(U)
сначала решается методом прогонки(по i) уравнение по
первому направлению для каждого j:
{U^(k+1/2)|i,j - U^(k)|i,j } / tau1 = L1(U^(k+1/2|i,j + L2(U^(k|i,j + f|i,j
j=1..N2-1
потом прогонка(по j) по второму для каждого i:
{U^(k+1)|i,j - U^(k+1/2)|i,j} / tau2 = L1(U^(k+1/2|i,j + L2(U^(k+1|i,j + f|i,j
i=1..N1
L1 и L2 - разностные операторы второго порядка
L1(U)|i,j = {U|i-1,j - 2U|i,j + U|i+1,j} / (dx1 * dx1)
L2(U)|i,j = {U|i,j-1 - 2U|i,j + U|i,j+1} / (dx2 * dx2)
k-номер итерации
повторять до нужной точности
tau1, tau2 -параметры
сходится при всех tau1>0 tau2>0
в етом ведь как раз и состоит задача
dU/dt = laplas(U). Типа уравнение колебаний мембраны.
ЗЫ ур-ние колебаний d^2U/(dt)^2=laplas(U)
у тебя теплопроводность
=) точно. А я ещё думал, зачем же мне массив Ut =) Если чуть-чуть подпадчить формулы, то получатся колебания, вот!
п.с. Мне тут принесли прогу с решением, вроде работает, не могли бы вы подсказать что это за метод в ней? Когда он сходится и т.п.?
int solute
{
int i, j;
double *tmp;
// [a, c] x [b, d]
// a----c
// | |
// b----d
double a = 0;
double b = 0;
double c = 1;
double d = 1;
double h = 0.01;
double eps = 0.01;
N1 = (intc - a)/h + 2;
N2 = (intd - b)/h + 2;
u = (double*)malloc(N1*N2*sizeof(double;
next_u = (double*)malloc(N1*N2*sizeof(double;
for (i = 0; i < N2; i++)
for (j = 0; j < N1; j++)
u[i*N1 + j] = next_u[i*N1 + j] = 0;
for (j = 0; j < N1; j++) {
u[j] = next_u[j] = psi3(a + h*j);
u[(N2-1)*N1 + j] = next_u[(N2-1)*N1 + j] = psi4(a + h*j);
}
for (i = 0; i < N2; i++) {
u[i*N1] = next_u[i*N1] = psi1(b + h*i);
u[i*N1 + (N1-1)] = next_u[i*N1 + (N1-1)] = psi2(b + h*i);
}
while (1) {
for (i = 1; i < N2-1; i++)
for (j = 1; j < N1-1; j++)
next_u[i*N1 + j] = 0.25*(u[(i-1)*N1 + j] + u[(i+1)*N1 + j]
+ u[i*N1 + (j-1)] + u[i*N1 + (j+1)] - h*h*f(a + h*j, b + h*i;
tmp = u;
u = next_u;
next_u = tmp;
if (norm(u, next_u) < eps*eps)
break;
}
return 0;
}
dU=0 c данными граничными условиями
но он явный а значит сходимость у него так себе
вообще итерационные методы выглядят так
B{U^(k+1)-U^(k)}/tau+AU^(k)=fа то что в программе у тя не подходит под описание ето
B,A - матрицы причем AU=f
tau - bnthfw gfhfvtnh
Это метод Якоби, Аркадий.
И прошу Вас, не могли бы вы включить в текст, выкладываемый на форуме, лицензионное соглашение, подписанное Вами в момент принятия программы (внутрь).
Да, я Батор, да, я самый блять умный.
исправляюсь:
***************
*Олег Андреев (с)*
***************
great thanks to him.
п.с. Инет стоит, даже не пошатнется
U^(k+1)-U^(K)+AU^(k)=f
никак не могу понять как из этого
получается то чо у тя в проге написано
не мог бы объяснить, может я гдето не прав...
смотреть здеся самарский гулин стр 137
Оставить комментарий
migel
Подскажите пожалуйста где можно найти про то как решать задачу для оператора Лапласа в прямоугольнике? (даны краевые условия)Мне надо написать прогу которая это делает..
Или может у кого-нибудь есть уже готовое что-то похожее?...
Вроде я слышал на м\м такое пишут на 4м курсе..