Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Решение завдання Дирихле для рівняння Лапласа методом сеток

РефератДопомога в написанніДізнатися вартістьмоєї роботи

У першому кроці область D дискретизируется. Вона замінюється галузь Dh шляхом розбивки області D паралельними прямими з такого правилу: yi=y0 ± ih, xj=x0 ± ih, i, j=0,1,2… РР. Void CreateNet (void); // Procedure Prototypes int IsLineFit (float Param); void CrMtrD (void); void RegArrayX (); void RegArrayY (); void CreateDh_(); int IsFit (point Par); void FillF (); void CreateDh (); int IsInner… Читати ще >

Решение завдання Дирихле для рівняння Лапласа методом сеток (реферат, курсова, диплом, контрольна)

1. ПОСТАНОВКА ЗАДАЧИ.

Вирішити чисельно завдання Дирихле для рівняння Лапласа :

[pic].

(x, y) ?D; u|Г=xy2=f (x, y) ;

область D обмежена лініями: x=2, x=4, y=x, y=x+4 ;

(x0, y0) = (3, 5) .

Слід вирішити завдання спочатку з крок з x і з y: h=0.2, потім і з кроком h=0.1. Точність рішення СЛАУ ?=0.01 .

2. ОПИС МЕТОДУ РІШЕННЯ ПОСТАВЛЕНОЇ ЗАДАЧИ.

Завдання, поставлене вирішується чисельно з допомогою програми, реалізує метод сіток, розроблений для чисельного виконання завдання Дирихле для рівнянь эллептического типа.

Програма написана мовою З++, серед Borland З++ версії 3.1. Нижче описаний алгоритм роботи цієї программы.

1. У першому кроці область D дискретизируется. Вона замінюється галузь Dh шляхом розбивки області D паралельними прямими з такого правилу: yi=y0 ± ih, xj=x0 ± ih, i, j=0,1,2… РР.

Розбивка виробляється до того часу, поки поточна пряма нічого очікувати лежати повністю поза області D. Виходить безліч точок (xi, yj).

2. За область Dh приймають ті точки безлічі (xi, yj), які потрапили всередину області D, і навіть доповнюють це безліч граничними точками.

3.Во всіх точках області Dh обчислюються значення функції f (xi, yj) .

4. За область Dh* приймаються все внутрішні точки області Dh, тобто. задовольняють требованию:

(xi, yj)? Dh*, якщо (xi+1,yj)? Dh, (xi-1,yj)? Dh, (xi, yj+1)? Dh, (xi, yj-1)? Dh .

5. В усіх життєвих точках області Dh* обчислюється функція F (N)*[i, j] (індекс N позначає номер ітерації, де виробляється вычисление):

F (N)*[i, j]=(f (xi+1,yj) + f (xi-1,yj) + f (xi, yj+1) + f (xi, yj-1))/4.

6. Тепер, якщо max | F (N+1)*[i, j] - F (N)*[i, j]|<?, узятий за всі точкам області Dh*, то завдання виконане; якщо ні, то виконувати крок 5 (перераховувати функцію F (N)*[i, j] через значення F (N-1)*[i, j]) до того часу, доки виконане буде вказане условие.

3.ТЕКСТ ПРОГРАММЫ.

#include #include #include #include #include.

int i, j, k; // Variables float h, x, y, tmp, E1; struct point { float xx; float yy; int BelongsToDh_; int BelongsToDh; float F; float F_;

} p0, arrayP[13][33]; float arrayX[13]; float arrayY[33]; float diff[500];

void CreateNet (void); // Procedure Prototypes int IsLineFit (float Param); void CrMtrD (void); void RegArrayX (); void RegArrayY (); void CreateDh_(); int IsFit (point Par); void FillF (); void CreateDh (); int IsInner (int i, int j); void FillF_(); void CountDif (); void MakeFile ();

void main (void) //MAIN.

{ clrscr (); p0. xx = 3; p0. yy = 5; h = 0.2; p0. BelongsToDh_=1; p0. BelongsToDh=1;

CreateNet ();

RegArrayX ();

RegArrayY ();

CrMtrD ();

CreateDh_();

FillF ();

CreateDh ();

FillF_();

CountDif (); while (E1>=0.005) { for (i=0;i.

Показати весь текст
Заповнити форму поточною роботою