Задача Дирихле для уравнения Пуассона
Задача Дирихле для уравнения Пуассона
Многие задачи физики и механики сводятся к уравнению в частных производных с заданными значениями функции на границе расчётной области (изгиб мембраны, стационарного распределения температуры в конструкциях, кручения стержня произвольного сечения и т.д.)
Если область прямоугольная, то задавая число точек по координатам = и , получаем соответствующую сетку с шагами по направлению , по направлению .
Аппроксимируя вторые производные:
Получаем
Выделяем диагональный член и задаём следующую итерационную схему:
Задача реализована следующей программой на Qbasic 4.5
5 CLS
10 N1 = 8: N2 = 6: DL1 = 1.0: DL2 = 1.0
20 DIM U(N1, N2): G = 10: S = 40: C = -400
30 H1 = DL1 / N1: H2 = DL2 / N2
40 FOR I = 0 TO N1
50 X = H1 * I
60 FOR J = 0 TO N2
70 Y = H2 * J
75 U(I, J) = 0
80 IF ((I = 0)OR(I = N1)) THEN U(I,J)=4*G*Y*(DL2-Y)/DL2
90 IF ((J = 0)OR(J = N2)) THEN U(I,J)=4*S*X*(DL1-X)/DL1
100 NEXT J: NEXT I
110 K = 0
120 Z = 0
130 FOR I = 1 TO N1 - 1
140 FOR J = 1 TO N2 - 1
150 R = U(I, J)
160 P = (U(I - 1, J) + U(I + 1, J)) / H1 / H1
161 P = P + (U(I, J - 1) + U(I, J + 1)) / H2 / H2 - C
162 U(I, J) = P / (2 / H1 / H1 + 2 / H2 / H2)
170 Z = Z + ABS(U(I, J) - R): NEXT J: NEXT I
180 K = K + 1
190 IF ((Z > .001) AND (K < 100)) THEN 120
200 PRINT " k = ", K
210 FOR J = 0 TO N2
220 FOR I = 0 TO N1: PRINT " ", U(I, J); : NEXT I
221 PRINT
230 NEXT J
240 END
Результаты вычислений:
k = 62
0 17.5 30 37.5 40 37.5 30 17.5 0
5.5555 23.055 35.5554 43.0554 45.5554 43.0554 35.5554 23.0555 5.5555
8.8888 26.3887 38.8887 46.3886 48.8886 46.3887 38.8887 26.3888 8.8888
10 27.4998 39.9998 47.4997 49.9997 47.4998 39.9998 27.4999 10
8.8888 26.3888 38.8887 46.3887 48.8887 46.3887 38.8887 26.3888 8.8888
5.5555 23.0555 35.5554 43.0554 45.5554 43.0554 35.5555 23.0555 5.5555
0 17.5 30 37.5 40 37.5 30 17.5 0